Revision 135 (1076 KB): - Due to more settings being remembered between runs, the following command line parameters have changed: - "/pcspk" now expects expects "0" or "1" after it. To avoid the passed value being saved at exit, also use "/nosave". - "/nosound" now implies "/nosave" (it, and any other passed parameters, will not be remembered between runs). - "Use PC speaker" checkbox's state is saved between runs. - The chosen sound driver/device is saved and restored on next run, if the device is still available (if not, the default sound device is used). Note that ASIO devices don't disappear if disconnected, so if you were previously using a now-disconnected ASIO device, an error will be shown and you'll need to choose a new device. - No longer crashes after writing OGG or WAV file in /console or /invisible mode. - If Bawami is crashed in the middle of writing an OGG file (e.g. by pressing Ctrl+C when using /console), oggenc.exe (the encoder) stops running, too. - Fixed occasional bug where "Open..." button on main window remained disabled after writing an OGG or WAV file. - Info text shown when moving mouse over "Send "Reset" at start of playback" (on "MIDI out" tab) when "CCs & Insts" is selected doesn't have "[*T]" at the beginning (revision 133 only fixed this with any other selection). - "Send "Reset" at start of playback" setting is correctly saved between runs (broken in revision 132). - Eliminated click artifacts that were produced solely because of an instrument being in monophonic mode (when cutting an already-playing note). - Eliminated click artifact when an already-held note is played again on the same MIDI channel without being released first (either due to sustain pedal or because of a bad MIDI). - An extra optimisation is enabled in the compiler (/G6 instead of /G5). - Possibly fixed the bug where, when converting a MIDI to an OGG file, OGG quality will display as "10" in text with the slider at 0 (rare bug with no obvious cause). Revision 134 (1064 KB): - Checkbox on "MIDI params" tab to enable/disable responding to MIDI channel coarse/fine tuning messages now actually has an effect, instead of Bawami always responding to them no matter what. Revision 133 (1064 KB): - Text for SysEx messages which definitely have bytes missing are now displayed in red on the "MIDI Messages" view. - Rewind/Play/Stop buttons now use proper icons (skin-specific), instead of text that approximates the symbol (e.g. "|<<"). - 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). - Better handling of Windows standby/sleep/hibernation (should no longer freeze with one CPU core maxed out when resuming). - 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). - More efficient handling of "All Sound Off" (CC #120) message. - Should leak fewer resources when exitting! The process was ending before a large number of objects' resource-releasing code was able to run. - No longer crashes on startup if ModSpeed in startup.cfg is 0.00 (the default of 6.00 will be used and saved). - 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). - When changing to/from a sound device that fails to initialise, playback position (or "MIDI IN") is always hidden/re-displayed as appropriate. - Re-fixed crash if Windows has been running for more than roughly 28 days when beginning playback or enabling live MIDI input. - Slightly more efficient loading of config window (also reduced EXE size by 8 KB). - 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. - 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). - 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). - 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). - PC speaker: - 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). - 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. - 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). - Fixed crash when using MIDI Messages view and an unrecognised message for which there are no extra bytes plays (bug introduced in revision 132). - 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 line below. Messages on the same line are alternative ways to modify the same internal data, so they 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. - 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". - 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]. - Instruments: - 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). Revision 132 (1048 KB): - Due to the new "multi-osc" feature, and improvements to stability and MIDI input, version number is increased to 0.7! - Instrument changes where bank LSB is 004 (Roland SC-8850) are now treated the same way as ones for LSBs 001~003 regarding choosing an alternative instrument file if none exists. So, instrument changes in MIDIs explicitly made for the SC-8850 will now use the correct variation instrument (if it exists). See "BANK SELECTS" in info.txt for details. - "ALL NOTES OFF" is now sent on MIDI output when closing MIDI input device if "Echo live MIDI input" is ticked, to avoid stuck notes. - Portamento is no longer wrongly-affected by pitch-bends. Portamento and pitch-bend are now applied on top of the original note as 2 completely separate stages, as they should be. - Pressing Ctrl+Right to skip forward by 10 seconds no longer causes loud sounds if skipping past percussive notes (it sounds the same as when seeking forward by clicking the playback position bar). - "midiio2k.ocx" is no longer included or used. Bawami now does all MIDI input/output itself directly, which is what allows several of the MIDI in/out improvements in this release. - On MIDI Messages view, unrecognised MIDI messages have any extra bytes displayed as their hex values (as happens with SysEx messages), instead of interpreting them as plain text (useless if they contain non-printable characters or 0-bytes). - SysEx messages to display an invalidly-long amount of text on a Sound Canvas LCD (the SC supports a maximum of 32 characters) now cause Bawami to display only the first 32 characters. Previously, Bawami would crash if the message implied that the text should be longer than about 247 characters. - On MIDI Messages view, useless Data 1 and Data 2 values are no longer shown for sysex/realtime/meta messages. - When using MIDI output and MIDI thru (live MIDI input to MIDI output), messages played from a file aren't output twice. - Live MIDI input: - Fixed bug where some SysEx messages (especially ones whose first data bytes were low values such as 00) were completely misread. Such messages aren't understood, but they now appear correctly on the MIDI Messages view. - Improved timing accuracy! - No longer interprets message value FF (system realtime reset) as a meta message (only possible in files, not live MIDI). - MIDI output of SysEx messages works again (broken somewhere between revision 123 and 128). - Quietened open hihats a little. - Fixed rare bug during startup where main window would become invisible or appear as a tiny glitched area of 4 corners, which happened if Bawami lost focus between appearing and rounding its window corners. - "SSubTmr6.dll", which has been included with Bawami for a long time, is now copied to a system folder and has its info added to the registry if not already done. I thought this wasn't necessary, but it fixed an "ActiveX component can't create object" error that someone suddenly started receiving. - Fixed bug where, if portamento was only turned on after a note had already started to play, the next note would slide up/down from the wrong frequency (not the previous note's). - Can now generate (copy to the clipboard) command line parameters for all manually overridden controls (right-click in empty space -> All overrides -> Copy parameters to clipboard). There's also a menu option to do the opposite (load parameters from the clipboard). - Added the ability to enable/disable all possible overrides from the main right-click menu. - Attempting to skip past a CC #119 (global loop end) message no longer causes Bawami to freeze (it didn't in the past - I'm not sure when this broke). However, it will skip to a location within the loop that's hard to predict (related to the number of messages after the end of the loop to which the skip was requested, and the number of messages inside the loop). - Variation instrument names in menus no longer have "- " displayed where the line should break mid-word on the main window. - Instrument names are redrawn when clicking "Reload instruments" in case a language's "instname" file has been modified (as is done when changing language). Previously, instrument-related language files were being reloaded, but the interface wasn't automatically redrawn. - Rewrote the code that chooses the sound channel to play a note on. Now, when the sustain pedal is on, a sustained note being retriggered will cause the old sound channel to start releasing and assign a new channel to the new note, avoiding click artifacts caused by immediately re-using the old channel. - Added a few missing translations and deleted unused files for Japanese language. - When auto-unmuting MIDI channels on loading a new MIDI file, without automatically starting playback, blue vertical bars are correctly redrawn. - When a MIDI channel is muted, the red cross is now drawn across the channel's entire vertical area, and you can click the entire area to re-enable it. - Fixed another incantation of the bug where Bawami would crash when re-initialising the sound system (when clicking "Apply" on the "Sound system" tab). - While using MIDI input, "MIDI IN" text doesn't disappear when "Rewind" is clicked or when playback reaches the end. - Fixed bug where text and position of sliders on "Override other controls" could become out-of-sync with each other (e.g. by LMB press, then RMB press+release, then LMB release). - Micro-optimisations throughout the code (also reduced EXE file size by 16 KB). - On "MIDI Messages" view, information about note-offs that were aborted because the sound channel is now used for a different MIDI note now mentions the correct MIDI channel (number shown was 1 too low before). - On "MIDI Messages" view, messages that are supported but ignored (e.g. due to being disabled in the config) are shown in the usual "supported" colour (e.g. bright turquoise instead of dark blue), and a more-concise "ignored" explanation is appended to the text. - No longer wastes time updating modulation cycle for a MIDI channel if CC #1 (Modulation) is 0 and instrument should not be using auto modulation (according to instrument and auto mod depth). - No longer crashes when no MIDI is loaded and the following CC messages are received on live MIDI input: 111 / 118 (GLOBAL LOOP START POINT), 116 (SECTION LOOP START POINT). - The "Attempt to stabilise" option (when drawing a waveform for each MIDI channel) works a bit better. - Slightly more efficient updating of sound channel's pitch (one less multiplication per millisecond per sound channel if using modulation/vibrato). - To avoid stuck notes (otherwise possible if an instrument uses "multi-osc"), playing notes are now released when instrument files are reloaded and when a MIDI channel changes from tone to percussion mode. - Instruments modified only in other ways: - Reduced resonance of Funk Pop Guitar (028_008_001). - Increased volume of Bright Acoustic (001) and made it slightly velocity-sensitive. - Updated the following instruments to take advantage of the new "multi-osc" feature: - Honkey Tonk (003) - Dulcimer (015) - Drawbar Organ (016) - Percussive Organ (017) - Rock Organ (018) - Church Organ (019) - Timpani (047) - String Ensembles (048, 049) - Choir Aahs (052) - Fifths Lead (086) - Polysynth (090) - Goblins Effect (101) - [GS] Rock Rhythm Guitar (030_024_002) - [GS] Mg Octave Basses (039_005_003, 039_006_003) - [GS] Stack Strings (050_002_003) - [GS] JUNO Rave (087_003_003) - Added the following instruments (* = uses the new "multi-osc" feature): - [GS] Detuned Electric Piano 2 (005_008_001)* - [GS] Coupled Harpsichords (006_008_001)* - [GS] Church Organ 2 (019_008_003)* - [GS] 12-string Guitar (025_008_001)* - [GS] Power Guitar (030_016_002)* - [GS] Power Guitar 2 (030_017_002)* - [GS] Rock Rhythm Guitar 2 (030_025_002) - [GS] Power Stack (090_008_003)* - Added "multi-osc" feature to instrument files which allows one MIDI note to trigger up to 3 sound channels (all playing different pitches) instead of just 1. Using "Multiple volume bars", each red bar now means 1 sound channel rather than 1 note. "MIDI messages" view only shows info about the main sound channel, not extra ones. Can be disabled on the "Sound system" tab to save CPU time. Doesn't affect PC speaker. - Restructured a lot of the code related to sound channels. This reduced the EXE file size by 20 KB and will make adding new instrument features easier for me in the future. - Removed Ctrl-Alt-F11 shortcut (for typing stats) because it apparently broke a long time ago, often just causing Bawami to crash when triggered. - Calculation of the "channels in use" horizontal bar at top of main window, drawing of MIDI channel waveforms and drawing of the main interface overall are all slightly more efficient. Revision 131 (1092 KB): - Fixed tabbing order of controls on "Mod shape" tab of the config window. - Writing OGG files works again - I accidentally removed a file needed by the OGG encoder in revision 130. Users who extracted revision 130's folder over revision 129's would not have experienced the problem. - Stopped warning about buggy controls from being displayed on the "MIDI params" tab of the config window, since it's no longer true. Revision 130 (1092 KB): - "First run.bat" now waits for a key to be pressed before exiting if an error occurs, so that the error message can be read... - Clarified text displayed if a missing font failed to be installed at startup. - Moved FontReg.exe (used to install any missing fonts) to "tools" folder to reduce clutter. - Removed unused language file "chkSwapChorus" which I accidentally included in revision 122 after working on the new chorus effect. - Changed text "Mix sound in 8-bit" to "Mix sound to 8-bit", since FMOD always mixes in 32-bit float internally; it's just converted to 8-bit samples and passed to the sound driver in that state if the option is enabled. - Ammended some info text shown on config window (for "Use PC Speaker", "Buffer length", "Display refresh rate"). - Percussive toms (notes 041, 043, 045, 047, 048, 050) are now slightly velocity-sensitive (affects their starting pitch), and are a little louder. - When using /translator, pressing ctrl+(key) to edit the associated text file works again (broken in revision 128). - MIDI messages are re-processed to prevent previously-held notes going missing until they're played again when re-initialising sound system during playback (by clicking "Apply" on the config window). - "Update playback" button (on "MIDI Params" tab of config window): - No longer loses the correct playback position a bit. - Actually makes numeric options take effect. - Doesn't cause some parameters (e.g. banks, portamento settings) to be forgotten with some MIDI files. - Fixed too-long instrument text drawing over other channels' instrument name areas (broken in revision 103). - Fixed text of unnamed instruments (e.g. "(038_100_098)") not breaking onto 3 lines on the main window (broken in revision 123). - Fixed bug where, if portamento (CC #65) was disabled, and then "portamento for next note" (CC #84) was received, and then portamento (CC #65) got turned on, portamento (CC #65) would erroneously get turned off after the next note played. - Instruments: - Made Fat Sync Lead (084_017_003) velocity-sensitive. - Added [GS] Phono Noise (124_011_003) - Added Hardstyle Bass 1 (038_100_098) (non-standard, following the same numbering convention as when I added exclusive instruments last time (LSB=098)) - More micro-optimisations (especially regarding floating-point maths done for every playing note). - WAV files can now be created in paths containing non-ASCII characters (like OGG files can), because Bawami now handles the writing of WAV files natively instead of relying on FMOD to write them. - Notes that are supposed to decay to silence while being held are now treated as fully-released when decayed, freeing up the associated sound channel and stopping the oscillator, instead of wasting CPU time. This will cause more "ABORT: No longer in use" messages to appear on note-offs for 0-sustain-level instruments, but this isn't a bad thing; it's just showing how the note-off was correctly handled. - Related to previous fix: Fixed bugs when dealing with note-offs on percussion channels that the "percmap" folder defines to play as a tone note (code was confusing original and remapped note numbers, potentially stopping the wrong note, or never stopping a note). - Fixed a bug where multiple note-ons (without note-offs, which is bad) on one MIDI channel could re-use a sound channel which is now being used to play a completely unrelated note (on a different MIDI channel), causing that unrelated note to be cut. This happened easily with notes that decay to silence (e.g. percussion) while continuing to be held on. Now, a new sound channel is chosen. - Corrected MIDI channel number in message displayed on "MIDI Messages" view when a note-off was attempted after that note's sound channel had already been re-used to play a different note (the number displayed was one too low). Revision 129 (1092 KB): - Now recognises when a filename is passed on the command line without speech marks (and without any command line parameters). This fixes the problem of Bawami not opening a path+file containing no spaces if such a file was dragged onto its icon (or if Bawami is associated with .MID files), because Windows does not automatically surround such a path+file with speech marks when passing it to the program. - When using /console: - When using "/infolevel 2", log file text is now sent to StdOut instead of (accidentally) to StdErr. - "Finished." is now (always) displayed when shutting down. - Key prompts for answers to questions are now sent to StdErr instead of StdOut (as was already being done for the question's title and message), so that they're visible on the console even if you're redirecting Bawami's StdOut to a file. - No longer crashes if you're redirecting Bawami's output to a file or other program. - Fixed bug where button to browse for a new MIDI file remained disabled after opening a MIDI by dropping it onto the main window. - Corrected Z-order of several controls on the config window so that the dotted border that indicates a control that has focus isn't having one of its horizontal edges cut off unnecessarily. - Corrected a reference to how green "settings" button appears in info.txt. - Green "settings" button's tooltip is now loaded in the chosen language (instead of having no tooltip) (broken in revision 128). - Logging (also affects text shown when using /console /infolevel >=1): - No longer shows "Closing MIDI input port" when shutting down, if MIDI-in wasn't in use. - No longer shows "Decoding absolute timings" a few lines after the last track has finished being decoded. Revision 128 (1092 KB): - 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). - Made splash cymbals (percussive note 055) a little more audible. - Messages displayed if an OGG file can't be written now say "OGG" instead of "WAV". - Fixed possible memory corruption when sysex messages with less than 5 data bytes were processed. - 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. - OK/Cancel buttons of OGG quality selection dialogue are now language-specific. - 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. - 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. - Not possible to crash Bawami by using keyboard shortcuts to control playback while a MIDI file is in the process of being loaded. - 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. - 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). - 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). - Very small speed improvements to startup, drawing waveforms of MIDI channels, initialising sound system (when clicking "Apply" on "Sound system" tab), and possibly overall. - 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. - 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). - 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. - 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. - 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. - "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. - 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. - 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. - Toggling volume override using a right-click menu works again (broken in revision 118, and I only just noticed). - 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). - Command line options (see "COMMAND LINE PARAMETERS" in info.txt for details): - 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). - 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! - 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. - 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. - "/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). - 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. - 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. - No longer wastes time loading some language files if started with /invisible (or /console) 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. - Very small speed improvement when loading a MIDI file (I still need to completely rewrite the MIDI-loading code). Revision 127 (1076 KB): - Fixed bug on "Mod shape" tab of config window where the shape was not updated immediately when a new shape in the "Mix with shape #2" area was selected (it was ignored until some other control was also adjusted). - When writing WAV/OGG files: - OGG quality dialogue can now be cancelled by pressing Escape. - OGG quality dialogue's "OK" button now always has focus by default, so that pressing Enter will start writing the file (instead of "Cancel" still having focus if it had been clicked previously). - Last-used OGG quality is now remembered, both between exports and between runs (saved in startup.cfg). - Slightly increased speed of writing OGG files. - OGG files never cut off at the end anymore. To ensure that oggenc.exe writes all data, a small period of silence followed by noise is sent to it, and the resulting OGG file is split at the beginning of the silence (the part containing noise is deleted). "vcut.exe" (official Vorbis splitter) is now included in the "tools" folder for this purpose. - No longer freezes waiting for silence at the end. This happened if "Use effects" was ticked and master volume was >=90%, and was caused by a DC offset output by the new (revision 124) chorus processor that was above Bawami's threshold for silence. Silence is now calculated based on difference between min and max points in the wave instead of an absolute value. - An existing OGG file will only be erased once the OGG quality has been chosen, instead of immediately after choosing a filename (i.e. the original file won't be lost if the quality selection dialogue is cancelled). - A zero-byte file is not left behind after choosing a new OGG filename but cancelling on the OGG quality selection dialogue. - Fine-tuned strength of attack/release overrides for XG MIDIs a little. - Corrected formula shown in information text when moving mouse over bottom text box in the "arpeggio" section of PC Speaker tab on the config window. - Should have eliminated click artifacts on note-offs when the channel's release time has been lowered so far as to mean "instant" on an instrument which didn't originally have an instant release. - Slightly reduced the (unintentional) effect where a high chorus level caused the volume to also increase. - Splash cymbal (percussive note 055) no longer shows up as "Unsupported perc" on the MIDI Messages view (despite playing correctly). - Changed decay and release of Woodblock (115) to avoid click artifacts. Revision 126 (1072 KB): - Fixed bug where, if pan changed on a MIDI channel playing more than one note, only the panning of one note would change (bug added in revision 122). I only just noticed this, and it annoyed me a lot, so I'm releasing this version with only this change. Revision 125 (1072 KB): - Instrument menu appears correctly again (with a circled tick to indicate category of the chosen instrument). Once again, I left this disabled while testing and forgot to re-enable it... Revision 124 (1072 KB): - Fixed crash on playback on computer with very long uptime (e.g. 70 days) (bug introduced in revision 121). - Fixed crash when setting channel aftertouch (bug introduced in revision 122). - "Override Other Controls" window now wastes a little less space. - Chorus processor has been replaced again and now works on Windows XP (without errors). Instead of "achorus.dll" (added in revision 122), "TALChorusLX.dll" (by TAL - Patrick Kunz) is now used. Many thanks for their permission to use this, which I believe sounds even better than the previous one. - Reverted to previous FMOD version (4.6.21) because version 4.8.2 (switched to in revision 122) causes errors during startup (specifically, checking ASIO support) on Windows XP. This might be slightly slower, but is still faster than revision 121. - "jsmalle.fon" font ("Small Fonts") is no longer included or checked at startup. The check was failing on Windows XP for some reason and preventing Bawami from starting. It's included with Windows anyway. - Added command line parameters -ocr and -occ to override a MIDI channel's reverb mix and chorus mix, respectively. They work in the same way as -ocv and -oce (e.g. "-ocr 2 127" sets MIDI channel 2's reverb mix to 127 (maximum) and locks it so that the MIDI file can't change it). - When using -invisible command line parameter, fractionally faster program loading and slightly lower CPU usage. - If MIDI file duration is less than 1 millisecond (e.g. only contains setup messages), playback no longer loops (caused program to stop responding). - When overriding release time to reduce it to "instant", and it wasn't originally truly instant (linear, speed 1), it is now set to "unnoticably fast" (non-linear, multiplier 0.5) instead of "truly instant" to avoid clicking artifacts on note-offs. - Fixed "being loading" typo on "Interface" tab of config window. - Reduced ModAutoDelay in default instrument file from 0.35 to 0.31 seconds. This results in VIBRATO DELAY messages setting the delay much closer to how the SC-88Pro does. Revision 123 (1076 KB): - Optimised string-handling (only slightly affects loading config, language, instruments and percussion mapping), which also reduced the file size by 12KB. - Fixed the first 100 event indeces being displayed as 00-990 instead of 0-99 on MIDI Messages view. - Playback can no longer wrongly be skipped with Ctrl+Left/Right arrow keys while rendering a WAV or OGG file. - Reduced memory usage of MIDI Messages view slightly. - Fixed bug where volume/expression/aftertouch/pan bars would not be redrawn after choosing a new language during playback (bug introduced in revision 122). Revision 122 (1088 KB): - 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. - Added missing keyboard shortcuts on "GUI" tab of the config window. - Fixed bug where chorus and reverb processors remained running in the background after a WAV or OGG file had finished being written. - 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. - Improvement to speed of drawing the main interface. - 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. - 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. - Sound Canvas LCD emulation is not displayed while skipping to a new playback position, for speed. - Added support for Splash Cymbal (percussive note 055). It doesn't really sound right, as usual with cymbals sounds... - 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). - In translator mode, it's now possible to edit the tooltips (info-rectangle text) of labels (if they have tooltips) by pressing Ctrl+B. - 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. - While setting up system files on first run, text now becomes red if there's an error, instead of only the wording changing. - 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. - 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. - 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. - 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). - 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. - 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). - 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. - 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. - 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. - 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). - 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. - 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. - Fixed some typos in explanations in "default.txt" instrument file. - Made Sound Canvas graphic LCD emulation easier to see by increasing contrast between "off" (blue) and "on" (black) colours. - "Sound + MIDI Channels" view: - 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. - 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. - 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. - Instruments: - 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. - Increased volume of Voice Oohs (053) slightly. - 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) - Made Electric Grand (002)'s filter a little less velocity-sensitive. - Corrected filename of House Bass (039_022_002) to 039_022_003. - Slowed decay and decreased distortion of Acid Bass (038_008_002). - Increased decay/release speed of Tambourine (113_016_003). - Increased attack/decay speed, decreased sustain level, and increased volume of French Horn (060). - Made release of OB2 Saw (081_001_001) unnoticably fast, instead of truly instant, to avoid pops when notes stop. - Increased decay time of Clavichord (007). - 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. - Updated the download URL, which is copied to the clipboard if the pre-loader cannot find required files, from "robbi-985.homeip.net" to "somethingunreal.homeip.net". - Version number increased to 0.6! Revision 121 (1052 KB): - As usual, hopefully less likely to crash when exiting... - Fixed bug where, if the language was changed with "-guilang" on the command line, the chosen language wasn't selected on the "Interface" tab of the config window. - For command line options requiring a parameter in , you can now use [square brackets] instead (doesn't cause problems with the Windows command prompt). - Corrected slight vertical alignment problem of text in instrument category menu. - "(No sound output)" text in the "driver + device" drop-down menu is now language-specific. - Finished (badly) translating all message boxes' text to Japanese. - PC speaker: - PC speaker "Arpeggio" controls on the config window are now available to use! These settings are saved between runs. - Added checkboxes to allow PC speaker cutoff volume to take MIDI channel expression and volume into account, allowing e.g. gating effects via expression changes. These settings are saved between runs. - By request, I added an advanced command line option "-pitdump" for programmers of oldschool demos who want to capture the commands that Bawami sends to the programmable interrupt timer, which is responsible for generating tones on the PC speaker. See "COMMAND LINE PARAMETERS" in info.txt for details. - A long note that was already playing before noise-based percussion started playing now resumes playing after the percussive note finishes playing. - Now updates its frequency smoothly! Vibrato and pitch-bends are no longer painful to listen to, so I've increased the modulation/pitch-bend update speed from every 14ms to 1ms. Many thanks to Andrew Jenner for pointing out the easy way to fix it. - If invalid line is seen when loading an instrument file, "default.txt" is now used for that instrument, instead of the bad instrument file; "Default (BAD FILE)" is then shown on the instrument-overriding menu for that instrument. - GUI stops being blank and returns to normal when sound system successfully initialises after the GUI has previously become blank due to the sound system failing to initialise. - GUI shows the reset MIDI parameters when "Reset MIDI system" is clicked even if no MIDI file is playing and live MIDI input is not in use. - No longer possible to crash Bawami by clicking "Reset MIDI system" if sound system has failed to initialise. - Notes being sent on MIDI-out are now released instead of staying stuck on if sound system fails to initialise when clicking "Apply" to restart it. - Added support for GS SysEx messages to control how much modulation affects frequency or volume by (like ModToFreq and ModToVol in instrument files). Roland calls these parameters "MOD LFO1 Pitch" and "MOD LFO1 TVA Depth". See "SUPPORTED SYSTEM-EXCLUSIVE MESSAGES" section in info.txt for details. - Fixed stupid bug where expression on all MIDI channels is "forgotten" when sound system is restarted. This bug has been present for a shamefully long time (since revision 98), but I only just noticed it... - Added Alt-key shortcuts for various controls on the config window, and resolved some conflicting ones. - Changed strength of exponential curve of cutoff frequency (affects CC #74 and NRPN H001.L032) so that lower frequencies are more likely to be used. - Instruments: - Increased volume of French Horn (060). - Quietened Rock Organ (018). - Redesigned Sitar (104) so that it swells, although it's most noticable only with lower notes. It's also (slightly) velocity-sensitive. Very low-pitched notes (out of a real sitar's range) may sound delayed now. Please swap the new file for the included old file if this is a problem. - Added Muted Trumpet (059) and Shakuhachi (077). - Corrected the spelling of "Shakuhachi". - Attempted to improve Clarinet (071), but it still doesn't sound very realistic. - Edited [GS] 2600 Sine (080_008_001) to have no attack time. - Added [GS] Hollow Mini (080_002_002), and a shortcut for the XG equivalent: [XG] Hollow (080_000_018). - Added shortcut file [XG] Solo Sine (080_000_065) (shortcut to [GS] 2600 Sine (080_008_001)). - Percussion mapping: - Remapped to Kick 1 (note 035): Square Click (note 032). Revision 120 (1036 KB): - No longer acts as if "Use filters" is ticked when it's not, after the sound system is restarted. This fun bug meant that filters were always enabled when Bawami started even if checkbox was unticked, because the sound system is initialised after settings are loaded. - Fixed bug where no "action" text would be displayed on the MIDI Messages view for CC #74 (cutoff frequency) messages if "Use filters" was unticked. Descriptive text would also be missing for NRPN H001.L032 (cutoff frequency) data entry messages. - No longer possible to crash Bawami by holding Ctrl+Left to skip backwards when playback is already at the beginning of some MIDIs. - Added instrument file for Sci-fi Effect (103). - Section loops that should only loop a certain number of times should now work correctly (not be infinite). - Fixed bug where Bawami could freeze in a loop at the end of playback or a custom loop end point, if a MIDI file set a custom loop start point to be the same as the end point. In this case, the custom points will be ignored, and playback will loop to 0 seconds at the end of the file. I had tried to make Bawami detect this situation before, but I discovered just now that it didn't work. - Added "buffer length" slider on "Sound system" tab of config window. This only affects the DSound and WinMM drivers. When using ASIO, your soundcard's ASIO driver controls the buffer size. Lower values let you reduce the delay at the cost of potentially-stuttering sound on slow computers or inefficient drivers. Default is 93 (x 44 = 4092 samples) (~93 milliseconds). This setting is saved between runs. - Text that prompts to click "Apply" on the sound system tab of the configuration is bold again (it unintentionally stopped being bold some time when I worked on the language system). - Made all the window icons look nice even when they're small (16x16 or 32x32). This also fixes the silly-looking icon in the Windows Volume Mixer. This actually reduced the EXE file size by 28KB! Revision 119 (1060 KB): - A random character is no longer sometimes displayed at the end of text when emulating the Sound Canvas LCD (bug introduced in revision 108 when adding code to strip extra F0 bytes from the beginning of SysEx messages). - SysEx to display no graphic page on a Sound Canvas LCD is no longer shown on the MIDI Messages view as if it's not recognised. - Fixed embarrassing mistake: The error shown when failing to initialise the sound device, and the error shown when failing to write to a WAV file, are no longer swapped. This had probably been wrong ever since writing of WAVs was first introduced in revision 106. - New command line option "-scanwinmm 0" to disable scanning for WinMM-compatible sound devices at startup, which causes Bawami (FMOD) to freeze with some bad USB3 drivers when a device is connected via USB3. This setting will be remembered in startup.cfg! To re-enable using devices with the WinMM driver, use "-scanwinmm 1". You can also change "ScanWinMM" to 0 or 1 in startup.cfg. - Removed more pointless (duplicate) language files and stopped them from being created. - Languages: - Worked on the Japanese translation a little more. It's still very incomplete and bad-sounding. - In translator mode, it is now possible to press Ctrl+A to edit the caption of the following controls on the config window when the mouse pointer is above them: "Send "Reset" at start of playback" checkbox; all frames (e.g. the text "Graphical user interface" on the "Interface" tab). - When toggling "Show filenames" in translator mode by using the button in the bottom-left of the config window, tone and percussive instrument names are no longer reloaded, to make reloading the language faster. Instrument names will still be loaded when (re-)selecting the language on the "Interface" tab. Revision 118 (1056 KB): - Changed scale of NRPN H001.L010 (Vibrato delay) when value is above 64 so that 0 to 2.5 seconds are added, instead of 0 to 3 seconds. Also affects CC #78. - When using the configuration window to load a language not made for the current version of Bawami (according to langinfo.txt), a warning message is shown. This was always meant to happen, but it broke at some point. The warning is not shown if the language is loaded at startup, to avoid annoyance. - New command line option "-translator". This causes most controls to display their language TXT filenames instead of the text stored in those files. Translators can easily see which TXT file is used where. While pointing at a control on the configuration window, you can use keyboard shortcuts to edit the TXT files (see info at bottom of window). This mode doesn't affect instrument names, menus or dialogues. - Stopped some pointless language files (e.g. ones whose text is simply "<") from being created. Also, deleted such language files. - New tab on config window to modify the modulation wave shape, affecting how vibrato's pitch rises and falls. You can choose from basic shapes such as sine and sawtooth, or mix two together to make a complicated shape. - Fixed bug where percussion playing on one MIDI channel could silence a percussive note of the same kind (e.g. a hihat) on a different MIDI channel. It's correct to silence an old percussive note of the same kind, but only if it's playing on the same MIDI channel. In other words, 2 percussive MIDI channels can't interfere with each other anymore. - Fixed visual glitch on MIDI Messages view where text would sometimes appear in yellow instead of red when a note-off was aborted because the sound channel has been re-used for a different note (possibly on a different MIDI channel). - Holding the Shift key while overriding any control (volume, expression, instrument, chorus, reverb) now affects all channels, just like how it's possible to mute all channels by shift-clicking the note volume bars. - Added ability to override MIDI channel's reverb and chorus levels. These are on a new window called "Override Other Controls". Many more controls will be overridable in the future. Right-click in empty space, or a MIDI channel's note volume bars area, to reveal the menu option. - Added ability to render the MIDI directly to an OGG file. You can do this in the same way that you create a WAV file - simply right-click in an empty space on the main window and choose "Convert this MIDI file to OGG...". There is also a new -writeoggonly command line option that works in the same way as -writewavonly. - When Bawami is waiting for the reverb to fade away at the end of writing a WAV file, it is no longer possible to click Play and cause playback to restart, messing up the WAV file. - WAVs created while "Mix sound in 8-bit" is ticked are now rendered correctly, in 16-bit. Previously, FMOD wrote signed 8-bit samples, which is impossible in a WAV file, resulting in highly distorted sound (although software such as Audacity could open the file as raw signed 8-bit data). Unfortunately, FMOD cannot write unsigned 8-bit samples, so 16-bit WAVs must be written. - Pan is now displayed differently on the "Sound + MIDI Channels" internal view due to different panning internally. The percentage moves towards 0 instead of towards 50 as it reaches the centre. - Panning is now handled differently internally. It should be slightly faster. Positions near centre may be slightly louder than before. This is "constant power" panning (a sweeping pan from side-to-side should not appear to change volume anymore). - In the log file, when skipping to a different position in a MIDI file, the position is now written correctly (the number was 1000 times too large). - Made the green "Reload instruments" and "Reset MIDI system" buttons taller so that 2 lines of text can fit, in preparation for a German language translation. The space was unused and the buttons were unsymmetrically aligned before, anyway. - Instruments: - Increased distortion of Rock Rhythm Guitar (030_024_002). - Slowed the decay/release of Taiko Drum (116) a little. - Edited Guitar Feedback 1 (031_008_001) so that it fades in gradually like the SC-88Pro's does. - Added Bright Trumpet (056_024_002). - Corrected name of 080_008_001 from "Sine Wave" to "2600 Sine" (the sound has not changed). - Increased the attack start volume of Echoes Effect (102) so that it can be heard without having to fade in first. - No longer shows misleading error meassage and crashes if attempting to create WAV file with a path or filename that includes Unicode or double-byte characters, which FMOD does not support. Now, an appropriate message is shown and then the program is usable again. - Optimised the length of FMOD's sound buffers. This slightly reduces CPU usage and increases the speed of creating a WAV file. Now, audio is generated in bigger chunks (as close to 1 millisecond as possible while remaining below 1 millisecond, Bawami's timing resolution). (Previously: 32 samples (~0.726 ms) x 128 buffers = 4096 samples; Now: 44 samples (~0.998 ms) x 93 buffers = 4092 samples) - XG SysEx messages will now be processed if they begin with 43h 1?h ??h, instead of the more-restrictive 43h 10h ??h. Revision 117 (916 KB): - Fixed bug where it was impossible to choose the filename for creating a WAV file for the second or later time. Bawami would overwrite the last WAV file without asking for a new filename (bug that appeared in revision 113). - Added instruments Guitar Feedback (031_008_001) and Guitar Feedback 2 (031_009_002). Revision 116 (916 KB): - Tooltips on the MIDI Messages view now work again (broken in revision 111, when language system was first introduced). - SysEx messages with less than 3 bytes of data no longer cause Bawami to freeze (SysEx messages should be at least 4 bytes long anyway, not including start/end bytes), and are logged correctly on the MIDI Messages view. - Quietened all percussion slightly further. - No longer crashes on MIDIs with invalid "sequence number" (meta) messages while showing MIDI Messages view. - "Sequence number" meta message text (on the MIDI Messages view) changed to "Seq.Number" so that it is now neatly aligned with the text of other types of meta message. - Instruments: - Improved sound of Footsteps (126_005_001). - Quietened Electric Grand (002) and Castanets (115_008_001) (also affects percussive note 085). - Increased volume of Bagpipe (109) (also affects Shanai (111)). Revision 115 (916 KB): - No longer crashes when exiting. This is an important fix that is long-overdue, so I am releasing this version with only this change. The bug of crashing when exiting made it dangerous to use the "-invisible" command line parameter often, as many Windows crash-reporting processes could quickly build up in the background. However, it's now safe to use. Revision 114 (916 KB): - Menus for changing instruments are back to how they used to be again (with the "circled tick" icon to quickly find the selected instrument). I accidentally left this disabled when releasing revision 113. Revision 113 (916 KB): - "Reset All Controllers" (CC #121) now only resets one MIDI channel instead of all MIDI channels. That incorrect implementation had been present ever since I added it (1.5 years ago), but I only just noticed. - Fractional numbers in config files are now always saved with "." as the decimal symbol, to avoid crashing or incorrectly loading config files made on a computer whose regional/language options are set to a country that uses "," as the decimal symbol. - Added support for CCs #126 and #127 (mono or poly MIDI channel modes). The CC values are ignored. In monophonic mode, a MIDI channel is limited to playing only one note at once. CC #127 puts the channel back into polyphonic mode (the default). The various "Reset" SysEx messages also reset a MIDI channel to poly mode. CC #121 ("Reset All Controllers") does not affect the channel mode.. - Fixed potential bug where, when a huge number of notes are playing (many sound channels are being re-used), a note-off on one MIDI channel (whose sound channel had been re-used) would release the same note on a different MIDI channel. - You may need to run this new version of Bawami "as administrator" (only for the first time); Bawami now correctly sets up "MSCOMCTL.OCX" and "MSCOMM32.OCX" when starting. Previously, on clean installations of Windows, Bawami would be unable to start running for a second (or later) time after moving its program folder to a different location. - Added a 7th tip to the "instructions.txt" file for making new languages, regarding the use of the "&" symbol in control captions. - Now accepts 25 command line options. The format is: BaWaMI.exe [options] ["MIDIFile.mid"]. If a MIDI file is given, and Bawami is already running, the already-running Bawami will be re-used and open it. To force a new instance to run while giving a MIDI file, include the option '-new' before the filename. See "COMMAND LINE PARAMETERS" in info.txt for full details. - Bawami can now open MIDI files associated with its EXE, dropped onto the EXE, or passed on the command line between speech marks. If a Bawami is already running, the already-running Bawami will open the file instead, to avoid many instances of Bawami running at once. - Percussive notes: - Added Side Stick (note 037) (plays as a low-pitched castanet). - Instruments: - Added Round Glock (098_003_003). - Increased resonance of Castanets (115_008_001). - Increased volume of White Noise (122_017_003). - Returned pitch of Agogo (113) to normal, as the +1 octave in the previous revision didn't help the issue and made some things sound worse. Revision 112 (884 KB): - Updated "First Run.bat" to be self-contained (not rely on a separate "regfull.bat") and bug-fixed, thanks to help from DJ3520. - Fixed visual glitch in the playback position (time) text when using live MIDI input on a computer whose clock is set to 12-hour format instead of 24-hour. This glitch had been present ever since revision 96, when the computer's time (clock) started to be displayed when using live MIDI input. - MIDI file playback either broke entirely (with some CPUs) or had inaccurate timing (played fractionally too slowly or quickly) in revision 111 due to a micro-optimisation I attempted to make (the multiplication instead of division). This change has been undone now, so file playback should work again for the affected computers. - Added support for percussive notes: - Claves (075) (plays as an extra-high-pitched woodblock). - By remapping to already-existing percussive instruments: - Remapped to Kick 1 (note 035): Room Kick 1 (note 008). - Remapped to Kick 2 (note 036): Room Kick 2 (note 009). - Remapped to Tambourine (054): Jingle Bell (note 083). - Instruments: - Added [GS] Sine Lead (080_009_003) (shortcut to [GS] Sine Wave (080_008_001)). Revision 111 (884 KB): - Fixed huge resource leak whenever loading a skin for the second (or later) time since the program started running. - Slightly changed normal/overridden instrument text colours to try to make the overridden text easier to read against the background without making it hard to tell normal and overridden apart. - Fixed visual glitch where lines remained drawn on the "custom MIDI channel map" box on the "MIDI in" tab even if the mouse was not positioned over a MIDI channel. - Fixed memory (resource) leak when changing the "custom note velocity curve" on the "MIDI in" tab of the config window. - "First run.bat" didn't work on some computers, but it does now (on some computers, the default working directory for batch files is the folder of cmd.exe instead of the batch file, but the batch file now forces to switch to its own folder). Massive thanks to Charles M for helping debug this. - If main program window is minimized, GUI is no longer drawn at all, to reduce CPU usage. - Added support for the following percussive notes: - Completely new instruments: - MC-500 Beep 1 (note 022) - MC-500 Beep 2 (note 023) - Tambourine (note 054) - Castanets (note 085) - Instruments that used to exist only as tone instruments: - Woodblock High (note 076) - Woodblock Low (note 077) - By remapping to already-existing percussive instruments: - Remapped to Kick 1 (note 035): Electric Kick 2 (note 012), Kick Drum 1 (note 004), Standard 2 Kick 1 (note 002), Standard 1 Kick 1 (note 000). - Remapped to Kick 2 (note 036): Electric Kick 1 (note 013), Kick Drum 2 (note 005), Standard 2 Kick 2 (note 003), Standard 1 Kick 2 (note 001). - Remapped to Snare 1 (note 038): Standard 1 Snare 1 (note 097), Standard 2 Snare 1 (note 098), Electric Snare 1 (note 116), Electric Snare 2 (note 115), Slap (note 028). - Remapped to Snare 2 (note 040): Standard 1 Snare 2 (note 099), Standard 2 Snare 2 (note 100), Electric Snare 3 (note 117), Gated Snare (note 111). - Added percussion mapping system (the "percmap" folder). This lets you either simply "remap" from an unsupported percussive note to a supported one, or specify that an unsupported percussive note should play as a certain tone note on a certain tone instrument. See "percmap info.txt" in "percmap" folder for detailed information. - A few more subtle CPU usage reductions (using multiplications instead of divisions). - If pitch-bend sensitivity is changed on a channel currently playing notes while pitch-bend is not centred, the pitch of the playing notes will now be changed, taking the new sensitivity into account (bug present since revision 90). - PC speaker: - "Lowest note allowed" now defaults to C3 if this is the first time Bawami is being run (no startup.cfg exists). - Added experimental support for percussion. It takes priority over non-percussive notes. Please mute percussive channels if it sounds bad. Uses lots of CPU time when making noise (as opposed to tone) and will sound very bad if there is not enough available CPU time. In this case, try turning FPS (on "Interface" tab) down to minimum and setting sound device to "No sound output". - Fixed potential bug where the tone would very occasionally not change or not stop when it was supposed to (I never witnessed the bug, but it looked possible in the code). - Attempted to fix visual glitch where a few pixels of the previous instrument's name would be left behind on the main window when the instrument name changed. This had happened ever since the slight speed improvements made to drawing the main interface in revision 99. - MIDI Messages view and in debuglog.txt (when logging MIDI messages): - Corrected horizontal alignment (padding) of digits in "Set bank" text. - Instrument names no longer appear with "- " halfway through the name. - Fixed bug where text for CCs #76, #77 and #78 (VIBRATO RATE/DEPTH/DELAY) would contain information about a previously-received message in addition to this new message (text from old messages would build up). - No longer possible to cause crash by changing instrument by clicking instrument name on the main window before sound system has fully finished being initialised. - Due to the huge changes needed for the language and bank systems, and the new possibilities they enable, version number has become 0.5! - Fixed visual glitch where, if a MIDI file couldn't be loaded, the duration of the previously-loaded file remained displayed next to the playback position bar even though it couldn't be played. - Name of loaded MIDI file, or "[No file]", is now shown in taskbar button and when selecting Bawami by Alt-Tab. - Changed text of "Browse..." button (to load new MIDI file) to the more-intuitive "Open...", and standard Ctrl+O keyboard shortcut now triggers it. - No longer possible to cause a crash by quickly loading the configuration window and changing something before program has finished starting to run (scanning for sound devices). - New "bank" system! "Variation" instrument files with names in the form of "PPP_HHH_LLL.txt" can now be loaded, where PPP = Program Change number, HHH = high bank (MSB), LLL = low bank (LSB). To select this instrument, first send Bank Select control changes, then send Program Change. If requested variation file doesn't exist, an alternative will automatically be used. See "BANK SELECTS" section of info.txt for details. - Changed default master volume (when run for the first time) to 88% instead of 100% to reduce likelihood of clipping. - Fixed memory leak when right-clicking instrument name to override it. After changing the instrument many dozens of times, or after moving the mouse for a long time over the instrument categories on the menu that appears, the menu would turn black in places and some programs (including Bawami) would fail to start until Windows was rebooted. - Instruments: - Slowed the attack and release of Warm Pad (089). - Agogo (113) now plays one octave higher, since low notes were extremely hard to hear. - Quietened Polysynth Pad (090), Ocarina (079) and Alto Saxophone (065). - Decreased the effect of modulation on frequency on Panflute (075). - Added Shanai (109) (shortcut to Bagpipe (111)). - Increased volume and decreased resonance and velocity sensitivity of Synth Bass 1 (038). - Increased volume and "bassiness" of Synth Bass 2 (039) by decreasing sustain cutoff frequency slightly. - Modified Electric Basses (033, 034) and Fretless Bass (035) to have noticably different envelopes and to subtly change muffledness based on playing note, and increased their volumes. - Quietened all percussion a little (long-overdue). - Added variation instruments: - [GS] Muted Distortion Guitar (028_001_002) - [GS] Pick Scrape (120_006_002) - [GS] Wind (122_003_001) - [GS] Thunder (122_002_001) - [GS] Footsteps (126_005_001) - [GS] Smooth Bass 2 (039_019_002) - [GS] Big Shot (127_005_003) - [GS] Car Engine (125_001_001) - [GS] Siren (125_005_001) - [GS] Door Creaking (124_002_001) and [XG] version: Door Creaking (065_064_000) - [GS] White Noise (122_017_003) - [GS] Pink Noise (122_016_003) - [GS] Sine Wave (080_008_001) and [XG] version: Sine Lead (080_000_066) - [GS] Tambourine (113_016_003) - [GS] Door (124_003_001) and [XG] version: Door Slam (066_064_000) - [GS] MC-500 Beep (124_011_003) - [GS] P5 Sync Lead (084_016_003) - [GS] OB2 Saw (081_001_001) - [GS] Guitar Cut Noise (120_001_001) - [GS] Acid Bass (038_008_002) - [GS] House Bass (039_022_002) - [GS] Castanets (115_008_001) - [GS] Rock Rhythm Guitar (030_024_002) - [GS] Funk Pop Guitar (028_008_001) - Non-standard instruments (exclusive to Bawami): - [Bawami] Hardstyle Reverse Bass 1 (038_098_098) (weak, high, fast) - [Bawami] Hardstyle Reverse Bass 2 (038_099_098) (strong, low, slow) - Increased volume of Synth Voice (054), Bright Piano (001), Piccolo (072), Bagpipe (109) and Kalimba (108). - Helicopter (125) now (always) has a subtle tremolo. - Reduced "velocity sensitivity" of Electric Grand (002). - Added Japanese language "“ú–{Œê i•sŠ®‘Sj" (select it from the "Interface" tab). Not everything is translated yet, and I don't know many technical words in Japanese, so it sounds strange/amusing in places. Help from a fluent speaker would be much-appreciated. - New "language" system. It allows people to customise/translate all text on message boxes, menus, the config window, and a couple of other places. A language is a folder of text files stored inside "\lang". To make a new language, please read "lang\instructions.txt" for full information (I tried to keep it easy). - Added option to send various different kinds of "Reset" messages on MIDI output when playback starts. Ensures that the external MIDI synth starts with its default settings, as expected, preventing e.g. pitch-bends or volumes being left over from a previously-played MIDI. The option (disabled by default) can be found on the "MIDI out" tab of the configuration window. - Finally hidden the non-functional "Config presets" area at the bottom-left of the configuration window for now. It has never done anything (I've still not got around to programming it) and was therefore confusing/misleading. - When changing MIDI output device, "ALL NOTES OFF" is now sent on the previously-chosen MIDI device to avoid stuck notes. - Added "Refresh" buttons next to lists of MIDI input and output devices to re-make the list and e.g. let you choose a MIDI device that you connected after Bawami started running. - Much safer listing and opening of MIDI in/out devices, particularly if a device is removed since Bawami was started (previously, Bawami would crash or open the wrong device), or if there is a device I/O error (previously, Bawami would crash). These problems have been present ever since revisions 106 and 89, when MIDI output and input, respectively, were first introduced. - Fixed potential crash when attempting to open MIDI output device that is no longer connected (only in revision 110). 1 or 2 bytes of memory were becoming corrupted. Revision 110 (832 KB): - "Send SysEx messages" on "MIDI out" tab of configuration window is ticked by default now that SysEx output works. - Fixed bug: Between runs, custom MIDI-in channel mapping is remembered and automatically restored, but picture on configuration window shows default mapping (in=out). - When exitting Bawami, "ALL NOTES OFF" is now transmitted if using MIDI output to avoid stuck notes. - Full support for transmitting SysEx messages when using MIDI output! (Completely re-wrote MIDI output code; now uses Windows MIDI APIs directly, instead of MIDIIO2K.OCX. However, MIDIIO2K.OCX is still used for MIDI input.) - Fixed bug: Between runs, master volume is remembered correctly and slider position is restored but volume is actually 100% until changed. - When using live MIDI input, last byte of a SysEx message is no longer ignored (fixes XG Reset and many other messages not being recognised when received on live MIDI input). - Whether "Loop" checkbox on main window is ticked or not is now saved between runs in the config file. - When skipping playback to a new position, "NOTE ON"s and "NOTE OFF"s are no longer sent on MIDI-out while playback is catching up ("ALL NOTES OFF" is sent). This dramatically speeds up skipping in most MIDI files when using MIDI-out. (Until I add the ability to trace back control changes and other events without sending all of them, this is as good as it will get.) - Fixed bug where distortion processor was incorrectly enabled/disabled. Example: Create a MIDI using instrument 029 (Overdrive Guitar) on channel 10. Notes correctly play as percussion. Now, override the percussion mode of channel 10 to force off; Overdrive Guitar now plays, but incorrectly has no distortion. - Increased speed of scrolling text when emulating Sound Canvas LCD (interval is now 300ms, approximately the same as the real thing, instead of 400ms). - Fixed several silly typos of information on the configuration window. - Instruments: - Increased volume of Sawtooth Lead (081). - Electric Grand (002) now has more resonance and is velocity-sensitive. - Quietened Slap Bass 1 (036). - Modified auto modulation of Rock Organ (018) to be stronger and affect volume as well as frequency. - Added auto modulation to Pan Flute (075). - Tremolo Strings (044): Made less muffled for higher notes and reduced delay before tremolo starts. - Reduced attack time of Voice Lead (085). Revision 109 (816 KB): - Fixed bug: Can't exit if sound system fails to initialise. - Fixed bug where it was impossible to select an alternative sound device/driver because the "Apply" button never appeared after one failed to initialise (bug introduced in revision 108). Revision 108 (816 KB): - Added override to force MIDI channel into or out of percussion mode (left-click instrument name - the new option is below "Lock instrument"). This is linked to "Lock instrument", so changing percussion mode will lock it that way. Right-click the instrument name or untick "Lock instrument" to return the channel to as the MIDI file states. - Crash can no longer be triggered by clicking "Apply" on the "Sound system" tab of the configuration window before a MIDI file has been loaded, and then clicking Play on the main window. Before, the playback controls would incorrectly become clickable when clicking "Apply". - Greyed out all controls on the configuration window that don't do anything yet, to avoid confusion. I should have done this a very long time ago, when I first added them. For now, they are placeholders until I make code for them. - All settings on the configuration window except for selected audio/MIDI devices are now saved between runs! A config file "startup.cfg" is automatically saved when exitting, and loaded on startup. - Increased the maximum number of playing notes while writing a WAV file from 64 to 128, since it doesn't slow down unless a MIDI actually tries to play that many notes at once. - When using "Multiple volume bars" option on Interface tab of configuration window, the bars also reflect auto modulation. As auto modulation is applied on a per-note, rather than per-MIDI channel basis, this is the only view that it's possible to display auto modulation on (on the main window). - For messages indicating the start/end of custom loop points, the position is now shown in seconds on the "ages" view, instead of in Bawami's meaningless "event index". - Changed scale of RPN H001.L008 (Vibrato rate); values between 64 and 127 now translate to 1x to 3x default (previously, it was 1x to 4x default). - Fixed bug where irrelevant text was sometimes shown on the "MIDI Messages" view after a Bank Select control change. - New slider on "Sound system" tab: Maximum detune. By default, Bawami always plays notes slightly off the "ideal" frequency (a range of 4 cents) to try to avoid 2 unfortunately-timed same notes from cancelling each other's waveforms out. With this slider, you can increase the detune for an extra chorus-like effect or even disable detune entirely. - New slider on "Sound system" tab to control the stereo width (how much of an effect panning has). A channel panned fully to the left or right can feel uncomfortable on headphones, so in this case, move this slider to the left. This will cause the channels to move towards the centre a bit (even if a channel is panned fully to the left, the right ear will still hear it a little). - Added info text for when mouse moves over master volume control on "Sound system" tab of configuration window. - Added support for RPN H000.L005 (depth of modulation via CC #1). NRPN H001.L009 (Vibrato depth) now controls depth of automatic modulation. - Added entire automatic modulation system (same as "vibrato" on Sound Canvas synths). New instrument file parameters AutoModDepth and AutoModDelay control strength (default: none) and delay (from start of note) before automatic modulation starts. They can be adjusted/overridden by CCs and NRPNs to set depth and delay. See "SUPPORTED CONTROL CHANGES" and "SUPPORTED PARAMETER NUMBERS" in info.txt for details. - Right-clicking on the main window no longer displays a menu if the sound system is not initialised. This avoids a crash when trying to change a MIDI channel's instrument when the sound system has not been initialised (e.g. after choosing a sound device on the "Sound system" tab that isn't connected to your computer anymore). - If FMOD's thread hits 100% CPU usage and warning is shown on main window, this is now logged. - Added support for multimedia hotkeys and Winamp-like keyboard controls when the main window has focus: - Rewind (and don't stop playing) = Z or "Previous" hotkey - Start playing from current position = X - Pause (stop and don't rewind) / Unpause (same as X) = C or "Play/pause" hotkey - Stop (stop and rewind) = V or "Stop" hotkey - Skip forward by 10 seconds = Ctrl + Right-arrow - Skip back by approximately (at least) 10 seconds = Ctrl + Left-arrow - A space at the start of a line of text in an instrument file no longer causes that line to be ignored when the instrument file is loaded. - Added 2 new parameters to instrument files to control the effect of modulation: ModToFreq and ModToVol. By using "ModToVol 1", you can have a tremolo instead of a vibrato! The two parameters are actually multipliers. So, using "ModToFreq 0.5" ensures that modulation will always affect this instrument's frequency by half as much as normal. Defaults are "ModToFreq 1" and "ModToVol 0" (the same as before). - When changing (overriding) the instrument of a MIDI channel: - The category of the currently-chosen instrument is indicated with a circled tick. This prevents having to search through every single category to e.g. find the instrument number of the current instrument. - Resolved conflicting keyboard shortcuts for the instrument categories. - SysEx: - Erroneous extra F0 bytes at the start of a SysEx message are now stripped out before the message is interpreted (as happens with hardware MIDI synths), instead of being misinterpreted as part of the message itself. - Setting the pan of a MIDI channel to 0 via an XG or GS SysEx message sets the MIDI channel pan to "random" instead of fully to the left. This causes each note to play at a random pan position. See "SUPPORTED SYSTEM-EXCLUSIVE MESSAGES" section in info.txt for details. - Fixed sometimes not responding to "GS reset". - Support for GS SysEx messages to set cutoff frequency and resonance of a MIDI channel's low-pass filter (I'm not sure why I didn't add that earlier). See "SUPPORTED SYSTEM-EXCLUSIVE MESSAGES" section in info.txt for details. - Support for GS SysEx messages to turn on/off "Rx.Note Off" for any given percussive instrument. This causes e.g. cymbals to be instantly silenced by their Note Off message. See info.txt for details. This required a redesign of how percussive notes are handled internally, and as a result, polyphony of percussive channels can now be displayed on the "Sound + MIDI Channels" internal view, too! - If the chosen sound driver + device fails to initialise, clicking "Reload instruments" or changing the master volume on the configuration window no longer causes a crash. - Fixed most glitches caused by an instrument changing mid-playing note. Now, playing notes won't change instrument - only new notes will use the new instrument. Previously, when the note started releasing, the low-pass filter's cutoff frequency would often (depending on the old and new instruments) jump to 0 Hz, causing a pop. However, distortion applied to a whole MIDI channel will still be turned on/off immediately. - All silders on the configuration window now work properly when pressing the home/end keys (previously, the slider would jump to the beginning or end correctly, but it would have no effect). - Instruments: - Brass Section (061) now references Trumpet (056). Synth Brasses (062, 063) still sound like the old Brass Section (061). - Decreased volume Halo Pad (094), Alto Saxophone (065) and Woodblock (115). - Added files for Golbins Effect (101) and Bagpipe (109). - Created new versions of files for Ocarina (079), Tremolo Strings (044) and New Age Pad (088). - Update instruments that can take advantage of new "ModAuto" parameters (some strings, reed and pipe instruments). - Updated instrument that can take advantage of new "ModToVol" parameter (reed, pipe, some noise-based sound effects, Harmonica (022) and Accordians (021, 023)). - Attempted to create a file for Slap Bass 1 (036) (previously, it played as Synth Bass 2 (039). However, it ended up sounding like a mix between the Synth Basses (038, 039). - Modified Taiko Drum (116)'s release, volume and various filter parameters, but it didn't make a big improvement... - Made Grand Piano (000) "more" velocity-sensitive (lower-velocity notes are now even more muffled, so the difference in harshness between gentle and heavy key presses is more obvious). - Decreased resonance of English Horn (069). - Cutoff filter of Synth Bass 2 (039) and Sweep Pad (095) is now velocity-sensitive (like Synth Bass 1 (038)). - Stopped Fifths (086) from using distortion (as it was pre-revision 106). - Increased volume of Blown Bottle (076), Choir Pad (091), Bright Piano (001), Shamisen (106), Ocarina (079), Oboe (068), Flute (073), Electric Piano 2 (005) and Music Box (010). Revision 107 (764 KB): - Fixed the nasty bug where Bawami would freeze entirely at the end of MIDI file playback if you had previously clicked "Create WAV file" and cancelled the dialog for entering the WAV filename. Revision 106 (764 KB): - New option on "MIDI in" tab to scale the velocity of notes received via MIDI input according to an adjustable exponential curve. By boosting their volume, you can hear yourself playing along with a MIDI file even if your MIDI device transmits notes at a low velocity. The velocity can also be reduced. A curve is displayed to visualise how the velocity will be scaled. - Instruments that use sine waveforms should cause less pops and painful glitches of non-retro kick drums. Sine waves, which often caused such glitches within FMOD, are no longer used for instruments. Instead, Instruments that demand a sine waveform will actually play as a square wave with a low-pass filter set at the same frequency as the desired note, removing all higher harmonics and leaving only a sine-shaped wave. - In steps towards getting Bawami to run on an old Windows 98 machine of mine, on pre-Windows NT OSes: PC speaker output should now work (a different DLL file is automatically used in this case), and an alternative method of getting RAM info on startup is done to avoid crashing. I still have to test whether Bawami can actually start yet on Win98 (automatically installing DLL/OCX files definitely doesn't work yet). - Increased obviousness of chorus by increasing its delay (also decreased rate and feedback). - Added some damping to the reverb to avoid painful-sounding hihats or shakers. Reverb room size increased slightly to compensate for the less-obvious overall reverb effect. - Fixed bug where live MIDI input became "out-of-sync" (the timing was correct but the content of the MIDI messages was in delay). This happened when both MIDI data maxing out the MIDI bandwidth was received, and Bawami couldn't respond for over a second (a buffer in Bawami overflowed and this wasn't handled properly). Now, in this situation, messages will simply be lost. - Fixed bug where, after clicking "Reloading instruments" on the config window, disabling manual override for an instrument wouldn't set instrument back to normal (Bawami forgot the original instrument). Skipping playback to a different position would fix this, but that's no longer necessary. - Fixed bug: If MIDI input device can't be opened (e.g. if another program is using it), "Enable MIDI input" remains ticked after an error is shown even though output doesn't work. - Logging: Text from Bawami pre-loader (automatically runs when starting Bawami) is no longer overwritten when the main window appears. This means that info about checking/installing system files can now be seen at the beginning of the log. Also, less-important messages to do with setting up the sound system is not shown. This increases startup speed when running from a slow drive such as a flash memory stick. - Fixed typo on config window. - Slightly changed how RAM information is logged when starting up so that Bawami can now run on Windows 98 (I recently had access to a Win98 machine, and out of curiosity, I decided to see how it handled Bawami). - Instruments: - Added subtle distortion to Fifths Lead (086) - Increased Synth Voice (054)'s cutoff frequency. - Quietened Brightness (100). - Increased volume of Pan Flute (075) and Woodblock (115). - Added files for Tango Accordian (023), Accordian (021), Charang (084), Echoes Effect (102), Synth Drum (118), English Horn (069) and Voice Lead (085). - Added better files for Agogo (113) (previously identical to Woodblock (115)) and Polysynth Pad (090) (previously identical to Synth Voice (054)). - When using live MIDI input, there is no longer a random-seeming byte at the end of every SysEx message received. - Removed code that was supposed to display info on the "MIDI Messages" view when the following messages were received from live MIDI input: Song position pointer (F2h), Song select (F3h), Tune request (F6h). The code was wrongly written and would never work. The following messages are still displayed correctly (although still have no effect): MIDI start (FAh), MIDI continue (FBh), MIDI stop (FCh). - Fixed visual glitch where the bottom line of text in the "info" area of the config window would be misaligned when the mouse was waved over channel 10 (either source or target) of the MIDI channel mapping box on the "MIDI in" tab. - Added "MIDI out" ability (INCOMPLETE!). It lets you use a different MIDI synth while watching Bawami's visualisations. Bawami can transmit MIDI messages as they are played from the MIDI file (MIDI out), echo messages received from live MIDI input (MIDI thru), or both. Even messages not recognised by Bawami are sent. Sending of SysEx messages is very buggy, and so disabled by default. Skipping freezes. - Added icons to the tabs on the configuration window ("Sound system", "Interface", etc) to try to make it easier for newcomers to find what settings they're looking for. Having this kind of visual representation for each tab may also help memorise where each setting can be found, but really, I just wanted to make it look a bit fancier. =) Icons (actually BMP files) are stored in the skin's folder (can be skin-specific). - MIDI Messages view is cleared when loading a new MIDI file. - At end of playback, any reverb now fully fades away, instead of being cut off early! This known bug has been present ever since reverb was first introduced, way back in revision 93. - "&" is now displayed correctly in the information text area at the bottom of the config window. - Fixed bug where MIDI channel remained silent until its instrument was changed. This happened after clicking "Apply" to restart the sound system if the MIDI channel's instrument was being overridden. - Fixed bug where a MIDI channel's overridden (locked) instrument can't be unlocked by right-clicking it if the most recent right-click menu that was displayed belonged to a different MIDI channel. - SysEx messages: - Message to set display duration of Sound Canvas graphic pages (0 to 7.2 seconds) is supported. Like the SC, the default duration is 2.88 seconds. See info.txt for details. - Graphics (FrameDraw pages) emulation on Roland Sound Canvas LCD! MIDIs designed to transmit and display graphics on the LCD will have their graphics displayed in the top-right corner of the main window (underneath the LCD text area, if LCD text is also being emulated at the time, so that the layout is similar to the Sound Canvas's LCD). See info.txt for details. - Can now emulate the Roland Sound Canvas LCD's text display! MIDIs designed to display text at the top of a Roland Sound Canvas's LCD will have that text displayed in a rectangle that will appear in the top-right of the main window. Messages longer than 16 characters will scroll, just like on the SC. See info.txt for details. - For Yamaha XG messages referencing a MIDI channel higher than 16, this detail (including the channel number) is now shown on the MIDI Messages view, e.g. "[XG] (Unsupported: Channel 18 > 16)" instead of only "(Unsupported)". - For many unsupported GS and XG messages, Bawami can now tell you (on the MIDI Messages view) whether they are Roland GS or Yamaha XG by showing e.g. "[GS] (Unsupported)" instead of only "(Unsupported)". Also, often, it can display which MIDI channel they apply to (even if they are unsupported). - The code that handles SysEx messages was redesigned. In the future, the new code will make it easier for me to add support for more SysEx messages (before, the code was a total mess). Also, it decreased the EXE's file size by 4 KB. - Added option to right-click menu to make WAV files instead of playing on the soundcard! This is not limited to normal playback speed, and is as fast as your CPU allows. Doing anything that slows down Bawami will NOT affect what is written to the WAV file, unlike how it can worsen ordinary playback. See info.txt for details. For now, any kind of loops within a MIDI file are ignored while making a WAV file. - Changed how Bawami chooses which sound driver + device to use when starting to run. Now, a DirectSound-compatible soundcard is no longer required, and it is possible to run with e.g. only ASIO devices, or with the new "No sound output" option. - Added option of "No sound output" to the list of available sound drivers + devices on the config window. This allows Bawami to run on computers with no compatible soundcard, while still being able to e.g. play on the PC speaker or log MIDI messages. It uses less CPU time than merely turning the master volume to 0%, so it's recommended for any computer if only listening via the PC speaker. Revision 105 (712 KB): - No longer crashes if there's a problem loading an image for a skin. A message is shown (and logged) instead, which is intended to help fix the error. - PC speaker no longer plays notes for noise-based instruments (e.g. Seashore). - New option to display a waveform for each MIDI channel instead of single/multiple note volume bars! This waveform represents the final sound for that MIDI channel (after filters and distortion) before it is potentially sent to the chorus/reverb effect, because after that point, the sound of all MIDI channels is mixed together and can't be accessed individually. This option uses much more CPU time. - If a file (e.g. image) doesn't exist in the chosen skin's folder, Bawami will now fall back to the equivalent file in the default skin's folder instead. - Change "MIDI channel enabled" to "MIDI channel unmuted" to avoid confusion by using different words to mean the same thing. - Warning is now shown for a while on main window if CPU usage by the sound thread (FMOD) reaches 100%, causing sound to stutter. - Font changed back to Mikachan for now, as the line spacing of "MS Sans Serif" was not consistent between computers for some reason, causing text to appear too low down and either get cut off or draw over the MIDI channel numbers. This will require some more research to fix. Revision 104 (704 KB): - Two right-clicks anywhere in quick succession are no longer treated as a right-click followed by a left-click. E.g. Right-clicking in a note volume bar area twice quickly now shows a menu twice, instead of showing a menu once and then muting the channel. - Fixed another slight memory leak when exiting that would eventually prevent some programs (including Bawami) from starting or drawing their GUI properly. - New "skin" system (and drop-down menu on "Interface" tab of the config window) to change the appearance of the main window. Currently, the title bar, background, and playback position bar can be customised by a skin. Skins are stored in "\image\skin". To edit or create one, please copy the 'Default' skin folder and then modify the images inside it. The skin's name is the folder name. - Improved tabbing order of all controls (buttons, checkboxes, text boxes, etc). This means that it should be easier to use the Tab key to switch between different controls now. - While playing a MIDI file, "Play" button is now greyed out. Similarly, when not playing, "Stop" is now greyed out. This is such a basic thing that should have been done ages ago, but wasn't, due to my laziness. - By clicking the volume or expression bars to override them, it is now possible to set them to absolute minimum (0) or maximum (127). Previously, the range settable using the mouse was only about 1 to 126. - Right-click in empty space on the main window to see a menu with options to quickly lock or unlock volume/expression/instrument on all MIDI channels at once. - Changed font on main window back to "MS Sans Serif", as it was a long time ago. I only ever changed it to MS UI Gothic, and then to an alternative (Mikachan-puchiB), when I didn't know how to change the code page for text. Now that I do, Windows can correctly show Japanese characters even when primarily drawing in a neat font like MS Sans Serif (which itself includes no Japanese glyphs). Also reduced download size! - "&" symbols no longer cause the following character to be underlined in meta text on the MIDI Messages view. - In preparation for a new "skin" system to allow for a customised interface design, the playback position bar is now drawn depending on 2 images ("posback" and "posfront"). This means that custom bars with fancy designs (e.g. smoke or flames) are possible, or bars without rounded corners. Also fixes the glitch where the "filled" part is drawn outside the "unfilled" part on the left when playback is near the start. - Updated the info text that is shown when waving the mouse over "Use PC speaker" checkbox of configuration window (it still said that it didn't work with Vista/7, left over from a long time ago, when I had never tried it on Windows 7). - Master volume no longer wrongly returns to 100% after clicking "Apply" on "Sound system" tab of configuration window (despite the slider not being at 100%). - If a MIDI channel is muted, clicking to the right of the red cross does not invisibly override the volume and expression. Revision 103 (692 KB): - Option to automatically unmute MIDI channels when a new MIDI file is loaded (on "Inteface" tab of config window) now has an effect. Also, there's a new, similar option to automatically disable all manually overridden controls (volume/expression/instrument) when a new MIDI file is loaded. - MIDI channel's instrument can be manually overridden by clicking on the instrument text on the main window! A popup menu will appear, and the instrument can be chosen. Right-click the instrument text to disable manual override. Alternatively, "Override instrument" can be ticked/unticked from the popup menu. "Shortcut" instrument files ("Load xxx") and default (no file) instruments are also indicated on the menu. - Each MIDI channel's volume and expression can now be manually overridden by clicking on a blue volume or expression bar on the main window. This will cause the bar to turn green, and volume or expression changes in the MIDI file or live MIDI input won't have an effect anymore. Right-click to disable manual override and the bar will turn blue again, updating to the latest MIDI file or live input value. - New "Master volume control" on "Sound system" tab of configuration window. This can be useful if you only want to hear the PC speaker output, but can't otherwise silence Bawami's main sound output. For example, if using a laptop where the PC speaker output is internally connected in such a way that muting Windows's volume will also mute the sound from the PC speaker (as is the case with my Acer Aspire 5552). - PC speaker control is now possible on 64-bit OSes! Honestly, I never thought this would happen. It is all thanks to Highresolution Enterprises and his modified, 64-bit port of inpout32.dll that was originally made by Logix4U. Bawami needs to install a virtual driver for this to work. It does this automatically if run as an administrator. Afterwards, the PC speaker can be used even if not running as an admin. - It's no longer possible to crash Bawami by quickly clicking Play (before the button gets greyed out) before the program has fully finished starting to run. - Changed range of MIDI channel filters' cutoff frequency. The range is now 300-16000 Hz instead of 400-11000 Hz, but the exponential scaling is now stronger, too. This means that more accuracy is possible at the lower frequencies, where the human ear is more sensitive to changes in frequency, even though the range is bigger now. Revision 102 (668 KB): - Fixed bug where "Browse" became permanently greyed out if the computer entered standby/sleep/hibernation during playback and while browsing for a new MIDI file to load. - If Windows's default sound system can't be initialised when Bawami is starting up (e.g. if another program is using ASIO4ALL), Bawami no longer shows a barrage of errors and crashes. - Fixed logging: - "Starting playback..." is shown instead of "'Play' clicked", when skipping playback backwards in the MIDI file during playback. - When skipping backwards in the MIDI file during playback. Now, something like "Skipped to 32945.00 seconds (backwards; from start, manual index: 1425)" is shown, instead of several other lines appearing before the open-bracket. Revision 101 (668 KB): - Support for Roland's GS SysEx messages to set channel volume, pan, instrument + bank (MSB), bank LSB, chorus and reverb levels, and pitch-bend sensitivity (negative sensitivity is possible for inverted control). See "SUPPORTED SYSTEM-EXCLUSIVE MESSAGES" section in info.txt for details. I just want to say that this was a lot of work and is responsible for another 4 KB of the EXE's file size. - Channels in percussion mode now have "* PERC *" drawn above them, instead of there being no instrument name at all. Additionally, if Bawami is "assuming" that a channel plays percussion due to a Bank Select message, "(Bank Select)" will be shown underneath. (Other reasons include channel 10 playing percussion by default, and being forced by a SysEx message - see info.txt). - Instrument text is no longer slightly cropped at the left or right edges at times. - Fractionally reduced CPU usage of drawing all text (including on the MIDI Messages view). - If Bawami fails to install its font automatically when being run for the first time, it no longer tries to continue running (and either crash or look wrong). Instead, a message is displayed, asking you to install the font (which is included) yourself. - Now, only bank changes of H127.L000 or H127.L064 will switch a channel to percussive mode. Previously, only MSB was checked, and LSB could be anything. Note that if a channel is explicitly forced into tone mode by a SysEx message (see "SUPPORTED SYSTEM-EXCLUSIVE MESSAGES" section in info.txt), bank changes can never switch it into percussion mode. - More system info is now be logged at startup (e.g. telling apart AMD and Intel CPUs, and whether computer is running on AC power or a battery). This can be useful when e.g. trying to diagnose why playback is glitchy - Windows's power-saving settings when running on a battery can have such side-effects. - When computer enters standby/sleep/hibernation, playback is now stopped. When computer resumes, playback resumes. This avoids Bawami attempting to catch up with potentially hours' worth of playback when the computer wakes up, causing the program to appear to have frozen. A new file (SYSINFO.OCX, included) is used for this functionality. If the file is not already installed (registered), Bawami will do so automatically. - New parameters for instrument files: LPVelRatio and LPVelCurve. LPVelRatio allows the range (LPFreqMax-LPFreqMin, or LPFreqMax-0 if LPEnvLink is 0) to be scaled according to the note's velocity, muffling quieter notes. High values of LPVelCurve bias this velocity towards the low end, allowing even high-ish velocities to remain close to LPFreqMin, and only allowing very high velocities to sound harsh. - Bawami can never start if no DirectSound-compatible sound device exists. Now, if none exists when starting Bawami, a message is shown and the program exits, rather than a barrage of errors being displayed before it crashing. - If the sound system fails to initialise with the selected sound driver + device (on "Sound system" tab of configuration window), this is now handled gracefully (a message is shown and playback becomes disabled). As an example, it may fail to initialise if the selected sound device is no longer actually connected to the computer. Previously, Bawami would crash after a barrage of error messages. - MIDI files with zero-length SysEx messages (no bytes between the F0 and the F7) no longer cause a crash when being loaded. - Previously, crashes were common when clicking "Apply" to lower the "maximum number of playing notes" to anything below 24, while also using the "Sound + MIDI Channels" view. This has been fixed. - The "Sound Channels" column on the "Sound + MIDI Channels" view no longer keeps showing irrelevant text left over from the last time the windows was closed. The column is also now cleared whenever the sound system is restarted (e.g. when changing the maximum number of playing notes), which stops the following: e.g. after changing the limit from 24 to 16 notes, lines #16 to #23 keep showing left-over, irrelevant text. - Tempo changes are no longer displayed as unrecognised meta data with the previous text-based meta data (e.g. a track name) shown. - High/Low Agogo (67, 68) percussive instruments no longer show up as "Unsupported percussion" on the MIDI Messages view. - No longer crashes when clicking 3 pixels to the right of MIDI channel 16's area on the main window. Similarly, channel 9 (on the bottom row) no longer mutes/unmutes when clicking 3 pixels to the right of channel 8 (top row)'s area. - Checkbox to choose whether pitch-bends of less than 1 semitone are scaled exponentially (on "MIDI Params" tab of config window) now has an effect. It is now unticked by default, to go along with the official MIDI standards. - Added "default chorus mix" setting to the "MIDI Params" tab of the config window, although it doesn't do anything yet. - Marginal speed improvement while drawing main interface. I mean, really marginal. orz - Improved speed of skipping ahead in a MIDI file while using "Sound + MIDI Channels" view. Unintentionally, text for all messages up until the skipped-to position was still being generated for the view, and then as many lines as could fit in the window were drawn. Now, this doesn't happen, just like when skipping backwards (although skipping backwards is still slow for its own reasons). - Fixed a confusing typo regarding modulation speed (lower numbers make a slower vibrato, not faster) on "MIDI Params" view of the configuration window. - Chorus levels are now restored properly after clicking "Apply" on Sound System tab to restart sound system (reverb levels didn't have this problem and were restored correctly before). Skipping to anywhere in the MIDI file fixed the chorus levels, but this is no longer necessary. - Percussion: - Cabasa no longer plays about 28 milliseconds in delay. - Increased volume of all toms. - Non-retro kicks are easier to hear. Also, the difference between Kick1 (note 35) and Kick2 (note 36) is easier to hear. - "Loop" is now ticked by default. - On startup, process is merely set to "above normal" priority on single-core CPUs (instead of "high"). "High" was causing all other programs (and Windows) to freeze until playback stopped on a slow, non-hyperthreaded, single-core computer. Hopefully, the change made to the timing system in revision 93 made it unnecessary for Bawami to have such a high priority to avoid stuttering (at least, it seems that way). - After testing Bawami on an old laptop with extremely little graphic hardware acceleration, I have decided to lower the default display refrseh rate from 60 FPS to 30 FPS. - A couple of instrument names display slightly differently on the main window to accomodate the new font (the text would be cut off otherwise). - Changed the font on the main window from MS UI Gothic to Mikachan-puchiB in preparation for releasing Bawami to the public (Microsoft doesn't allow distribution of its MS UI Gothic font). I'm not 100% sure that this is the best font for the situation, but I chose it due to its suitable height, fixed width, support for Japanese characters and readability at a small size. Also, it gives Bawami an entirely different feel. - On the "Instrument" tab of the configuration window, there are no longer instruments listed with "- " in the name (these characters split the instrument text onto a new line on the main window). - Instruments: - Increased resonance of Synth Bass 1 (038) so that its velocity-sensitive cutoff frequency is more noticable. - Modified Synth Bass 1 (038), Grand Piano (000), Taiko Drum (116), Acoustic Guitars (024, 025) and Orchestral Strings (046) to take advantage of new velocity-sensitive filter variables. - Muffled Bright Acoustic Piano (001), since Grand Piano (000) now varies its muffledness according to the velocity, meaning that the bright piano sounds "bright" more easily. - Increased speed of attack of Breath Noise (121). - Increased speed of decay and release of Crystal Effect (098). - Jazz Electric Guitar (026), and Glockenspiel (009) and Vibraphone (011) now use a filter. - Steel Drums (114) now sounds okay when playing any note, instead of only a narrow range around C6. - Increased volume of Clean Electric Guitar (027), Pizzicato Strings (045), Warm Pad (089), Whistle (078) (affects Ocarina (079)), New Age Pad (088), Brass Section (061) (affects Synth Brasses (062, 063) and String Ensemble 1 (051). - Quietened Alto Saxophone (065), Chiff (083) (affects Calliope (082)) and Tuba (058). - Modified filter of Choir Aahs (052) and Choir Pad (091). Filter's cutoff frequency now varies with the note, so that low notes don't sound so harsh and high notes don't sound so muffled. Revision 100 (644 KB): - I've tested for a successful "first run" of Bawami on Windows XP, 7, and even 8 (Release Preview!). Therefore, I've increased the version number from 0.2 to 0.3. =) - A new file, "First Run.bat", is included for computers running Windows 98/NT/2K/XP. This batch file copies msvbvm60.dll (Microsoft Visual Basic Runtime, required for Bawami to even start running) to the apropriate system folder and adds its info to the registry. Afterwards, Bawami will run and sort the rest of its files. Please see the new "FIRST RUN" section in info.txt for details. - Bawami no longer crashes on startup with computers that don't have the font "MS Gothic" already installed. Now, the font file is included and installed automatically if necessary. - Re-added "description" to the EXE, for e.g. Task Manager (I first added one in revision 92, andI have no idea when it accidentally disappeared). - Program (instrument) changes are now logged as "Set instrument to" instead of "Change instrument to", to try to fit long SysEx messages lines such as "[XG] - Set instrument to" onto the MIDI Messages window without them getting cut off. Also, "Set" matches other lines better than "Change". - Yamaha XG SysEx messages referencing a MIDI channel number higher than 16 no longer cause a crash, and are simply ignored (after being logged on the MIDI Messages view, if that is being shown). - Default reverb level for all MIDI channels is 32/127 (~25%) instead of 0. - Support for Yamaha's XG SysEx messages to set channel volume, pan, instrument, bank (MSB/LSB), chorus and reverb levels. See "SUPPORTED SYSTEM-EXCLUSIVE MESSAGES" section in info.txt for details. - When handling an XG/GM/GS Reset SysEx message, instead of releasing all notes, all sound is stopped instantly now (as if CC #120, instead of CC #123, was received on all MIDI channels). - Now recognises Roland's "GS Reset" SysEx message. This is interpreted in the same way as an XG or GM Reset SysEx message. See info.txt for details. - Updated "MIDI Params" tab on configuration window to allow section loops, global loop points, or ZUN's non-standard loops to be enabled or disabled (ignored). These are the first three controls do actually do anything on this tab. Note: Global loops must be enabled in order for ZUN's loops to be possible. - Added support for ZUN's custom loop points in his Touhou Project MIDIs, but this is DISABLED by default. ZUN's Touhou Project MIDIs use CCs #2 and #4 to mark the loop start & end points, but this usage is non-standard (General MIDI defines those controllers as Breath Controller & Foot Controller). Therefore, this may cause other MIDIs to play incorrectly. Can be enabled on "MIDI Params" tab of configuration window. - CC #116 now sets a "section loop start" point, and CC #117 sets "section loop end" point. These allow a small part of the MIDI file to be played multiple times, the number of times being determined by the value of CC #116 (0 = infinite). There can be multiple section loops in a file, although nested loops are not supported. - The looping of playback now has accurate timing (there is no longer a tiny delay between reaching the end of playback and restarting playback from the beginning). This caused problems e.g. when attempting to loop a 4-beat MIDI in sync with an external metronome. - Control change #111 or #118 (any value) now sets a "global loop start" point. If "Loop" is ticked, playback skips back to this position when end of MIDI file is reached, or when a CC #119 (global loop end) is played. If CC #111 or #118 is received from live MIDI input while a MIDI file is playing, loop start point for the MIDI file is set to the time of the most-recently played message in the file at that moment. - "MIDINoteStopAll()" is no longer written to the log file when an XG/GM System Reset SysEx message is received. - Instruments: - Increased speed of attack of Seashore (122). - Increased volume of Sawtooth (081) and Alto Saxophone (065). - Quietened Harpsichord (006) (this also affects Dulcimer (015)), Seashore (122), Distortion Guitar (030), Tenor Saxophone (066) and Overdriven Guitar (029). - Modified filter of Bassoon (070). Filter's cutoff frequency now varies with the note, so that low notes don't sound so harsh. - Added proper instrument files for Trumpet (056), Trombone (057) and Tuba (058). These use distortion to create a harsh sound at the starts of notes (attack and decay stages) when played strongly. Because of this, they sound best when playing single notes (multiple notes will increase the total MIDI channel's volume, making them distort in the notes' sustain stage, too). - If Bawami has to "prepare for first run" (add info for DLL/OCX files to the registry), the window which is shown while that happens is now shown more neatly in the centre of the screen. For the first time, I was able to test this myself on a computer which didn't have all DLL files at first. - On the main window, the red volume bars shown for each MIDI channel become a darker shade of red if that MIDI channel's low-pass filter is used. The shade depends on the filter's cutoff frequency. At 64 or above, the filter is disabled, so the shade of red is normal (bright). At 0, the filter is muffling the channel as much as possible, so the shade of red will actually be black. Revision 99 (620 KB): - "Poly" column on Sound/MIDI Channels view is now hidden for percussion channels (it always stayed at 0, as percussive notes are always treated as "releasing"). - Slightly lowered CPU usage while drawing main interface (this can probably still be improved). - When using Ctrl-Alt-F11 to have a status summary typed, the version revision number ("r") is shown correctly. E.g. "BaWaMI r99" instead of e.g. "BaWaMI r2". - Thanks to the explosive sound glitches being fixed, "Use effects" (on the Sound System tab) is now ticked on startup, enabling chorus and reverb by default. Previously, it was disabled due to reverb stretching out the explosive sounds. - Skipping ahead in a MIDI file (by clicking the playback position bar) is now faster (skipping back to before the current position can still be slow, though). - Scroll bar (playback position) now works with "time" (seconds, etc) instead of a percentage of the number of events played. This means that it moves at a constant speed, not speeding up during complex parts of the MIDI. Just like normal media players do. However, the position displays still only update when a new MIDI message is played, so they may appear to freeze if there is a long period of silence in the MIDI file. - Fixed the explosive sounds (glitches) which occurred after very high-pitched notes finished playing on certain instruments (reverb made this worse). This was caused by the sound channel's low-pass filter abruptly dropping from an extremely high frequency (over 16000 Hz) to a much lower frequency (e.g. 1000 Hz). E.g. If a sound channel was re-used to play bass after it played a very high-pitched rock organ. - Notes currently playing (being held) from live MIDI input no longer get cut when MIDI file playback reaches the end. IMPORTANT: This will result in stuck notes unless there are appropriate note-offs at the end of the MIDI file! Bawami no longer automatically releases all notes at end of playback when using live MIDI input. - MIDI file playback no longer stops at the moment when "Use live MIDI input" is clicked to start or stop using MIDI input. - Added a "custom channel map" grid for live MIDI input. This allows you to set, for example, messages received (from a keyboard) on channel 1 to play on channel 6 instead. Here, channel 1 is the "input", and channel 6 is the "target". Many input channels can be sent to the same target channel. Wave the mouse over the grid (on the "MIDI In" tab of the config window) for more information. - When using "MIDI Messages" view, "bank select" messages (CC #0 and CC #32) were sometimes logged weirdly (part of a previous message's description was shown, e.g. "Set bank (MSB) to 127Filter: HPF, cutoff frequency: 496 Hz"). This is fixed. - Tried this, but it was awful, so abandoned it for now: MIDI channel high-pass filter. If CC #74 (or MSB of NRPN H001.L032) was in the range of 65-126, a high-pass filter was applied (cutoff frequency range: 80-1000 Hz). There was a strong exponential curve which gave a big bias to low frequencies. 127 or 64 disabled LPF and HPF. Resonance of HPF was always low (don't want to boost low frequencies). - MIDI channel low-pass filters' frequency range (CC #74 or NRPN H001.L032, values 0-<64) changed to 400-11000 Hz (previously 300-10000 Hz). - When instrument files are loaded, a quick check is now performed to make sure that the parameters written in the files will not cause a crash or other problem (e.g. stuck note) when the instrument is used later. If there is such an invalid line inside the file, a message is displayed which shows the instrument and filename, the specific bad line, and the valid range of values for that parameter. - No longer shows a barrage of error messages if the top-right of the yellow horizontal rectangle shown during startup is clicked. - Line is no longer written to log file whenever anywhere on the main window is clicked, or when a MIDI channel is muted/unmuted. This was causing unnecessary slow-down when running from a memory stick. - "Use filters" checkbox on configuration window has an effect again (this got broken in revision 98). - Skipping to a different position (or starting playback from a random position) now sounds more graceful. Previously, all notes from the start up until the skipped-to position would be heard starting as fast as possible, potentially causing explosion-like sounds if reverb was used. Now, only a few recent notes are heard. - "Seeking..." is now shown while Bawami is tracing all preceding MIDI messages, which happens when playback is skipped to or is started from somewhere other than the beginning of the file. - Bug fix: If a MIDI file contained a GM/XG "Reset" SysEx message, and playback was skipped to or started from any position AFTER this message, then any parameter change up until the skipped-to position was effectively ignored. E.g. all instruments became Grand Piano after skipping. (Actually, the "Reset" message was only being processed AFTER skipping to the new position, undoing any parameter changes.) - Instruments: - Changed filters for String Ensembles (048, 049), Bright Piano (001), and for Synth Strings 2 (051) (now, not only the volume envelope differs between Synth Strings 1 & 2). - Fixed resonance (was only high for high-pitched notes) for Sitar (104), Koto (107), Piccolo (072) and Flute (073). - Modified Electric Guitar (Clean) (027) to use a filter. - Corrected the following files to comply with the new file checks performed when loading instruments: Muted Electric Guitar (028), Guitar Harmonics (031), Acoustic Bass (032). - Slightly muffled Pizzicato Strings (045). - Resonance on Church Organ (019) is now centered between 3rd and 4th harmonics instead of on 3rd harmonic (slightly "brighter" sound). - Tremolo Strings (044) now plays as Viola (041) (I can't do much better than this unless I add the ability to modulate volume), Cello (042) plays as Violin (040), Calliope (082) plays as Chiff (083). - Increased volume of Seashore (122), Piccolo (072), Music Box (010), and Whistle (078) (affects other instruments which use "Load 078"). - Added Breath Noise (121), Rock Organ (018), Reed Organ (020), Harmonica (022), Guitar Fret Noise (120), Shamisen (106) and Bird Tweet (123). - Low-pass filter on Brightness (100) is now resonant, to give an appropriately-"bright" sound. - Increased depth of bitcrush effect on Helicopter (125). - Decreased volume of Seashore (122), Voice Oohs (053). - Decreased depth of bitcrush effect on Reverse Cymbal (129). - Slowed decay of Guitar Harmonics (031) and reduced distortion to allow the square waveform to become closer to a sine. - XG Reset and GM Reset SysEx messages now reset ALL parameters, instead of only those reset by CC #121 (Reset All Controllers). This includes reverb/chorus/filter, volume, pan, pitch-bend sensitivity and many others. For full details, please see info.txt (information for the XG Reset SysEx message has been updated). - XG Reset SysEx message is no longer ignored if no previous GM Reset SysEx message was received. The behaviour was by design (following the official specs), but I came across several XG MIDIs which don't bother to use a GM Reset message before an XG Reset message. - Added support for CC #120 (All Sound Off). Unlike CC #123 (All Notes Off), this instantly silences all sound channels. Reverb may continue for a moment, though. - Fixed the known issue where SysEx messages received on live MIDI input would be ignored if a MIDI file was playing at the same time. Revision 98 (604 KB): - SysEx messages received from live MIDI input are now processed (I hadn't tested before, and never knew that they didn't work). However, this bug still exists: SysEx messages received from live MIDI input are ignored if a MIDI file is also playing. - Attempt to avoid certain "pop" glitches: Each sound channel's low-pass filter's cutoff frequency (controlled by an instrument file) is now never set higher than 22,000 Hz. Previously, very high-pitched notes on certain instruments would cause the cutoff frequency to become higher than was possible. When the sound channel was later re-used and the cutoff frequency reduced again, there would be a "pop". - No longer updates panning of notes currently released (but still fading away) when a MIDI channel's pan changes. This way, if e.g. a percussion channel is panned to the left, plays a cymbal and then instantly is panned to the centre, the cymbal's sound will still come from the left (because percussion is treated as "always releasing"). - New "Reset MIDI System" button on "MIDI In" tab of the config window (here because this is when it's most likely to be needed). Resets any parameters which may have been changed by a MIDI file or live MIDI input. Similar to a 'Reset All Controllers' message, but additionally resets all other parameters (such as pitch-bend sensitivity). Same thing is done when playing a MIDI file from the beginning. - Support for control changes #0 and #32 (Bank Select MSB and LSB). Currently, this merely acts as a third way to put a channel (other than channel 10) into percussion mode (if bank's MSB is 127). I plan on later adding a full "bank" system for instruments, where a specific instrument file can be used for each bank number. - Fixed bug: If CC #101 (set RPN MSB) was received AFTER CC #100 (set RPN LSB), following data entry was incorrectly interpreted as NRPN data entry (as if the previous "set RPN" messages had been "set NRPN" messages). - Noise-based instruments can now contain e.g. "NoiseBaseFreq 3500". In this case, when a note plays at 3,500 Hz, noise will play at full sample-rate (44,100 Hz). A note one octave down will halve the sample rate, and this downsampling makes a "bitcrushed" effect. This allows the pitch of noise-based instruments to be heard easily (lower notes sound more bitcrushed). Higher number = stronger bitcrush effect. - Improved the preparation of DLL/OCX files when running for the first time on this computer and under a user account without administrator privileges. This code alone is responsible for a 12 KB file size increase (without this code, this version of Bawami would be 592 KB). - Scale has been changed for CC #74 and NRPN H001.L032 (set filter cutoff frequency). The minimum (0) is now 300 Hz and maximum (64) is ~10,000 Hz, with an exponential scale (more accuracy available for lower frequencies). Previously the minimum (0) was 100 Hz and maximum (127) was ~10,000 Hz with a linear scale. (See previous changes for more info on the 0/64/127 change.) - The GM Reset and XG Reset SysEx messages are both now interpreted as "Reset All Controllers" followed by "Stop All Notes". - Added support for CC #123 (All Notes Off). This releases any playing notes (on this MIDI channel), causing them to start fading away as normal. - Now reacts to "Reset All Controllers" message (CC #121) according to the official MIDI specs: Resets expression to 100%, pitch-bend to centre, modulation to 0%, aftertouch (per channel and per note) to 0%, turns sustain pedal off, sets portamento duration to 40 mS and disables auto and next-note-only portamento, resets (N)RPNs to 127. No longer resets volume to 100% or pan to centre as per the MIDI specs. - Note volume (velocity), MIDI channel volume and MIDI channel expression are now all scaled exponentially for FMOD. FMOD deals with volumes in a logarithmic way (volume 0.5 sounds very similar to volume 1.0). By scaling the volume (and expression) exponentially before handing it to FMOD, a much wider-sounding range of volumes can be obtained, avoiding a "loudness war" between MIDI channels. - Support for sustain pedal (CC #64, aka damper pedal) finally added! If sustain pedal is held on (CC #64 is set to 64 or higher), note-off messages are ignored until sustain pedal is released (CC #64 drops to 63 or lower), at which point, any playing note which is no longer being held on will start being released. The (at most, 12) names of the notes released are shown on the "MIDI messages" view. - Last byte of SysEx messages should no longer be cut off. - New SysEx message supported: Yamaha's XG Set Part Mode. This is a reliable way to put a given MIDI channel into percussion mode using an XG SysEx message. See the "SUPPORTED SYSTEM-EXCLUSIVE MESSAGES" in info.txt for the details. - No longer naively assumes that an "XG Reset" SysEx message means that channel 11 should play percussion. - Unrecognised meta messages now have their data displayed as text on the "MIDI Messages" view. This may produce weird-looking results, but sometimes it can be useful (at least there is the potential to see some useful information). - Resonance of MIDI channel filter is now re-set correctly when the green "Apply" button is ticked on the "Sound system" settings. Previously, after cliking "Apply", MIDI channel filter resonance would return to none, until a MIDI message changed it again. - Changed the way CC #74 (set filter cutoff frequency) is interpreted. Bawami now treats the Data2 values as most MIDI synths do - 64 is "default" (un-muffled), and 0 is "fully muffled". Previously, some MIDIs wrongly sounded very muffled when specifying 64 to mean "un-muffled". In the future, values of 65-127 will control a high-pass MIDI channel filter (higher numbers = more "tinny"). - Fixed bug where CPU usage remained high after Stop had been clicked, if Loop was also ticked. This was due to reverb/chorus processors and MIDI channel filters continuing to run (Bawami was assuming that playback was about to loop). - Corrupted "Change instrument" (program change) messages whose Data1 gets misinterpreted as being >127 no longer cause a crash. - New parameters for instrument files: DistLevel and DistAfterVol. DistLevel applies distortion to the entire MIDI channel, allowing for better power chords on Distortion Guitar. Possible values range from 0 (default) to 1 (almost 1-bit sound). Distortion is weakened by MIDI channel expression. DistAfterVol allows quietening, but unlike VolBoost, it is applied AFTER distortion and so doesn't weaken the effect. - Less space is wasted when showing meta messages on the "MIDI messages" view (5 more characters can fit in the window). Note that you can always tick "Send text to log file" and then read through debuglog.txt to see the full messages. - CPU usage reduction: 2 less multiplications per millisecond for every playing note. Instead, the 2 multiplications are done only whenever either MIDI channel volume or expression are changed. In other words, total audibility of notes on a MIDI channel is now calculated only once, whenever channel volume or expression are changed, instead of every millisecond for every playing note. - Changed the lower limit for portamento time - CC #5 with a value of 1 now sets portamento time to about 14 mS instead of about 16 mS (a value of 0 effectively disables portamento). Such a short slide is unlikely to be audible, but this allows short portamento time values (e.g. 10 to 20) translate to (slightly) more appropriately-short durations. - Fixed bug where, if "automatic" portamento (CC #65) was already enabled, a "portamento for next note" message (CC #84) would unintentionally DISABLE portamento after the next note on that channel played. Now, in this situation, the next note plays with a slide from the note number given in CC #84, and following notes continue to use "automatic" portamento as expected. - Changed the upper limit for portamento time - CC #5 with a value of 127 now sets portamento time to 1500 mS instead of 500 mS. The exponential curve has been made stronger to compensate, to avoid lower values becoming much longer in this version of Bawami. - Instruments: - Modified Guitar Harmonics (031) to use distortion and more resonance. - Reduced resonance of Synth Bass 1 (038) and Percussive Organ (017). - Increased resonance of Sweep Pad (095) slightly. It seems to be hard to find the right balance for this... - Modified Helicopter (125), Applause (126) and Gunshot (127) to take advantage of the new NoiseBaseFreq parameter. - Changed String Ensembles (048, 049) (mainly their LPF frequency) to allow them to sound better when playing low notes. - Changed ADSR envelopes of Applause (126), Recorder (074), New Age Pad (098), Pizzicato Strings (045) and Sweep Pad (095). - Fixed "Tremelo" typo. A highly important change. - Reduced resonance of Halo Pad (094). - Added Overdriven Guitar (029) which also takes advantage of distortion. It sounds more aggressive than Distortion Guitar, mainly due to stronger and higher-pitched resonance and stronger distortion. It works well for higher-pitched strong lead melodies as well as extra-agressive fifths/chords, but the resonance can become too overpowering with low-pitched notes. - Modified Distortion Guitar (030) to take advantage of the new DistLevel and DistAfterVol parameters for instrument files. It is suited to playing more than one note at once (e.g. fifths or chords) for padding or harmonised melodies. - Increased volume of Seashore (122), Strings (048, 049, 050, 051), Flute (073), Sawtooth (081), Choir Aahs (052), Brightness (100), Clarinet (071), Fiddle (110), Electric & Fretless basses (033, 034, 035), Applause (119) and Whistle (078). - String Ensembles (048, 049), Seashore (122), New Age Pad (088), Crystal Effect (098), Orchestral Strings (046), Pizzicato Strings (045) and Acoustic Guitars (024, 025) now use low-pass filters. - Added Lead 8 (Bass + Lead) (087), Soprano/Alto/Tenor/Baritone Saxophones (064, 065, 066, 067) and Steel Drums (114). - Added Guitar Harmonics (031). It plays a harmonic of the given note (4th fundamental = 3rd harmonic = +2 octaves = +24 semitones) using resonance linked to the note frequency. - Quietened Choir Pad (091), Bassoon (070), Brass Section (061) (this affects all instruments which use "Load 061"), Percussive Organ (017) and Taiko Drum (116). - A box is now displayed while DLL and OCX files are being shown when Bawami is being run on a computer for the first time. - Finally tested Bawami running on a laptop which it's never run on before. Now it should truly be able to set itself up on Windows 7, as long as it is run with administrator privileges. - PC speaker: - Fixed crash which occurred when setting the "lowest note allowed" to the lowest note in the list (this bug was unrelated to the '19 Hz' change mentioned below). - The "lowest note allowed" option no longer lists any notes whose frequency is below 19 Hz, the approximate lower limit of the "8254" chip on the motherboard that is responsible for generating the pulses for the PC speaker. - Fixed potential bug in the generation of the internal list of notes to cycle through, which would potentially have allowed 2 (or more) copies of the same note to play if there were 2 (or more) of the same note more than 2 octaves apart, below the chosen "lowest note allowed". This is much easier to describe in code than it is to describe in English... - When using the PC speaker with the "Sound + MIDI Channels" view, the FMOD channel whose note is currently being played on the PC speaker is indicated by having that row's "Note" background colour become red, similar to Bleeper Music Maker. - Fixed PC speaker output. It had been broken since the "improvement" in revision 93 which was supposed to let notes in the "attack" stage now always play. This now works instead of causing Bawami to freeze on the first note of playback. (The best part: Two lines of code just needed to be swapped around.) - Changing the MIDI input device while MIDI input is enabled will immediately have an effect, instead of having to untick and re-tick "Enable live MIDI input". - Program no longer crashes when clicking "Apply" if "Enable live MIDI input" is also ticked. - Live MIDI input appears to be extremely reliable now; after 30 minutes of solid testing, I only noticed one message which MIGHT have been lost, but I'm not even certain that it was lost. Compare this to revision 97 (where there were obvious stuck notes in less than 5 minutes) and revision 96 (where the program would often freeze in less than 5 minutes). Revision 97 (572 KB): - Live MIDI input changed but still unreliable - program should no longer freeze while using MIDI input, but every now and then, a MIDI message gets "lost" (never has any effect). - Default portamento duration is now 40 milliseconds instead of 60. - Instruments: - Added Dulcimer (015) file which points to Harpsichord (006). - Pressing Ctrl+Alt+F11 while on another window will cause Bawami to type a status summary (current MIDI filename, playback position, number of channels in use, number of channels using reverb/chorus). This is slow, but works in any text input which supports Ctrl+B for bold text (e.g. Wordpad, IRC clients). Actually, it will work even without Ctrl+B support, but Windows will make its default "ding" sound. Revision 96 (568 KB): - Showing the "Sound + MIDI Channels" view no longer severely affects sound quality (unless "Prefer high FPS over smooth sound" is ticked on the Interface tab of the configuration window). - GUI never stops updating when browsing for a new file (on multi-core or hyperthreaded CPUs). Previously, it would sometimes freeze in the background until the file-open dialog disappeared. - Slightly modified the sound of Kick2 (both retro and non-retro). Actually, there was a typo meaning that retro kicks decayed at the speed that non-retro kicks should've decayed at, and vice-versa. - No longer responds to CC #8 (balance), as I had implemented it incorrectly (as if it was pan (CC #10)). The balance control should actually affect the left/right levels of the instrument's source sound, and then the pan control changes the position (left/right) of that mix on the speakers. As all instruments in Bawami are mono, the balance control is completely unnecessary. - On a Windows 7 (32- or 64-bit) computer that has never run Bawami before, Bawami is now able to automatically copy required files (vbalHTmr6.dll, msstdfmt.dll) from its program folder to either system32 or sysWOW64 (if they don't yet exist there) and add the required info to the registry with regsvr32.exe, before displaying its main program window and running as normal from then onwards. - New option to make pitch-bends of less than 1 semitone be scaled exponentially between 0 and 1 semitones (bend must move further towards 1 semitone to have an audible effect). Such linear bends are often added to simulate a human voice reaching the right note, but a human voice moves quickly before slowing down. Therefore such bends sound unnatural when linear; this option stops tiny bends from being linear. - FINALLY eliminated the following rare bugs!: Mysterious lost note (even when sound channels are available); Note plays without an instrument filter; Note never stops playing until another note uses the same sound channel. Most noticably, the first bug has been present since the very first Bawami, and became more obvious as more features were added, increasing CPU time. - Fixed crash with "Too many files" error message, which would eventually occur after clicking "Reload instruments" a few dozen times if there were any instrument files containing "load" lines (there have been some such instrument files included since revision 94). - Volume envelopes are updated fractionally more efficiently, particularly when the program is not able to update the sound every millisecond due to the CPU being maxed out. - The "End of track" meta message (#47) is no longer displayed at all on the "MIDI messages" view. This is because it often massively spammed up the view due to many occurrring at the same time. - The following meta messages are now displayed reliably on the "MIDI messages" view: Sequence number (#0), Misc text (#1), Copyright (#2), Track name (#3), Inst name (#4), Lyrics (#5), Marker (#6), Cue point (#7), MIDI channel prefix (#32). It also attempts to show sequencer-specific data (#127). However, I should make a more convenient way to view lyrics and track names. - CC #84 is also supported. This sets the "start note" for the next portamento slide (instead of automatically starting from the previous note's frequency). More importantly, even if portamento is disabled for the MIDI channel, CC #84 will still cause the next note (and only the next note) to play with a portamento slide at the start. Default duration is 60 mS, but that can be set by CC #5. - Added support for portamento CCs #5 and #65! CC #65 is a simple on/off switch for portamento (>63 = on). CC #5 controls portamento duration (rather than speed) of the slide, where 1 is approximately 16 milliseconds and 127 is 500 mS (exponential curve - only very high values are close to 500 mS). This means that it will always take the same time to slide from one note to another. - When sending MIDI messages to the log file, Data1, Data2 and Message numbers are also logged (as they are displayed on the "MIDI messages" view). - The following six MIDI messages now have a meaningful description shown on the "MIDI messages" view, although they have no effect (they are usually only received when using live MIDI input): Song position pointer (F2h), Song select (F3h), Tune request (F6h), MIDI start (FAh), MIDI continue (FBh), MIDI stop (FCh). - The computer's actual time (HH:MM:SS) is now shown both at the bottom of the main window, and in the "MIDI messages" view, when using live MIDI input. Previously, "LIVE" was shown on the main window, and the "Time" column on the "MIDI messages" view was left blank. - Related to the previous (SysEx crash) bug: I have chosen not to display MIDI clock messages on the "MIDI messages" view. This is because it is the time between the messages that is important, and that is not shown on the view. Therefore, clock messages simply spam the view without showing any useful information. Active Sense messages are not shown either. - While using live MIDI input, receiving a SysEx or unrecognised message (e.g. lyrics) no longer crashes Bawami when using the "MIDI messages" internal view. - Fixed bug: If an instrument used a low-pass filter whose frequency was both linked to the envelope AND a multiple of the note's frequency (e.g. Voice Oohs (053)), the frequency of the filter did not change as the note got pitch-bent. - Instruments: - Modified Brightness (100) to use a low-pass filter. - Instrument files for Synth Brasses (062, 063) now point to Brass Section (061) with a "load" line. - Quietened Distortion Guitar (030) and Sitar (104). - Increased volume and decreased resonance of Synth Basses (038, 039). - Decreased volume of Woodblock (115) and Halo Pad (094). - Increased volume of Whistle and Ocarina (078, 079) - Avoiding duplicate files: Ocarina (079) plays as Whistle (078) - The program now attempts to show extra text for unrecognised messages on the "MIDI messages" internal view. Sometimes, this can reveal song info or such text, but please bear in mind that this is highly glitchy and of little use at the moment. - More accurately, unrecognised MIDI messages are now logged as "(Unrecognised)" rather than "(Unsupported)". This is to show that Bawami doesn't understand the message at all. "Unsupported" implies that it understands what it's being told to do (e.g. change a controller) but simply doesn't support such a controller. Revision 95 (548 KB): - In the log file, "CPU type" is now logged as "Intel Pentium or compatible" instead of "Intel Pentium". (GetSystemInfo returns a dwProcessorType of 586 with AMD processors, which was previously used only for Intel Pentium.) - On the "MIDI messages" internal view, EVERY message is shown, i.e. ones not supported but which are neither controller changes nor data entry (e.g. lyrics). - Fractionally improved how efficiently every MIDI message is interpreted during playback (one less addition operation is performed). - Instruments: - Added shortcut files ("load xxx") for the following instruments. For now, these instruments will sound like a different instrument for which a file already existed, but that's still better than sounding like default.txt's simple square waveform. - Soundtrack Effect (097) plays as Sweep Pad (095). - Trumpet (056) plays as Brass Section (061). - Slap Basses (036, 037) play as Synth Bass 2 (039). - Contrabassoon (043) plays as Violin (040). - Added file for Distortion Guitar (030). This is more suited to power chords than a lead melody. - Decreased volume of Taiko Drum (116), Percussive Organ (017) and Halo Pad (094). - Slightly increased resonance of Sweep Pad (095) again. - Fixed problems with cutoff frequency of low-pass filters in instruments loaded via a .txt file which contains a "load xxx" line (the cutoff frequency at the start of the envelope was not stored correctly). - A new EXE is now included: BaWaMI opt.exe. This is a version which has been compiled with certain error-checking disabled. As a result, it runs a little more efficiently (uses less CPU time). It is recommended to use this version instead of BaWaMI.exe if CPU usage is an issue for you. - "Use filters" (on the "Sound system" tab) is no longer greyed out, and now refers to the new MIDI channel low-pass filters. It is ticked by default. - Added support for a low-pass filter on each MIDI channel. Cutoff frequency (100 to 10,000 Hz) is controlled by CC #74 (4Ah) or NRPN H001.L032; resonance is controlled by CC #71 (47h) or NRPN H001.L033. Please see info.txt for more details. Revision 94 (536 KB): - Fixed memory leak when exitting. The leak would eventually stop any new instances of Bawami (and probably certain other programs) from starting until Windows was restarted. - An instrument file can now contain a line such as "load 015"; the specified text file will be used for this instrument instead. E.g. Replacing the contents of 000.txt with "load 052" causes Grand Piano to sound like Orchestra Hit. Clicking "Reload instruments" after modifying 052.txt causes Grand Piano to change its sound, too. "052" is actually a path & filename relative to "inst" folder, without ".txt". - Reverbs no longer use damping (more treble is now audible in reverbs).- When logging MIDI messages, messages happening at 00:00.00 are now logged as such, instead of as if they happened at the very end of the file (the MIDI's duration). - Support for System Exclusive messages! Currently, only 2 messages are supported. Firstly, Roland's GS Part To Rhythm Allocation allows MIDI channels other than channel 10 to become percussion channels! There is no limit to the number of channels that can be put into percussion mode. Secondly, Yamaha's XG Reset makes Bawami assume that channel 11 is an extra percussion channel. Details are in info.txt. - Added support for control change #121 (reset all controllers). This resets pitch-bend and pan to centre, modulation and aftertouch to 0, and volume and expression to maximum. - Memory usage no longer spikes massively when loading a MIDI file. Previously, it could jump to as high as 95 MB, even if loading a tiny MIDI file. This removes the following limitations: 1,048,575 messages per MIDI track; 99,999 tempo chanes per MIDI track. In reality, the new limit for each is 2,147,483,647. - Reduced idle CPU time; if live MIDI input is not being used, the effect processors (reverb and chorus) stop running when silence falls after a MIDI file finishes playing, even if "Use effects" is ticked. - Effects no longer disappear after changing "maximum playing notes at once". Previously, "Use effects" had to be unticked and re-ticked for effects to become audible again. - Fixed this bug: Load a MIDI file with many events that happen at the very end of the file. Skip to very near the end of the file (all following events are due to happen at the same time). Start playback. Many notes would start playing and not fade (never stop). Playback would apparently finish. The log file would say that Bawami is waiting for silence, but as the notes didn't fade, silence never came. - Finally added support for toms on percussion channel! High, Mid-High, Mid-Low, Low, High Floor and Low Floor toms are triggered by notes D4, C4, B3, A3, G3 and F3 (50, 48, 47, 45, 43, 41) respectively. - Fixed a couple more keyboard shortcut conflicts on the configuration window. - Logging: - Set modulation speed (NRPN H001.L008) now shows speed only in Hz, instead of "steps/mS". Text is also shortened, as it was too long to fit on the window of scrolling messages. - Corrected logging of NRPN H001.L009 messages; "Set mod range1.0000 x 1.00 = 1.00 octaves" is now "Set mod range to 1.00 semitones" (shortened as it was too long to fit on the window of scrolling messages). - More info relating to the sound system is logged when Bawami starts - Less repetitive text is logged when exitting and when loading a MIDI file. - Seriously improved efficiency of effects (reverb and chorus). CPU usage no longer increases as more MIDI channels use reverb/chorus. This means that playing a MIDI with both reverb AND chorus on all 16 channels will now use less CPU time than revision 93 used to merely apply a reverb to 4 channels. - Corrupted note-off MIDI messages now REALLY don't cause a crash. I fixed this momentarily in revision 93, but had accidentally broken it again by the time I had finished changing other things for revision 93. - Added support for choruses! The chorus mix is controlled by CC #84. - Changed default "default reverb mix" (i.e. mix unless specified by MIDI file) to 0%, since it can now be set on the "MIDI Params" tab. - Default reverb mix for MIDI channels can now be set on the "MIDI Params" tab. - Redesigned the "MIDI Params" tab (previously called "MIDI CC") of the configuration window. Among other things, it's now easy to see which parameter number or control-change to use to change each parameter. - If you don't like the changes I made to the way the GUI is updated in revision 93, and would prefer a high refresh rate and lower CPU usage, you can tick the new "Prefer high FPS over smooth sound" option (on the "Interface" tab), which will prevent the sound system from updating mid-draw of the GUI. This is how it used to be in revision 92 and earlier (but less likely to slow down, thanks to other changes). - Instruments: - Updated all duplicate (identical) instrument files to simply point to the first copy with the new "load xxx" command (see above). - Changed Woodblock (115) to use a sine waveform (instead of square). - Added files for Koto (107), Sitar (104) and Percussive Organ (017). - Updated Clavichord (007) and Harpsichord (006) to use a filter. - Increased volume of Flute (073), Harpsichord (006) and Muted Electric Guitar (028). - Decreased volume of Synth Brass 1 (062) and Tubular Bells (014). - Increased resonance of Sweep Pad (095). Revision 93 (504 KB): - A few more things are logged when changing settings on the configuration window. - Panning is updated more efficiently (only when necessary). - Fixed bug where snares sometimes have a very high-resonance "pop" at the start. A few other start-of-note glitches should be reduced, too, but unfortunately, the "super-loud kick" glitch still exists at times (but is rarer)... - The PN High/Low columns on the "Sound + MIDI Channels" view are gone now. In their place is a new "Rvb" (reverb mix) column, and space is reserved for a future "chorus effect level" column (once I've added support for chorus). - Added support for reverb! However, it's disabled by default due to the insanely loud explosive sound that can occur when skipping with it enabled. A reverb mix of 32 (25%) is used on each MIDI channel by default (i.e. unless a MIDI specifies otherwise). Reverb can be enabled/disabled by unticking "Use effects" on the configuration window (no need to click "Apply"). - "Note volume bars" is now set to "Multiple (one per note)" by default, thanks to the fact that drawing the interface no longer affects the sound. - Added "System Requirements" section to info.txt and tidied up a few other parts. - Changed timing system for GUI updates. This has several effects. Firstly, more-normal refresh rates are available (10/20/30/40/50/60 FPS instead of 11/13/17/22/33/67 FPS). Secondly, on hyperthreaded or multi-core CPUs, when CPU is maxed out, sound will be better but GUI will take longer to respond. Also, GUI may not update while browsing for a new file. - No longer wastes time trying to prepare the PC speaker driver if running on a 64-bit version of Windows (since it would never work anyway). - While program is starting, "(slow)" is now shown while attempting to prepare the PC speaker driver, as it can take a long time, making it look as if the program has frozen. - Position display returns to 00:00.00 instead of continuing to show "LIVE MIDI IN" when you stop using live MIDI input and no MIDI file has been loaded yet. - With hyperthreaded or multi-core CPUs, drawing the main interface no longer affects the sound at all. There's no longer a need to lower the target "display refresh rate" slider to make things sound better. As a side-effect, CPU usage may appear higher, but sound will actually be better (Previously: CPU updates sound and then GPU draws interface; Now: CPU updates sound while GPU draws interface). - Vibrato (from MIDI channel modulation) now fades in over 1/8 of a second from the start of each note. That is, when the note first starts, no vibrato is applied (so that the pitch of the note sounds right), but after 0.125 seconds, the vibrato is being applied as much as it should be (according to MIDI channel's modulation). - Corrupted "Note off" MIDI messages whose Data1 gets misinterpreted as 255 (or any number above 127) no longer cause a crash. Previously, this was only checked with control-change messages, as that was the only place I'd seen it happen. - Playback position in minutes:seconds.hundredths no longer shows a negative number for the last half-second before the minute changes. This bug must have existed for years, but I only just noticed it when it showed up in the "MIDI messages" internal view. Previously, it would change like so: 00:59.20, 00:59.30, 00:59.40, 01:-0.50, 01:-0.40, 01:-0.30, 01:-0.20, 01:-0.10, 01:00.00. - "Note off" events are no longer processed (and therefore logged) if the MIDI channel is muted. Now, the only messages processed on muted MIDI channels are control changes, so that everything will be set up correctly (e.g. instrument, volume) if the MIDI channel is later unmuted. - On "Sound + MIDI Channels" view, instead of only showing On/Rel/Off, the Note State column can now show Att/Dec/Sus/Rel/Off, to show all stages of the note. - Each MIDI channel's "modulation bend" rectangle on the main window should now REALLY only be drawn if something is audible on that MIDI channel (it seems I didn't quite fix it in revision 92). As a side-effect to changing the code, the drawing of the volume bars may be fractionally faster, too. - While showing "MIDI Messages" view, actual note names are now shown (e.g. C#4) instead of the note number (e.g. 49) for "Note on" and "Note off" messages. Note volume (velocity) is also shown. - Changed "Mix in true 8-bit" keyboard shortcut (on configuration window) to Alt-T (was previously Alt-B), to avoid ticking it when pressing Alt-B to browse for a new MIDI file while on the wrong window. - On "MIDI Messages" internal view, "set pitch-bend sensitivity" and "set mod range" now show values in semitones instead of octaves (e.g. 2 instead of 0.16666). - "MIDI Messages" internal view now also shows unsupported controller changes. - Having "Internal info to show" set to "MIDI Messages" no longer slows down skipping to a different position. Previously, skipping could be slowed down so much that it sounded like the MIDI was merely playing on fast-forward. - If you try to exit Bawami while it is still starting up, that request will now be ignored. Previously, it triggered a string of up to 144 FMOD errors, after which it would crash. - When "Internal info to show" is set to "MIDI Messages", the messages are now shown in realtime, scrolling downwards in their own window, instead of merely being sent to the log file. When playing MIDIs with many fast events, this may cause the GUI to freeze for a moment at times. Also, the GUI sometimes freezes while browsing for a new MIDI file. - PC speaker: - Default "cutoff volume" is now 65% instead of 60%. - Instead of a note only playing if its envelope is above the cutoff volume, notes in the "attack" stage now also always play (to avoid it sounding like some instruments such as Sweep Pad are starting too late). - Bawami pays attention to the "Cutoff volume" slider from the start (you no longer have to move the slider once to get the program to pay attention). - If PC speaker is still making sound from a Bawami that crashed, sound will be stopped as soon as "Use PC speaker" is ticked, for fast relief (you no longer have to load a MIDI and start playback to silence it). - Instruments: - Changed filters of Ride Cymbals (51, 59). - Added support for High/Low Agogo (67, 68) percussive instruments. - Added support for the Shaker (note 82), Cabasa (note 69) and Maracas (note 70) percussive instruments. Shaker is the same as Cabasa but with more resonance, while Maracas is a short "forward" Shaker with even more resonance. - Decreased volume of Orchestra Hit (055). - Increased volume of French Horn (060), Electric Piano 1 (004) and Synth Voice (053). - Modified decay of Woodblock (115) instrument file as it was so fast that it was sometimes inaudible. - Added Bowed Glass Pad (092) and Agogo (113) (currently the same as Woodblock) instrument files. - Modified filters in Halo Pad (094), Choir Aahs (052), Voice Oohs (053) and Flute (073) instrument files. - Added filters to Violin (040), Viola (041) and Fiddle (110) instrument files. Revision 92 (468 KB): - Fixed crackling of instruments whose low-pass filter frequency is related to the note frequency (LPFreqNote > 0) but not linked to the envelope (LPEnvLink 0). Instruments that use "LPEnvLink 1" may still crackle during attack, decay and release stages (not while sustaining anymore, though). - Fixed bug where instruments with a sustain level of 0 would sometimes never fully stop playing (noticable with tubular bells on solo at a high volume). - Slightly increased duration of Woodblock (115) and closed triangle (percussion) - they used to be so short that they were sometimes impossible to hear. - Quietened the "triangle" percussive instrument a little (to 75% of what it used to be). - Added "Description" to the EXE (visible on Task Manager, for example). - A note's envelope now stops updating if it has fallen to slightly ABOVE the sustain level (i.e. there is now a small threshold). This saves CPU time and avoids unnecessary crackling from a low-pass filter being updated - Instruments that use DecayStyle 2 never theoretically reach their desired sustain level, so they continued to be updated long after changes stopped being audible. - You can now open a MIDI file by dragging-and-dropping it (from Explorer, etc) onto the main window. - Pop-like glitches at the start of notes are now rarer (the most noticable one is now at the start of non-retro kicks, which is unfortunately still as obvious as ever). - Fixed a certain "lost note" glitch: If a playing note got cut (its sound channel got re-used), then the next time that note wanted to play, any other playing note (seemingly at random) could be cut, even if there were free sound channels. Unfortunately, this is not the same "mysterious lost note" glitch that still plagues this program. - On the main window, The horizontal rectangles which show each MIDI channel's modulation bend are now only drawn if there are audible notes playing on that MIDI channel. This is slightly faster and much less distracting. Also, the rectangle no longer freezes at weird positions (not centred). - If "Unmute all MIDI channels when a new MIDI file is loaded" is enabled, any red crosses immediately disappear from the channel volume bars when loading a new MIDI. Previously, they would hang around until you actually started playback, even though they were unmuted internally. - On "Sound + MIDI Channels" view, the "Poly" column now shows the number of notes playing on each MIDI channel, instead of 127 all the time. Note that this number is according to the MIDI file. This means that if a playing note gets cut on a sound channel, this number won't decrease by 1 until the note is supposed to released. Also, this doesn't work for MIDI channel 10 (percussion). - A few micro-optimisations to use ever-so-slightly less CPU time. - Removed a new incarnation of the "pinging note" artifact that occurred when a pitch-bent note was released (the pitch would reset to no bend, causing a "ping"-like sound). An almost-identical bug was fixed a long time ago (by revision 57), but it was reborn in revision 90 when I optimised the code that calculates the frequency of a playing note. - Program was wasting time trying to "stop all notes" even if there was no MIDI file playing, whenever Rewind or the scroll bar were clicked, and when browsing for a new MIDI. - Previously, lots of "Note off" lines were spammed to the log file at certain times (4096 when loading a MIDI, 2048 when stopping playback, 2048 when an "All Notes Off" message was encountered, and 16 when you muted a channel). This is no longer the case. - Testing revealed that PC speaker control actually works on a 32-bit Windows 7 Ultimate installation, when I didn't think this was possible. However, it does not work on 64-bit Windows 7 Home Premium. Although I haven't changed any code, I'm updating info.txt to reflect this new information. - Holding the Shift key while clicking a channel's volume bar now mutes or enables ALL channels. This means that a single channel can be put on solo by shift-clicking it (to mute all channels) and then clicking again with the Shift key released (to unmute only the one channel). - Stepper motor and DC motor control (via the Arduino) are now disabled by default, because they allow only one note per MIDI channel to play (I'd forgotten I'd left it disabled, as I'd always tested on a laptop which has no built-in serial port and used a USB-to-serial adaptor; this means it had automatically disabled control via an Arduino except for when I had the adaptor connected). - If an incompatible MIDI was chosen to be loaded while a MIDI was already playing, the sound no longer remains frozen after the error message has disappeared (until Play is clicked). In fact, the sound now does not freeze at all while the message is displayed (unless this computer's CPU is neither multi-core nor hyperthreaded). - Added a full explanation of the "Sound + MIDI channels" view to info.txt. =) - "Use retro percussion" is now enabled by default, as it masks (actually, takes advantage of) any "pop" glitch at the start of kicks. - MIDI notes on the "Sound + MIDI channels" view are now shown as their note names (e.g. C#4) instead of their MIDI note number (e.g. 49). - While using "MIDI message" debugging: Note aftertouch is no longer logged as both channel and note aftertouch; Channel aftertouch and channel volume changes are now logged. - More CPU usage reduction! Each sound channel's volume is now only calculated every millisecond if the note's volume envelope is rising or falling. Apart from that, it is only calculated when the MIDI channel volume or expression is changed. Previously, it happened every millisecond for every sound channel during playback (or using live MIDI input), even if that channel wasn't playing any note. - Lowered what the program considers the "silent volume" (minimum envelope cutoff volume - sound is stopped when it falls below this volume) to a third of what it was before. Previously, it was quite obvious that e.g. a crash cymbal playing by itself was suddenly cut when it fell below a certain volume. - Unnecessary processing is now avoided when there is a MIDI message to play an unsupported percussive instrument. - Changing "Debug info to show" from "Sound + MIDI channels" to "MIDI messages" now actually closes the "Sound + MIDI channels" window (I'm surprised I didn't notice earlier that it didn't). - Bad MIDIs which imply that the instrument number should be set to 255 (127 is the highest possible) no longer cause a crash when that message is played. Instead, it is now interpreted to mean "set instrument number to 127". - Fixed problem introduced in revision 91: When loading a new MIDI file while already playing one, the log file would be spammed with many "WARNING" lines about the GUI not having being updated in a while. If running from a fast drive, this was unnoticable while using the program. However, if run from a drive with a slow write speed, it could have made the program appear to freeze by trying to write too often. - Sound devices are now only scanned once, when the program starts, instead of every time you click "Apply" after changing settings on the "Sound system". Getting the device info (name and capabilities) every time was wasting a considerable amount of time with some soundcard drivers. This means that you'll now need to restart the program after plugging in a USB sound device to be able to select it for use. - Fixed bug where the row of text for sound channel #0 on the "Sound + MIDI channels" view keeps its default text ("99999", etc) even when playing, until that sound channel has been used once. - Added Banjo (105), Orchestra Hit (055), Fifths Pad (086) and Halo Pad (094) instrument files. Also added Synth Brass 1 & 2 (062, 063) instrument files, but for now, they are the same as Brass Section (061). - Increased attack speed of Reversed Cymbal (115). - Modified Electric Grand Piano (002), Tubular Bells (014), Music Box (010) and Tinkle Bell (112) to use a low-pass filter. - Adjusted volume of Clarinet (071), Grand & Electric 2 Pianos (001, 005), Metallic Pad (093), Fretless Bass (035), Synth Basses (038, 039) and Brass Section (061). - Warning text now appears on the Configuration window when you're looking at controls that have no effect in the program (because I haven't yet coded anything for them). - Added keyboard Alt-key shortcuts for some controls on the Configuration window, and fixed some conflicting Alt-key shortcuts. - Cutoff volume for PC speaker is now shown as a percentage (e.g. 60%) instead of a number ranging from 0 to 1 (e.g. 0.6). Revision 91 (460 KB): - PC speaker options "Lowest note allowed" and "Cutoff volume" now have an effect! - Added warning text on tabs such as "Arduino" whose controls are incomplete/buggy. - Option for the lowest frequency to play on the PC speaker has been changed - now, it is set by choosing the MIDI note (listed as a note name such as "C 3") from a drop-down menu. When this has been chosen, the actual MIDI note number and frequency of the note (in Hz) are displayed next to the drop-down menu for reference. - When disabling a MIDI channel by clicking on it (or via a right-click menu), any notes playing on that channel will be stopped straight away, instead of continuing until they are supposed to be released. - Fixed how low notes are chosen to be played on the PC speaker. Now, if one note plays below the "lowest frequency to play", while the same note plays an octave higher (and in the playable range), only the higher one will play. This was supposed to happen before, but it was glitchy and sometimes, only the lower one would play. - Configuration window now un-minimizes itself if it is minimized when you click the green "[S]" button on the main window. Previously, focus would switch to the Configuration window (visible in the taskbar), but it would annoyingly remain minimized. - Corrected a problem with how the "safest" sound channel to use is chosen; if all channels were in use but some were releasing, it was possible (but rare) that a non-releasing channel would be chosen in favour of a releasing channel, cutting a note that is still being held on instead of one that has been released. - The dialog to browse for a MIDI file, and the controls on the Configuration window, aren't glitchy during playback (or after having played a MIDI) anymore. - When right-clicking a MIDI channel, the menu which appears responds to your clicks properly now (previously, it would sometimes be necessary to click the item several times before it realised that you had chosen an item). - A red cross is now always shown or hidden immediately when you enable or disable a channel by clicking its volume bar (or via the right-click menu). Previously, the interface was only ever updated during playback (or while using live MIDI input), meaning that the red cross would confusingly not appear or disappear until you started playback. - When playback reaches the end or is stopped (or when you disable live MIDI input), the interface keeps being redrawn until all sound stops, instead of instantly freezing. Also, CPU usage truly returns to 0% once all sound has stopped. - When "MIDI messages" is chosen as the debug info to show, Bawami may grind to a halt as it tries to log MIDI messages for a playing MIDI file if the program is running from a slow drive such as a memory stick. If this happens (if it takes longer than half a second to update, 3 times in a row), then the debug info to show is changed from "MIDI messages" back to "None" (and a warning message is shown). - All CPU priority now goes towards keeping the sound updating properly rather than updating the interface. This means that the "Sound + MIDI Channels" now no longer noticably worsens the sound! However, if the CPU is being maxed out and the interface hasn't been updated for half a second, it will be updated, so that it can see if you have clicked "Stop" (or any other control). - This bug is now less common: Windows's crash message appears when Bawami exits ("encountered a problem" / "stopped working"). - CPU usage reduced: The frequency of each playing note is now only calculated once when the note starts playing and once on every pitch-bend message, if modulation (vibrato) is not being used. It only happens every millisecond if modulation is being used. Previously, it happened every millisecond for every note no matter what. - While using live MIDI input, "LIVE MIDI IN" is shown in place of the current playback position (when not playing a MIDI file). - Program no longer suddenly freezes while using live MIDI input. Browsing for a file or reloading instruments were 2 things that could trigger this bug, but it could also happen after using MIDI input for a while, and happened much sooner if Windows's power management was reducing the CPU speed (if a laptop was running from a battery). - Made this glitch less common: Sometimes, there is a loud pop at the start of a note when some instrument (or percussive instrument) has used a low-pass filter. - Improved bass instruments 032-035, Choir Aahs (052), Harpsichord (006), Blown Bottle (076) and Reversed Cymbal (119). - Added instrument files for French Horn (060), Brass Section (061), Synth Voice (054), Voice Oohs (053), Chiff (083), Brightness (100), Synth Strings (050, 051), Choir Pad (091), Metallic Pad (093) and Drawbar & Church Organs (016, 019). - Modified instruments Synth Basses (038, 039), Taiko Drum & Melodic Tom (116, 117), Timpani (047), Grand & Bright Pianos (000, 001), Electric Pianos (004, 005) and Sweep Pad (095) to take advantage of the new low-pass filter parameters. - Added new parameters "LPFreqMin", "LPEnvLink" and "LPFreqNote" for instrument files to allow the low-pass filter's cutoff frequency to change over time, according to the volume envelope, plus according to the note's frequency (key tracking). Please see "default.txt" inside "inst" folder for much more information. - Added new parameter for instrument files: "VolBoost", which can be used to bring the volume of an instrument back up to the volume of other instruments after it has been unintentionally reduced by filters. - After writing to the log successfully for the first time since a failed attempt, we log the fact that there have been failed attempts to log text, instead of only doing this when the program is exited cleanly (previously, if it crashed, we would never know that there had been failed attempts to log text). - Fixed the logging of sound device names (the last few characters of previous device names were sometimes shown at the end of the current device name). - Pitch-bending uses less CPU time (previously, a "power of" maths function was being called every millisecond per note being bent, but now it is only called once per MIDI pitch-bend message and once per "set pitch-bend sensitivity" message). - When using MIDI message debugging, the program now logs a lot more detail of exactly how a NOTE OFF or NOTE ON event is handled. - Changed logging of control changes to happen only when MIDI message debugging is specifically chosen, instead of happening all the time (bad stuff happened if running from a slow drive such as a memory stick). - Several overall optimisations to reduce CPU usage. In particular, one less multiplication every millisecond per playing note, and one less division on each GUI update per playing note. Also, most floating-point maths are now single-precision (faster) instead of double-precision (unnecessarily accurate). - If the log file fails to be written to, the message warning about this is now displayed right before the program exits (process is killed), rather than as soon as you choose to exit. This means that there won't be sound continuing to play while the message is being shown. Revision 90 (424 KB): - Added new option for "debug info to show": "MIDI messages". For now, this just logs the messages to debuglog.txt, but in the future, I want the messages to also be shown scrolling upwards in their own window. - Only attempts to initialise PC speaker once, now. Previously it would retry once more if it failed. - [EDIT: Nope, it's not fixed. orz] Fixed mysterious "lost note" bug (hopefully), where a note would not play every now and then. The note not played was different every time, even after restarting the program and doing the exact same things. - Playback no longer freezes when browsing for a new MIDI file to load (on multi-core or hyperthreaded CPUs). - Playback is now not affected by background CPU usage as much as it used to be. NOTE: Information for these older versions has been gathered by comparing the running programs. It is highly incomplete - there are many changes that I never recorded any details of. Revision 89 (??? KB): - Added new "Debug info to show" option on the "Interface" tab of the config window. Currently, only one option (other than "None") has any effect: "Sound + MIDI channels". This lets you see the info about the sound channels and the MIDI channels. Also, a line is drawn between each in-use sound channel and the MIDI channel which it is playing a note for. - Added support live MIDI input. However, it causes the program to freeze at random. I really want to find the cause of this ridiculously bad bug. Revision 88 (??? KB): - Checkbox to enable/disable PC speaker works now. - Added 2 new options: "Use retro percussion" downsamples the snare percussion sound and uses a square waveform for the kick again (as it used to be). "Use glitches" downsamples all sound channels (not limited to snares) making a lo-fi effect with some more obvious glitchy sounds at the starts of notes. - Sound system options (sound device, max playing notes) are now stable, and do not take effect as soon as they are changed ("Apply" must be clicked). Revision 86 (248 KB): - MIDI files which don't explicitly set the tempo can now be played (the default tempo of 80 BPM is now correctly assumed). Previously, it was treated as infinity (all messages happened instantly and at the same time, with the duration interpreted as 00:00.00). - When using multiple volume bars for each MIDI channel, the width of each bar now depends on its volume (height), instead of being split evenly. This looks neater when a note is releasing and attacking (the other bars change width smoothly). - Option to choose between single or multiple volume bars per MIDI channel now works. - Added the ability to choose which sound device (sound card) to use, and the controls to set the maximum number of playing notes at once now work. However, they are extremely unstable and cause crashes very often when changed. - Added the ability to play notes on the PC speaker! To disable it, move the 3 "WinIo" files out of Bawami's program folder, such as into the "disabled" folder. Revision 82 (224 KB): - Multiple volume bars are now shown for each channel (one bar per playing note). The bars are divided evenly width-ways. - Configuration window added! There are controls to set the maximum number of playing notes at once, PC speaker options, MIDI modulation and pitch-bend options, interface refresh rate, single or multiple volume bars, and to change instrument on a given channel (as a test). However, only the instrument-changing controls have any effect at the moment. - (This is the oldest version that I still have the source code for) Revision 80 (192 KB): - Sound of "triangle" percussion instrument has been changed. Revision 78 (188 KB): - Added instrument file for Helicopter (125). - A new version (separate EXE) is included where the low-pass filter is disabled. Revision 75 (184 KB): - Added a "triangle" percussion instrument. - There is an experimental low-pass filter linked to the volume envelope (as the volume gets lower, the filter's frequency also gets lower). - Added instrument system. Now, each MIDI instrument can have its own volume envelope (ADSR). Revision 68 (172 KB): - Any cymbal, when starting to play, silences any already-playing version of itself. Revision 57 (156 KB): - Changes in the pitch-bend no longer have an effect on notes that are releasing, preventing the "ping" artifact caused if the pitch-bend returns to 0 after the note has been released. - Kick waveform changed from square to sawtooth. - Snare sound improved. - Layout has been changed to 2 rows of 8 channels, one above the other, rather than 1 row of 16 channels at the bottom of the window. Revision 50 (152 KB): - (This is the oldest version that I still have)