BaWaMI (revision 128)

Posted on 2015-12-14 at 05:26 in Music, Programs by Robbi-985.

This version includes a whole load more bug fixes, plus some serious support for running Bawami from the console (command prompt), which also guarantees to never display message boxes, along with several other fun new command line parameters.  It should also start slightly faster (less writing to log file, and some language files are now only loaded when they’re needed), seeking to a different playback position is easier on the ears, and there’s a bunch of safeguards added to the code related to writing OGG files. A few command line parameters have been renamed to make them less long-winded, they all begin with a slash instead of a hyphen now, and Bawami now lets you know exactly which ones it didn’t understand (if any). But despite a lot of work being focussed on command line parameters, there are several GUI-related bug fixes, too!

NOTE: In order for Bawami to be able to output to the Windows console (command prompt) when using /console option, the EXE file is now compiled as a console-mode program. Annoyingly, this causes a console window to appear for a brief moment before Bawami’s main window appears. However, this doesn’t slow anything down; it’s only for part of the amount of time where, previously, nothing at all was displayed.

You can download the new version here (7.87 MB). Full details on all of the changes and bug fixes are below, but allow me to first introduce a new feature of Bawami:

The /console command line parameter

bawami /console /stdmidi 2020

If you run Bawami from the command line, this option should be very useful, and is highly recommended instead of /invisible. Text is output to “standard output” (meaning you can see what Bawami’s doing in the console), and you can respond to any messages by pressing keys on the console, too. In this mode, Bawami also starts faster and is safe to crash in the middle of playback (nothing is leaked – but for now, make sure that you also kill the OGG encoder if you crash it in the middle of writing an OGG file). Just for fun, you can also view every single raw MIDI message scrolling up in the console as it plays (/stdmidi) , and use /infolevel 1 or 2 to get a more in-depth look at exactly what’s going on internally. Of course, these options which spam text to the console will slow Bawami down a bit. Please check the “COMMAND LINE PARAMETERS” section in info.txt for full details, and see below for an overview of all changes/additions.

View all changes below the page break:

Graphical interface fixes/improvements

  • Fixed bug where toggling volume or expression override using a right-click menu did not change the colour of the appropriate bar(s), even though it did correctly prevent the MIDI from changing those controls (bug introduced in revision 122).
  • Fixed bugs while using live MIDI input (and not playing a MIDI file) where interface occasionally wouldn’t redraw properly when muting/unmuting a MIDI channel, or overriding a control.
  • Fixed bug on MIDI Messages view where text regarding a note-on message on a monophonic MIDI channel would sometimes end with part of a previous message’s text, instead of the chosen sound channel.
  • Button on main window to display the config window is now a spanner icon instead of an ambiguous “[S]”. It can still be triggered by the alt-key shortcut determined by “lang\message\051.txt” (Alt-S = “Settings” in English / “settei” in Japanese).
  • Messages displayed if an OGG file can’t be written now say “OGG” instead of “WAV”.
  • More-relevant text is displayed on MIDI Messages view when SysEx tries to set pitch-bend sensitivity while the checkbox to allow setting bend sensitivity is unchecked.

