BaWaMI (revision 133)

Posted on 2017-11-29 at 00:40 in Music, Programs by Robbi-985.

This is a big update which fixes a bunch of bugs, especially ones related to the PC speaker, and graphical mistakes. A new internal tuning system means Bawami now supports a big range of tuning messages (their effects can combine together!), plus there are a few new instruments and tweaks to existing ones.

Some of the MIDI Tuning Standard messages are quite advanced, and you’d typically use some other scale-related software to generate the SysEx messages rather than hand-crafting them, but they mean that Bawami can now play with tuning other than equal temperament, or different scales entirely (e.g. Arabic).

You can grab this new version from here (7.80 MB), and view details of all the changed stuff in the full post, below:


  • Added support for the following types of tuning. The effects of all types of tuning add together in the listed order. There is one type per bullet point below. Messages on the same bullet point are alternative ways to modify the same internal data, so their effects don’t add together. See “ABOUT TUNING” in info.txt for a full explanation.
    • Single Note Tuning (SysEx), Bulk Tuning Dump (SysEx). Pitch of one or more of the 128 MIDI notes can be individually set to precise value(s), for all MIDI channels.
    • Master Coarse/Fine Tuning (SysEx). Pitch of all notes on all MIDI channels can be raised or lowered together.
    • Scale/Octave Tuning (1 or 2 bytes per note) (SysEx). Pitch of each of the 12 notes of the octave can be raised or lowered individually, for one or more MIDI channels.
    • Channel Coarse/Fine Tuning (RPNs). Pitch of all notes on one MIDI channel can be raised or lowered together.

PC speaker

  • Fixed bug where notes in the lowest octave allowed would not be played if there was a same note playing in the next octave up.
  • Related to previous bug: The correct octave numbers and frequency (Hz) are shown for the “Lowest note allowed” option (displayed frequency is now 2x the note’s, because the PC speaker plays notes shifted up by 1 octave).
  • PC speaker now always plays the correct pitch if an instrument is using multi-osc (instead of playing the frequency of one of the oscillators at random).
  • Fixed PC speaker playing the chosen “lowest note allowed” shifted up by an octave 50% of the time (this was due to the random detune making the frequency of that note be too low half the time).


  • Added Telephone Ring (124) (“Ringing” signalling tone is the best that Bawami can manage – when playing note A4, this is precisely the North America ringing tone. I chose this because one of the two sine waves is 440 Hz, easy to play with MIDI).
  • Added [GS] Starship (125_008_001).
  • Added [GS] Burst Noise (125_009_001).
  • Added [GS] Double Hit (055_010_002).
  • Modified Orchestra Hit (055) to take advantage of multi-osc.
  • Decreased volume of Power Guitar (030_016_002).
  • Increased volume of Polysynth Pad (090).

Crash / miscellaneous bug fixes

  • Better handling of Windows standby/sleep/hibernation (should no longer freeze with one CPU core maxed out when resuming).
  • No longer crashes on startup if ModSpeed in startup.cfg is 0.00 (the default of 6.00 will be used and saved).
  • Fixed crash when using MIDI Messages view and an unrecognised message for which there are no extra bytes plays (bug introduced in revision 132).
  • Fixed this bug related to (N)RPNs and data entry messages: If the currently-selected (N)RPN is changed, and then only one out of its MSB or LSB values are set using data entry, the non-set value becomes 0.
  • Fixed bug where any SysEx message beginning with 7Eh 7Fh (= “Universal Non-realtime”) would be interpreted as “GM Reset”. Now, only 7Eh ??h 09h ??h is interpreted as “GM Reset”.
  • Re-fixed crash if Windows has been running for more than roughly 28 days when beginning playback or enabling live MIDI input.

Graphical / logging improvements

  • Rewind/Play/Stop buttons now use proper icons (skin-specific), instead of text that approximates the symbol (e.g. “|<<“).
  • On the “Sound + MIDI Channels” view, fixed MIDI Note, Osc Wave and Osc Freq text not updating in some situations (was especially obvious if all sound channels were playing notes on one MIDI channel).
  • Fixed visual bug of the names of some notes above octave 9 (e.g. “C 10″) being written as if they’re octave 1 (e.g. “C 1″) (probably only visible on the “Sound + MIDI Channels” view).
  • When changing to/from a sound device that fails to initialise, playback position (or “MIDI IN”) is always hidden/re-displayed as appropriate.
  • Text for SysEx messages which definitely have bytes missing are now displayed in red on the “MIDI Messages” view.
  • Info text shown when moving mouse over the “Send “Reset” at start of playback” controls (on “MIDI out” tab) doesn’t have “[*T]” at the beginning anymore.
  • Reworded a few messages on the “MIDI Messages” view. Now: Data entry messages waste less space; Universal SysEx messages are prefixed with [U] instead of [GM].
  • Less useless text in log file where OS information is logged. Also, a trailing 0-byte is no longer written after the “CSD” text (accidental; upset some text viewers).
  • No longer writes text to the log file when overriding a control, clicking playback position bar, or releasing all MIDI notes (e.g. due to a Reset message or disabling MIDI output).

Other improvements

  • When muting a MIDI channel using right-click menu, notes playing on that channel now stop immediately (as already happened when muting by left-clicking the note volume bar area).
  • More efficient handling of “All Sound Off” (CC #120) message.
  • Note frequencies are accurate to 1-2 more significant figures (e.g. 3951.066 Hz instead of 3951.07 Hz, 8.175798 Hz instead of 8.175781 Hz).
  • Should leak fewer resources when exitting! The process was ending before a large number of objects’ resource-releasing code was able to run.
  • Slightly more efficient loading of config window (also reduced EXE size by 8 KB).

Leave a Reply

Your email address will not be published. Required fields are marked *


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>