All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.11.3 - 2022-04-13
- Update to inih r55.
- Ethernet connectivity was broken on some Raspberry Pi models. Thanks to Sal Bugliarisi, retro and MorkMikael for the reports!
- Network disconnection/reconnection notifications were broken.
0.11.2 - 2022-03-25
- Support for network MIDI via raw UDP socket (new configuration file option). This is compatible with MiSTer MidiLink.
- New Bash/Python scripts for making the installation/update process easier, especially on MiSTer FPGA (see the scripts directory for download/information).
- Update to circle-stdlib v15.12/Circle Step 44.4.1.
- Update to FluidSynth v2.2.6.
- Update to inih r54.
0.11.1 - 2022-03-10
- Implemented RNFR/RNTO (file/directory renaming) in the FTP server.
- Support for SSD1312 OLED displays via new horizontal mirroring configuration file option - thanks @nikitalita!
- Update to libmt32emu v2.6.1.
- This update adds support for MT-32 ROM versions 2.06, 2.07 and CM-32LN ROM version 1.00 (CM-32LN is untested).
- Update to FluidSynth v2.2.5.
- MT-32 LCD emulation replaced with new libmt32emu v2.6+ display emulation.
- FluidSynth's master volume gain is now an effects profile setting and can be overridden on a per-SoundFont basis (issue #248). Thanks to @c0d3h4x0r for the suggestion!
- A bug in the config file reader (unterminated string) could cause the last entry in the file to be read as a corrupted value if the file ended without a newline.
- Some FTP commands could work without being logged in.
- Some DAC accessories which make use of a hardware "mute" pin (e.g. Adafruit I²S Audio Bonnet) could be held in a muted state due to a conflict with the Blokas Pisound driver's probing routine (issue #233). The driver now resets these GPIO pins to the initial power-on state, which should fix this issue. Thanks to @htamas2 for the report!
- Sudden loud noise caused by switching SoundFonts whilst receiving MIDI data (issue #247). Any note-on messages received whilst busy switching SoundFonts are now discarded. Thanks to @c0d3h4x0r for the report!
0.11.0 - 2021-12-12
- Support for the new Raspberry Pi Zero 2 W.
- You must update
config.txt
, otherwise the Zero 2 W will boot the 32-bit Raspberry Pi 2 kernel, which will result in lower performance. - This model requires new boot firmware and Wi-Fi firmware - make sure you update
bootcode.bin
,fixup*.dat
,start*.elf
, and the contents of thefirmware
directory. - PWM audio is available on GPIO pins 12/13 for this model.
- You must update
- Experimental embedded FTP server for performing updates/config changes without replacing the SD card (new configuration file options).
- This FTP server is a very basic implementation which DOES NOT feature any kind of transport layer security/encryption. Therefore, you should NOT enable this feature on a public network or expose the Raspberry Pi to the Internet.
- The FTP server is disabled by default.
- Support for Yamaha MU-series SysEx text messages, and bitmap messages when using a graphical display.
- Update to circle-stdlib v15.10/Circle Step 44.3.
- Update ARM toolchains to 10.3-2021.07.
- Update to libmt32emu v2.5.3.
- Update to FluidSynth v2.2.4.
- The default FluidSynth polyphony value has been reduced from 256 to 200 to account for the lower out-of-the-box performance of the Pi Zero 2 W.
- For the vast majority of use cases, this will have no noticable difference.
- If you prefer, a +200MHz overclock can be applied to the Zero 2 W match the performance of the Raspberry Pi 3B (1.2GHz), in which case you can use the original higher polyphony value of 256. Commented-out example of how to do this is now provided in
config.txt
. - Heatsink/cooling recommended to ensure stability if you decide to do the above.
- "WiFi disconnected!" would be shown on the LCD when Ethernet was disconnected.
- The SoundFont loading "spinner" was broken since v0.10.0.
0.10.3 - 2021-09-03
- Broken UART error handling since v0.10.2 which would result in erratic, false MIDI activity under some circumstances. Many thanks to WiteWulf and Alex Mitchell for the report!
0.10.2 - 2021-08-11
- Ability to swap the MT-32 stereo channels in order to work around bugs in games that are not aware of the MT-32's reversed panpot value interpretation (new configuration file option and custom SysEx message).
- MIDI and UART related warnings are now hidden unless verbose mode is enabled in the configuration file. This is a preventative measure against false bug reports stemming from buggy games/user equipment, and to improve aesthetics (real synthesizers tend to silently ignore harmless stray MIDI bytes).
- Guru Meditation that could occur if non-default mt32emu options were specified but the synth was unavailable due to missing ROMs.
0.10.1 - 2021-08-01
- Update to libmt32emu v2.5.2.
- Update to FluidSynth v2.2.2.
- The default value for
usb_serial_baud_rate
is now 38400 to reflect the most common use case (connecting to a vintage PC with SoftMPU).
- The MIDI level meters could get stuck under certain circumstances (issue #142).
- Sending a MIDI reset SysEx would cause the MIDI level meters to instantly zero rather than fall off gradually.
- Sending a Yamaha XG reset SysEx will now reset the MIDI level meters.
- SC-55 text SysEx messages of length <32 were not being displayed.
0.10.0 - 2021-06-26
- Brand new boot splash logo when using graphical displays - many thanks to James Sparkman for the excellent pixel art conversion!
- You can re-enable verbose startup messages with a new configuration file option.
- Basic networking support (Wi-Fi or Ethernet) - read the new
[network]
section of the configuration file to learn how to enable and set it up.- In order to use Wi-Fi, firmware must be copied to the root of the SD card (new
firmware
directory in release package), and SSID/password must be added towpa_supplicant.conf
(example file in release package).
- In order to use Wi-Fi, firmware must be copied to the root of the SD card (new
- Support for receiving MIDI over the network via Wi-Fi or Ethernet using the RTP-MIDI/AppleMIDI protocol.
- macOS users can use this feature without any additional software (see Apple documentation).
- Windows users can use rtpMIDI by Tobias Erichsen.
- Linux users can use rtpmidid by David Moreno.
- Ability to configure FluidSynth reverb/chorus effects (new configuration file options).
- Defaults can be set in the
[fluidsynth]
section. - Additional sections can be added to create "profiles" that override the defaults for specific SoundFonts.
- An example section has been added for GeneralUser GS (assumed to be at index 0) as recommended by S. Christian Collins.
- Defaults can be set in the
- The rotary encoder direction can now be reversed (new configuration file option).
- Ability to use the HDMI port for digital audio (new configuration value for
output_device
). This allows you to use inexpensive HDMI audio extractors or VGA+audio dongles to get better audio quality out of the Raspberry Pi (compared to the headphone jack). - Additional boot files for the Compute Module 4 and Raspberry Pi 400 are now included.
- The Raspberry Pi 400 is untested.
- Ability to use USB serial devices for MIDI input (CDC class devices, CH341, CP2102, FT231x, PL2303); a new configuration file option has been added to allow setting the desired baud rate.
- Update to circle-stdlib v15.8/Circle Step 44.1.
- Update to libmt32emu v2.5.0.
- Update to FluidSynth v2.2.1.
- Complete overhaul of LCD code.
- MIDI level meters now account for channel volume and expression properly and are much more responsive.
- Long text messages (e.g. SoundFont names) are now scrolled, short text messages are now centered.
- Basic support for smaller 16-character wide screens has been added.
- The activity LED no longer illuminates for System Common or System Real-Time messages.
- Default clock speeds/voltages have been lowered for Pi 4/CM4 in config.txt for reduced energy usage and SoC temperature.
- Reduced energy usage when LCD and MiSTer control interface are both disabled (core suspended).
- "GM Mode On"/"GS Reset" SysEx messages are now handled by new internal FluidSynth code which also changes how MIDI Bank Select messages are interpreted. Additionally, "XG Reset" SysEx messages are now handled.
- USB plug/unplug events now bring mt32-pi out of power saving mode.
- Some USB MIDI devices that violate the USB specification were unusable (discussion #102) - a workaround in the USB driver has been implemented. Thanks to @fabbrimichele for reporting and @rsta2 for the fix!
- Hang on "Init USB" when no USB controller is present (e.g. a Compute Module 4-based system with no external XHCI controller). Huge thanks to Serdaco for donating the CM4 and I/O board for testing!
- Boot failure on the 1GB Raspberry Pi 4/CM4 because of a bug in the memory allocator.
- The MIDI level meters would often miss fast notes (e.g. percussion).
0.9.1 - 2021-03-20
- The
gpio_baud_rate
option was broken in v0.9.0. Thanks to Scandy for the quick report and testing the fix!
0.9.0 - 2021-03-19
- The number of seconds to wait before a SoundFont begins loading after using the switch button can now be adjusted (new configuration file option).
- MT-32 ROMs and SoundFonts can now be loaded from USB mass storage devices.
- This feature should be considered unstable/experimental - some USB disk/Raspberry Pi combinations can encounter freezes/crashes.
- SoundFonts will be rescanned and the indices updated if a USB storage device is inserted or removed.
- USB storage devices must be FAT32 formatted.
- MT-32 ROMs must be located under a
roms
directory on the root of the device. - SoundFonts must be located under a
soundfonts
directory on the root of the device. - Only one USB storage device is supported at a time.
- The SoundFont index continues counting after the last SD card SoundFont index. If there are no SoundFonts on the SD card, the first USB storage SoundFont starts at index zero.
- Special thanks to @rsta2 for providing important USB driver fixes and mmmonkey Pete for donating a Raspberry Pi 3B for testing!
- Ability to set master volume gain and reverb gain for mt32emu (new configuration file options).
- Update to circle-stdlib v15.6/Circle Step 43.3.
- Update to inih r53.
- Update to FluidSynth v2.1.8.
- Update ARM toolchains to 10.2-2020.11.
- Config file options are now case-insensitive.
- The
usb
configuration option has been moved to the[system]
section. Please update your configuration file if you use this option.
- Large files mistakenly placed in the
roms
directory could cause mt32-pi to crash on startup (issue #93).
- Old ROM loading behavior now removed. If you have
MT32_CONTROL.ROM
/MT32_PCM.ROM
files in the root of your SD card, please move them to theroms
subdirectory otherwise they will fail to load. - Unused USB drivers removed (kernel size reduced).
- Unused C standard library functions now removed by linker (kernel size reduced).
0.8.5 - 2021-02-10
- 128x32 SSD1306 displays were broken (flickering) since 0.8.4.
0.8.4 - 2021-02-07
- USB plug & play support for MIDI interfaces.
- You can now connect/disconnect USB MIDI devices at runtime and they will be used instead of the GPIO MIDI interface when present.
- Support for SH1106 OLED displays - many thanks to @arananet for donating a screen!
- Update to libmt32emu v2.4.2.
- Update to FluidSynth v2.1.7.
- Rotary encoder now has an acceleration curve applied to it when turned quickly.
- The SoundFont name is now displayed before loading when using a button to cycle through them.
- Some USB MIDI devices were not being detected at startup.
- "LCD-Auto" mode for MiSTer was broken because of a bug in the SSD1306 framebuffer difference-checking code.
- Rapidly-changing panning values could cause pops/clicks in FluidSynth - many thanks to @Asbrandt for reporting and @derselbst for the quick fix!
- This was particularly noticable in the Descent Level 1 soundtrack's bassline, for example.
- A temporary patch has been applied until FluidSynth v2.1.8 is released.
0.8.3 - 2021-01-16
- FluidSynth is now reset when a "GM Mode On" or "GS Reset" SysEx message is received.
- FluidSynth is now reconfigured when GS "Use For Rhythm Part" SysEx messages are received for songs that use multiple drum kits.
- Switching MT-32 ROM sets via button press would fail if the next ROM set wasn't present. For example, if an MT-32 "new" set wasn't present, then pressing the button would not switch from "old" to CM-32L as expected.
0.8.2 - 2021-01-06
- Update to FluidSynth v2.1.6.
- Missing part level bar segments and "glitchy" rendering when using HD44780 LCDs.
- Missing part level bar "bases" when using HD44780 LCDs.
- Backlight would not be turned off/on for supported I²C HD44780 LCDs when entering/exiting power saving mode.
0.8.1 - 2021-01-03
- Boot failure on Raspberry Pi 4 due to inability to allocate heap.
0.8.0 - 2021-01-03
- Support for the SSD1309 using the
ssd1306_i2c
driver - many thanks to @flynnsbit for testing! - Support for the Blokas Pisound - many thanks to @sigkill for providing the device for development!
- Support for configuration using MiSTer FPGA's OSD via an I²C control interface in certain cores - many thanks to @sorgelig for collaborating and implementing the MiSTer side!
- Support for physical buttons and rotary encoders with two "simple" control schemes (new configuration file option).
simple_buttons
allows connecting 4 buttons for switching synth, switching MT-32 ROM/SoundFont, decreasing and increasing volume.simple_encoder
allows connecting 2 buttons and a rotary encoder (with button). Volume is adjusted by turning the encoder, encoder button will be enabled in a future release.- Menu system/additional button features will come in future releases; this is just to get basic functionality implemented.
- Details on how to wire these controls will be made available in the wiki.
- Animated loading "spinner" for when large SoundFonts are being loaded.
- This will probably be replaced with a progress bar in the future.
- Support for Roland SC-55 "graphics" messages when using a graphical display.
- A good example of this is the Roland "Star Games" demo MIDI (
STARGAME.MID
).
- A good example of this is the Roland "Star Games" demo MIDI (
- Ability to set master volume gain for FluidSynth (new configuration file option).
- SD card I/O speed increased by up to ~180% for cards that support High Speed mode (almost all cards available for purchase today).
- This should dramatically reduce SoundFont loading times.
- MT-32 ROM/SoundFont switch messages are now only shown when the appropriate synth is active.
- A message is now displayed on the LCD for a second just before entering power saving mode.
- Switching MT-32 ROM sets whilst MIDI was playing could cause a crash.
- Switching SoundFonts too often (especially large ones, and especially while MIDI is playing) could result in a crash due to an out-of-memory condition.
- This has been solved with some upstream fixes by the FluidSynth team combined with a custom memory allocator that should prevent fragmentation. Many thanks to @derselbst and @jjceresa for their help!
- Power saving mode would never be entered whilst in SoundFont mode if the user had switched SoundFonts.
0.7.1 - 2020-11-26
- "Loading" message when switching SoundFonts.
- Update to GeneralUser GS v1.511.
- This is a currently-unpublished version from the author, who has made several important fixes to the SoundFont to improve compatibility with FluidSynth v2.1.0+.
- Update to circle-stdlib v15.5/Circle Step 43.2.
- Part level meters in SoundFont mode now have "bases".
- Incorrect
-dirty
suffix on version string on clean builds (again!). - Crash when using USB MIDI interface in SoundFont mode, or when resuming from power saving mode.
- Hang on startup if unsupported LCD size is set in configuration file.
0.7.0 - 2020-11-22
- FluidSynth synthesizer engine v2.1.5 for using SoundFonts for General MIDI support and more.
- You can switch between MT-32 and SoundFont mode at runtime using SysEx.
- SoundFonts can be switched at runtime using SysEx, with some caveats for large SoundFonts (see FAQ section of README).
- New configuration file options for changing default synthesizer and SoundFont.
- GeneralUser GS v1.471 included as default SoundFont - many thanks to S. Christian Collins for kindly giving permission!
- Ability to invert the display orientation for SSD1306 (new configuration file option).
- Support for 64 pixel high SSD1306 OLED displays - many thanks to @ctrl_alt_rees for donating a screen!
- Ability to set I2C clock speed (new configuration file option).
- This is useful for allowing larger displays to refresh at a faster speed; see config file for details.
- Power saving mode with configurable timeout (new configuration file option).
- The CPU clock speed will be lowered, audio device stopped, and LCD backlight turned off (when possible) after a configurable number of seconds to save energy.
- Any MIDI activity will instantly bring the system out of power saving mode.
- Undervoltage/throttling detection -
mt32-pi
will now warn the user when the firmware detects an undervoltage/CPU throttling condition.
- Update to circle-stdlib v15.4.
- New multi-core architecture; audio rendering and LCD updates moved to their own dedicated CPU cores, leaving MIDI and interrupt processing on the primary core.
- Kernels for Pi 3 and 4 are now compiled for AArch64 (64-bit) for better performance.
- When upgrading, you must replace the
config.txt
file on your SD card and add the newarmstub8-rpi4.bin
file for Pi 4. - You should remove old
kernel*.img
files from your SD card. - It's recommended that you clear your SD card (except for your
roms
directory) and reconfiguremt32-pi
for this release.
- When upgrading, you must replace the
- Synth engines now compiled with more aggressive optimizations enabled to benefit from ARM NEON instructions.
- Due to the above three changes, it's possible that Raspberry Pi 2 may be more usable with this release, but this is untested.
- Kernel size significantly reduced by removing mt32emu ROM loader dependency on C++ iostreams.
- Improved layout of 4-line HD44780 LCD.
- MT-32 status line moved to bottom row.
- Part levels now 3 rows high.
- Default sample rate and chunk size reduced to 48000Hz and 256 samples.
- SSD1306 text alignment was off by one pixel.
- SSD1306 part level meters' top pixels would flicker with long sustained notes.
- Part level meters would suddenly snap to a lower level if a quiet note followed a loud note instead of falling off.
- Possibility of overflowing text in HD44780 Print() function.
0.6.2 - 2020-10-18
- USB MIDI was broken since 0.6.0.
- SSD1306 font updated to perfectly match the original MT-32's Sanyo DM2011 font.
0.6.1 - 2020-10-13
- Update to libmt32emu v2.4.1.
- Update to circle-stdlib v15.3/Circle Step 43.1.
- Update to inih r52.
- Boot speed improved by another ~0.3 seconds when
usb = on
thanks to improvements in Circle Step 43.1.- If updating from an old version, make sure you replace
config.txt
to benefit from a couple of other boot optimizations.
- If updating from an old version, make sure you replace
- Correct version string is now extracted from ROM 2.04 when switching to it.
- The
none
option fori2c_dac_init
was broken in v0.6.0. - Spacing between status row text and part level meters on SSD1306 improved.
0.6.0 - 2020-10-04
- Ability to configure initial MIDI channel assignment (new configuration file option).
- Ability to set custom baud rates for GPIO MIDI (new configuration file option).
- This could be useful for those wanting to use SoftMPU's serial MIDI mode.
- Multiple ROM sets can now be used and switched between using custom SysEx commands. See new
README.md
section and config file for full details.- Please move your
MT32_CONTROL.ROM
andMT32_PCM.ROM
into a new subdirectory calledroms
. - For now, the old locations are still checked as a fallback, but this may be removed in a later version.
- Please move your
- Update to circle-stdlib v15.2/Circle Step 43.
- Boot speed improved by ~0.5 seconds by using
start_cd.elf
/start4cd.elf
andfixup_cd.dat
/fixup4cd.dat
.- If updating from an old version, make sure you replace
config.txt
and add the new*.elf
and*.dat
files when updating your SD card to benefit from this.
- If updating from an old version, make sure you replace
- LCD/OLED part level meters moved to the upper row(s).
- Config file parsing now more efficient.
- Left/right channels were backwards when using PWM (headphone jack) - thanks @ctrl_alt_rees and YouTube viewers.
0.5.0 - 2020-09-19
- Program change messages are now shown on the LCD.
- Activity LED now flashes when other types of messages are received (e.g. SysEx or control changes).
- Complete rewrite of the MIDI parser code.
- USB and GPIO MIDI streams are now handled by a single code path.
- Corrupt SysEx messages (e.g. from cheap/no-name MIDI interfaces) will no longer cause
mt32-pi
to hang (issue #25). - 2-byte Running Status messages are now handled correctly (issue #26).
- Active Sensing race condition fixed and timeout increased to 330ms as recommended by the MIDI 1.0 Specification.
0.4.0 - 2020-09-02
- Software "MIDI thru" for GPIO interface (new configuration file option).
- Update to circle-stdlib v15.1/Circle Step 42.1.
- Enhanced error reporting for GPIO MIDI parser.
- Hanging/missing notes when GPIO MIDI interface used with some modern MIDI sources that transmit using Running Status optimizations.
- Many thanks to @thorr2, @nswaldman, @icb-, @glaucon1984, @Braincell1973, @Higgy69, and @olliraa for patiently reporting, testing and brainstorming the cause of this critical issue.
- MIDI messages could be passed to
mt32emu
with the wrong length.
0.3.1 - 2020-08-08
- Missing sample
[lcd]
config section frommt32-pi.cfg
.
- Incorrect
-dirty
suffix on version string on clean builds. - Possibility of overflowing text in SSD1306 Print() function.
- Rhythm part on SSD1306 was inverted on activity instead of being blocked out.
0.3.0 - 2020-08-03
- Initial support for HD44780 (4-bit direct and I2C) character LCDs and SSD1306 128x32 graphical OLEDs.
- Configuration file changes required - please check documentation.
0.2.1 - 2020-07-14
- Crash when using
resampler_quality = none
- thanks @nswaldman.
0.2.0 - 2020-07-14
- Configuration file system - see available options inside
mt32-pi.cfg
. - Support for PCM5xxx series DACs connected via I2S - tested with PCM5242 and PCM5122. See
README.md
and config file for details.
0.1.0 - 2020-07-10
- Initial version.