Command line parameters (see section in info.txt for details)

  • All options now begin with a slash instead of a hyphen (e.g. “/new” instead of “-new”), to avoid potential issues when a path/filename happens to contain a valid command line option.
  • New option /console designed for when using Bawami from the command prompt. Similar to /invisible, but also displays no message boxes (e.g. errors); they’re output to Windows’s “standard error” handle (visible in console). Answers to questions can be typed on the console (“standard input”). See info.txt for details. Crashing Bawami while using /console leaks no resources.
  • In order for Bawami to be able to output to the Windows console (command prompt) when using “/console” option, the EXE file is now compiled as a console-mode program. Annoyingly, this causes a console window to appear for a brief moment before Bawami’s main window appears. However, this doesn’t slow anything down; it’s only for part of the amount of time where, previously, nothing at all was displayed.
  • Removed all references of angle brackets (<>) from info.txt and kept only square brackets ([]) (which Bawami did already allow) after a close call during testing where the command prompt interpreted “>” as “redirection”, overwriting a MIDI file with Bawami’s text output. Although Bawami still understands angle brackets, please only use square brackets on the command prompt!
  • Renamed a few options: /soundstereowidth is /stereowidth, /sounddetune is /maxdetune, and /soundvol is /mastervol.
  • /pitdump now works when using /invisible.
  • Added option /infolevel (0|1|2), for use with /console, to choose how much info is sent to the “standard output” handle. The 3 levels range from 0 (as minimal as possible) to 2 (shows the entire log file in realtime, which causes some slowdown). The default is 0. Full details are in info.txt.
  • Added option /stdmidi, for use with /console, to output MIDI messages as hexadecimal text to the “standard output” handle. This causes some slowdown (but looks cool on the command prompt), and requires a parameter, so please see info.txt for an explanation.
  • New option /seek, intended for use with /playnow (1|2), to start playback from a MIDI file position other than the beginning. Position can be specified in 3 different ways; see info.txt for details. Note: /console automatically implies /playnow 2.
  • /playnow 2” is now allowed, and is implied by /invisible and /console. Like “/playnow 1“, it starts playback of the MIDI file also being given on the command line, but additionally skips to the first “NOTE ON” message to avoid a long period of silence (preceeding setup messages will still be processed, but as quickly as possible).
  • When using /writewavonly or /writeoggonly with /console, current rendering position is displayed.
  • No longer crashes messily when told to load a MIDI whose filename isn’t allowed under Windows (e.g. contains a colon in the middle).
  • A warning is shown about any unrecognised command line options that were given and ignored, to avoid confusion as to why Bawami is not doing what is expected.
  • No longer wastes time loading some language files if started with /invisible (or /console) option.
  • No longer wastes time re-setting up sound system for live playback after rendering a MIDI using /writewavonly or /writeoggonly.
  • Fixed bug where passing /maxnumoscs or /8bitmix along with /invisible could cause Bawami to exit on startup without playing the MIDI file.
  • No longer possible to crash Bawami by passing “/maxnumoscs 0” (or setting MaxNumOscs to 0 in config file).

Sound-related changes

  • Skipping to a different position during playback (either forward or backward) is significantly easier on the ears! Bawami advances volume envelopes forward by 350 milliseconds upon seeking to avoid an explosive sound where e.g. lots of kicks play on top of each other.
  • Tweaked calculation of a MIDI channel’s dry sound level based on chorus/reverb levels again (chorus should muffle sound less). It’s a tricky balancing act.
  • Increased release speed of JP Pulse Leads (080_025_003, 080_026_003) to minimise note overlap on sequential notes (still without making an abrupt pop on note-off).
  • Made splash cymbals (percussive note 055) a little more audible.
  • In XG system mode, for instruments which originally had a (near-) instant release, “release time” messages >64 (to add release time) now have the same amount of effect as when in GS mode (default), i.e. they have more effect than before.

Changes related to OGG files

  • OK/Cancel buttons of OGG quality selection dialogue are now language-specific.
  • When writing very low-quality OGG files, there was a chance of the last fraction of a second being cut off. This is fixed now.
  • When starting to write OGG file, no longer crashes if oggenc (encoder) can’t be run for some reason.
  • In case vcut (OGG file splitter) fails for some reason, the noise burst at the end of the file is quieter now.

Miscellaneous important behaviour fixes

  • Toggling volume override using a right-click menu works again (broken in revision 118, and I only just noticed).
  • Sound Canvas LCD emulation and the sending of note-ons and note-offs to MIDI-out now always disable themselves while seeking to a new playback position, to avoid wasting time. This was supposed to happen before, but it didn’t always work.
  • The message regarding a chosen language being made for a different version of Bawami to the one currently running is now displayed in the newly-chosen language instead of the “previous” language.
  • Fixed bug where messages to set decay time to >64 (lengthened) would be ignored if a previous “decay time” message had resulted in a very short decay (the exact value required to trigger the bug depended on the instrument’s usual decay speed).

Other crash fixes

  • Not possible to crash Bawami by using keyboard shortcuts to control playback while a MIDI file is in the process of being loaded.
  • Fixed possible memory corruption when sysex messages with less than 5 data bytes were processed.
  • No longer possible to crash Bawami by pressing Ctrl+Left arrow key when no MIDI file is loaded (bug present since hotkey support was first added in revision 108, amazingly).

Speed optimisations

  • “Message” language files are now loaded on demand (and cached), instead of all ~100 being loaded at startup, to increase startup times a bit. The exception is if a new language’s files don’t yet exist and have to be copied from the “English” folder first.
  • Very small speed improvement when loading a MIDI file (I still need to completely rewrite the MIDI-loading code).
  • Very small speed improvements to startup, drawing waveforms of MIDI channels, initialising sound system (when clicking “Apply” on “Sound system” tab), and possibly overall.

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>