Archive for the ‘Programs’ Category

BaWaMI (revision 124)

Saturday, May 30th, 2015

Bawami now works correctly on Windows XP again! I never did test revision 122 on XP, which is where I switched to a newer version of FMOD, dedicated chorus DLL, and tested for another font being installed, none of which worked well on XP. Sorry about that. This release reverts to the older version of FMOD (but still keeps many speed improvements of r122) and brings a new chorus DLL, courtesy of Patrick Kunz of TAL, which works on XP and has more of a stereo effect with less detune. It also doesn’t make the panning sound less significant when the chorus mix is high, as the old chorus did.  There are also new command line parameters, as well as the usual helping of bug fixes and a few other improvements.

Please grab the latest version from here (7.84 MB), and see details of all changes below the page break:

Crash fixes

  • 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).
  • If MIDI file duration is less than 1 millisecond (e.g. only contains setup messages), playback no longer loops (caused program to stop responding).

Changes prompted by failing on Windows XP

  • “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.
  • 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.
  • 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.

Sound improvements

  • 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.
  • 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.1) instead of “truly instant” to avoid clicking artifacts on note-offs.


  • 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.
  • “Override Other Controls” window now wastes a little less space.
  • Fixed “being loading” typo on “Interface” tab of config window.

BaWaMI (revision 123)

Thursday, April 9th, 2015

This update fixes a few bugs (one introduced in revision 122) and contains some (very subtle) speed improvements, actually reducing the file size by 12KB, too!

  • Fixed bug where volume/expression/aftertouch/pan bars would not be redrawn after choosing a new language during playback (bug introduced in revision 122).
  • Reduced memory usage of MIDI Messages view slightly.
  • Playback can no longer wrongly be skipped with Ctrl+Left/Right arrow keys while rendering a WAV or OGG file.
  • Fixed the first 100 event indeces being displayed as 00-990 instead of 0-99 on MIDI Messages view.
  • Optimised string-handling (only slightly affects loading config, language, instruments and percussion mapping), which also reduced the file size by 12KB.

Download this version here (7.41 MB)

BaWaMI (silent update)

Friday, March 27th, 2015

To anyone who has already downloaded the new version of Bawami which I released about 90 minutes ago, I have updated the Bawami EXEs in the v0.6.122 download to correct an excessive chorus (I had left the chorus’s rate high during testing by mistake). To avoid being annoyed by the chorus making things sound out-of-tune, please download the now-modified archive. I’m sorry for the inconvenience.

BaWaMI (revision 122)

Friday, March 27th, 2015

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

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

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

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

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


WIP: Custom program for printing to Epson dot matrix printer

Monday, February 2nd, 2015

I’m experimenting with making a program to print an image to my dot matrix printer much faster than when using the Epson driver (it avoids changing print colour often), and with a lot more options. Here’s a speed comparison, plus an extra video at the end showing it being the fastest I’ve ever seen it print a colour image.

[Watch in HD]

Not shown in this video are the program’s extra options for dithering, and being able to print very long images. Well, the program’s not really shown at all here, since it’s nowhere near complete yet (or even working properly), so this video just shows off the things that… sort-of-work so far.

The program sends raw ESC/P2 data (Epson’s printer control codes) to any printer port that you have installed (including USB-to-printer adaptors), with no need for the Epson driver. It bypasses the page limit length enforced by the driver, provides detailed dithering options (including error diffusion, used in this video), and takes a different approach to printing colours. This approach is designed to be much faster than colour printing using the Epson driver, but my program has to fight against the printer’s urge to merge everything internally and print all 4 colours slowwwwwly on every line. It seems to all depend on timing – wait a moment so that it starts printing – which I’m very disappointed in, because different printers will print at different speeds. This means it’ll be hard to make a program that works well with any ESC/P2-compatible printer. It will at least end up with the correct ink on the paper – it just might take 10 minutes to print. Oh well~

EDIT: Newer progress can be seen here.

BaWaMI (revision 121)

Sunday, December 7th, 2014

This release greatly improves PC speaker control, adds 3 more instruments, has the usual helping of bug fixes and things to avoid crashes, plus adds support for GS SysEx messages to specify how much modulation effects vibrato or tremolo. I added a new advanced command line option, and they shouldn’t cause problems with the Windows command prompt anymore. …Oh, and I added some more dodgy Japanese translations.

Not only can the PC speaker now do silky-smooth pitch-bends and vibrato (no longer sounds like scraping metal), but the cutoff volume can now take MIDI channel’s expression and volume into account. Plus, the “Arpeggio” controls, for choosing how quickly to cycle through the playing notes, are finally usable!

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


