BaWaMI (revision 122)

Posted on 2015-03-27 at 03:17 in Music, Programs by Robbi-985.

This very big update brings Bawami up to version 0.6! The biggest changes are support for Attack/Decay/Release Time MIDI messages to override an instrument’s default sound, kick drums in non-retro mode actually sound good, 22 new instruments (GS) plus a “Synth Brass 2″ (finally), everything on the “MIDI Params” tab works (it’s been redesigned and there are more options now), and a much better-sounding stereo chorus which does not stop working after some time has passed!

Other improvements include reduced CPU usage in most situations, 8 new columns on the “Sound+MIDI channels” window (and yet lower CPU usage here, too), higher-contrast colours for Sound Canvas LCD emulation make it easier to see, and I’ve also styled the “Override Other Controls” window to look a bit more like the main window. Plus, added support for a handful of SysEx messages, and the usual dose of bug fixes.

Download link and full details are below, but please note this important information first:

  • Please don’t extract this version of Bawami over an old version – I’ve renamed/removed some language and instrument files, so you will have duplicate files and instruments if you do this. If you want to keep the settings from your old version, simply copy its startup.cfg file into the new version’s folder. You can safely copy any custom skin folders and instruments you’ve made individually, too. Sorry about this inconvenience.
  • If you’re using something other than Windows XP or 7, you might need to run this new version of Bawami “as administrator” for the first time so that it can install a new font (jsmalle.fon, “Small Fonts“) which is used on the “Override Other Controls” window.

You can grab the newest version from here (7.41 MB), and see the full list of changes below the page break:

Sound-related improvements:

  • Improved sound of kicks, especially non-retro ones (filtered square wave is now used, instead of FMOD’s glitchy “saw” wave, and the filter also quenches pops). Slightly sped up code for starting/ending percussive notes while I was at it. Default (on first run) is now to not use retro percussion, because it’s not needed to hide kick glitches anymore (tick “Use retro percussion” on the Sound System tab if you don’t like this).
  • A much-better and stereo chorus is now used, instead of the mono one built into FMOD, which had a bug that caused it to stop working properly after some time had passed. Open-source chorus plugin (achorus.dll) is by Dennis Cronin.
  • Muting a MIDI channel now instantly stops its sound, instead of making the notes start releasing, which allowed the sound to continue for some time.
  • A note’s auto modulation now correctly continues even if the MIDI channel’s instrument changes while the note is playing (i.e. the held note doesn’t half-morph into the new instrument). However, a playing note’s auto modulation will stop when a message changes auto-mod speed or depth AND the instrument has been changed.

MIDI messages:

  • Added support for ATTACK TIME (CC #73, NRPN H001.L099), DECAY TIME (CC #75, NRPN H001.L100) and RELEASE TIME (CC #72, NRPN H001.L102). Only affects following notes on tone channels. I might tweak exactly how values affect times later (there’s no official meaning in the MIDI specs). See info.txt for details. You can disable responding to these messages on the “MIDI params” tab of the config window.
  • Bawami now distinguishes between GS and XG modes. Currently, this is only used to scale any attack/decay/release override values differently. GS mode is the default, and an XG Reset or GS Reset SysEx message sets the mode. The current mode is visible at the bottom-right of the “Sound + MIDI Channels” window.
  • Support for GS and XG SysEx messages to set VIBRATO RATE, VIBRATO DEPTH, VIBRATO DELAY, ATTACK TIME, DECAY TIME, RELEASE TIME (these can all also be set using control changes or NRPNs). For attack/decay/release changes, the current system mode (GS or XG) is ignored, and the type of SysEx message (GS or XG) is what determines the scaling of attack/decay/release values.
  • Support for GS and XG SysEx messages to set channel mode to monophonic or polyphonic (this was already possible using CCs #126 and #127). See “SUPPORTED SYSTEM-EXCLUSIVE MESSAGES” section in info.txt for details.

“Sound + MIDI Channels” view:

  • Added MIDI channel columns: sustain pedal, portamento time (red = on (CC #65), blue = next note only (CC #84)), attack/decay/release time adjustments, vibrato (auto modulation) depth/rate/delay adjustments.
  • When making the window appear while not playing a MIDI, the text is now immediately updated, instead of showing old values until you start playing.
  • Reduced CPU usage during playback (especially if the window is half-out of the screen so that only the “MIDI Channels” table is in view), even though more info is displayed there now.

Graphics-related improvements:

  • New option “Attempt to stabilise” when displaying one waveform per MIDI channel, which makes Bawami search for a zero-crossing point in the waveform and draw from this sample onwards in order to draw a stable waveform (if it isn’t too complicated). The number of samples drawn is same as before. If the search fails (it will with low frequencies), the waveform is drawn the same as before.
  • Styled “Override Other Controls” window to match the main window a little better. Instead of checkboxes to lock a control, alt-click a slider to lock it without moving it. The current value is now shown in its original range (e.g. 0-127; more accurate than a percentage).
  • Made Sound Canvas graphic LCD emulation easier to see by increasing contrast between “off” (blue) and “on” (black) colours.


  • Added the following instruments¬† (some of the basses ended up sounding similar to already-existing instruments (although not directly based on them), but will at least make MIDIs which use them sound closer to how they’re meant to sound):
    • [GS] Stack Strings (050_002_003)
    • [GS] SH101 Bass 2 (039_018_002)
    • [GS] Thick Matrix (089_001_002)
    • [GS] D-50 Fat Saw (081_011_003)
    • [GS] Velocity Lead (081_005_002)
    • [GS] 303 Square Bass (038_017_003)
    • [GS] Synth Shamisen (106_008_003)
    • [GS] Eruption (127_004_003)
    • [GS] JP-8 Bass (038_004_003)
    • [GS] Sequence Saw 2 (081_041_003)
    • [GS] Fat Sync Lead (084_017_003)
    • [GS] Pulse Saw (081_002_002)
    • [GS] Feline GR (081_003_002)
    • [GS] JP8 Pulse Lead 1 (080_025_003)
    • [GS] JP8 Pulse Lead 2 (080_026_003)
    • [GS] JUNO Rave (087_003_003)
    • [GS] Wire String Bass (039_011_003)
    • [GS] Modular Bass (039_002_002)
    • [GS] Sequence Bass (039_003_002)
    • [GS] MG Octave Bass 2 (039_006_003)
    • [GS] Mg Octave Bass 1 (039_005_003)
    • [GS] Beef FM Bass (039_008_001)
    • Synth Brass 2 (060)
  • Added support for Splash Cymbal (percussive note 055). It doesn’t really sound right, as usual with cymbals sounds…
  • Made Taiko Drum (116) unable to use such high frequencies for its low-pass filter, i.e. reduced the key-tracking intensity. It was painfully loud with high-pitched notes before.
  • Made release of OB2 Saw (081_001_001) unnoticably fast, instead of truly instant, to avoid pops when notes stop.
  • Made Electric Grand (002)’s filter a little less velocity-sensitive.
  • Increased attack/decay speed, decreased sustain level, and increased volume of French Horn (060).
  • Slowed decay and decreased distortion of Acid Bass (038_008_002).
  • Increased decay/release speed of Tambourine (113_016_003).
  • Increased decay time of Clavichord (007).
  • Increased volume of Voice Oohs (053) slightly.
  • Corrected filename of House Bass (039_022_002) to 039_022_003.
  • More thorough checking of bad parameters when loading instruments (particularly of DecaySpeed, which could otherwise cause a crash now that “DECAY TIME” MIDI messages are supported).
  • Fixed some typos in explanations in “default.txt” instrument file.

Miscellaneous changes:

  • All controls on “MIDI params” tab of config window are usable now. This section has been redesigned and there are new checkboxes to disable responding to portamento, attack/decay/release times, and the depth and delay of automatic modulation. The checkboxes take effect only from the moment you toggle them, so you’ll probably want to restart playback afterwards.
  • While setting up system files on first run, text now becomes red if there’s an error, instead of only the wording changing.
  • In translator mode, it’s now possible to edit the tooltips (info-rectangle text) of labels (if they have tooltips) by pressing Ctrl+B.
  • Added missing keyboard shortcuts on “GUI” tab of the config window.
  • Updated the download URL, which is copied to the clipboard if the pre-loader cannot find required files, from “” to “”.
  • Updated FMOD (fmodex.dll) version from 4.6.21 to 4.8.2. This appears to be the fastest version containing the features Bawami needs.
  • Version number increased to 0.6!

Other bug fixes:

  • Fixed bug where chorus and reverb processors remained running in the background after a WAV or OGG file had finished being written.
  • Fixed bug where Reverb or Chorus sliders on “Override Other Controls” window did not return to their original values when unticking their checkbox if the window had been displayed by right-clicking in empty space on the main window, as opposed to by right-clicking on a MIDI channel.
  • Fixed visual bug where note volume bars (or waveform) would remain visible at end of playback if window was minimized at the moment playback ended.
  • Bottom-most row of pixels of old instrument name (on main window) are now cleared when instrument name changes. Previously, they’d stay if the instrument name was too long (exceeded 3 lines of text).

Some important notes:

  • There is now a 64-byte limit to the length of text in instrument name language files, and a few other instrument-related language files, due to some speed optimisations I made while adding support for attack/decay/release changes. Please see tip #8 (new) at the bottom of “lang\instructions.txt” for details.
  • Various instrument and language files have been renamed/removed (NOTE: no instruments have been removed), so please don’t extract this version of Bawami on top of an old version. If you want to keep settings, please copy your old “startup.cfg” to the new version’s folder.
  • Please run this version of Bawami “as administrator” for the first time if a new font (jsmalle.fon, “Small Fonts”), used for the sliders on the “Override Other Controls” window, needs to be installed (if it’s not already installed). The font should already be installed with Windows XP and 7, and maybe other versions of Windows.

Speed-specific improvements:

  • Sound Canvas LCD emulation is not displayed while skipping to a new playback position, for speed.
  • Improvement to speed of drawing the main interface.
  • Fixed: Since percussion mapping was introduced in revision 111, CPU time was being wasted updating the envelope of silent sound channels whose last-played note was percussive (i.e. this would stop once channel was re-used to play a tone).

This graph was made with my laptop in power-saving mode, which lowers the CPU speed (thereby increasing the CPU usage of all processes). This was to avoid the CPU usage dropping too close to 0%, and therefore the differences between versions becoming too hard to see. The highest 2 solid lines (yellow and magenta) were made with the main window fully in view, and the “Sound + MIDI Channels” window half-out of the screen so that only the “MIDI Channels” table was in view, at 60 FPS. This is because I put effort into reducing the CPU usage of updating this table (having the “Sound Channels” table in view would make the overall reduction less), and because my laptop’s screen is much too small to fully fit both windows anyway =). The MIDI used was Falcom’s “Cavern Of Rasteenie“, which contains plenty of pitch-bend, modulation, pan and filter changes. Graphing started ~3.5 seconds into playback, when the first note played.

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>