BaWaMI – old versions

Saturday, December 6th, 2014

For people who are curious, I have made a section where you can download old versions of Bawami. There’s now a link in the top-right of the usual download page, too.

IMPORTANT: These old versions contain bugs which can sometimes make them unusable, and even make your system unstable! That’s why I released newer versions, after all. Please have a quick look through the latest change log to see what was fixed in versions after the one you choose to download, in order to get an idea of the bugs that you can expect to encounter. I will not change or support these old versions, and recommend that you always download the latest version if you want things to work with the fewest problems. If you feel that you need to use an older version instead of the newest one for some reason, please let me know why and I’ll try to fix the newest version for you!

I’m doing this because I’ve found myself wanting old versions of various programs recently, and I’d hate Bawami to be one of those programs that’s hard to find old versions of, if only for seeing what’s changed over time. Plus, I saw in my server’s log someone trying to download old versions by guessing the URLs, so I thought I’d help them out! I can’t stress enough the importance of checking the changelog to avoid nasty surprises that I fixed in later versions, and would recommend running the old version in a virtual machine just to be safe, but please have fun! Revision 121 (which lets the PC speaker do silky-smooth pitch-bends, among other things) will be released shortly, but as it’s gone 3AM here, I’d like to sleep before I write up that blog post.

BaWaMI (revision 120)

Saturday, October 11th, 2014

This fixes quite a few bugs I discovered, and adds a new option to choose the buffer length when using the DSound or WinMM sound drivers. I also added instrument “Effect 8 (Sci-fi)” (103) (only 4 more GM instruments left to add until all 128 are there!). Details and download link are below.

New stuff

  • 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.
  • Added instrument file for Sci-fi Effect (103).

Miscellaneous bug fixes

  • 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.
  • No longer possible to crash Bawami by holding Ctrl+Left to skip backwards when playback is already at the beginning of some MIDIs.
  • 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.
  • Section loops that should only loop a certain number of times should now work correctly (not be infinite).

Visual/logging fixes

  • Made all the window icons look nice even when they’re small (16×16 or 32×32). This also fixes the silly-looking icon in the Windows Volume Mixer. This actually reduced the EXE file size by 28KB!
  • 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).
  • 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.

You can get the new version from here (7.30 MB).

Printer-based ADV game (proof-of-concept)

Wednesday, October 8th, 2014

Complete with typos! I wanted to try 3 things – ADV-style storyline scripts with branching, console mode, and realtime printer control without any fancy hardware interface. This is the (rather incomplete) result, but I thought it was already fun enough for a video.

[Watch in HD]

Thanks to code samples by a Karl Peterson, I now know how to send raw data to any printer, so I have no excuse to not make/modify/release some printer-related programs for the public. Oh no!

This script language I made also allows if/then decisions and setting values of variables, but I haven’t fully finished coding support for those yet. Unfortunately, I have no imagination at all regarding thinking up storylines, so this is all I could do for a video.

The printer is an Epson LQ-300+II, running on Windows 7 using the “Generic / Text Only” driver. This driver is the key to being able to send raw text and commands to the printer.

Dot matrix printer interface: Software (feature demo / IRC)

Saturday, October 4th, 2014

The printer is a new, colour Epson LQ-300+II this time. Sorry in advance – I was tired after spending the whole night coding. Here’s the program I made to send Epson’s ESC/P 2 commands to a compatible printer and do fancy stuff such as change effects, colour, size, and even send non-ASCII characters as graphics in the middle of ASCII text. It’s still a long way from a usable text editor, though.

The program can also monitor plain-text log files and print new lines of text as they are saved. Here, it prints off live chat logs from 4 IRC channels. I optimised it a little for IRC logs, so that it can print different parts in different colours. I considered making it monitor my web server’s log file, but visiting certain pages on my site can add dozens of lines at once to the log file, which would waste a whole sheet of paper in seconds.

[Watch in HD]

My program uses a USB interface, which I made with an Arduino, to communicate with the printer. The Arduino passes printer status info to the laptop, such as “error” or “paper out”, and forwards data from the laptop to the printer’s parallel port if the printer is ready.

I’m using a different, brand-new printer this time because it turns out that the other, second-hand printer had a bad head with 2 or 3 dead pins, causing blank lines in the print-out. I actually recorded several videos on the progress of cleaning the printer and its head, and was able to fix one of the pins, but 1 or 2 never came back to life, so it’d make a bit of an anticlimactic video that I might not upload. By the way, I recorded the pins firing in slow-motion, and one was very slow while the other didn’t move at all. I uploaded the video here.