Giter Site home page Giter Site logo

dwhinham / mt32-pi Goto Github PK

View Code? Open in Web Editor NEW
1.2K 60.0 70.0 21.17 MB

🎹🎢 A baremetal kernel that turns your Raspberry Pi 3 or later into a Roland MT-32 emulator and SoundFont synthesizer based on Circle, Munt, and FluidSynth.

Home Page: https://twitter.com/d0pefish

License: GNU General Public License v3.0

Makefile 2.41% CMake 0.10% C++ 83.03% C 3.03% Python 6.82% Shell 4.60%
raspberry-pi raspberrypi bare-metal baremetal mt-32 ms-dos retrogaming retrocomputing audio synthesizer

mt32-pi's Introduction

mt32-pi CI

  • A work-in-progress baremetal MIDI synthesizer for the Raspberry Pi 3 or above, based on Munt, FluidSynth and Circle.
  • Turn your Raspberry Pi into a dedicated emulation of the famous multi-timbre sound module used by countless classic MS-DOS, PC-98 and Sharp X68000 games!
  • Add your favorite SoundFonts to expand your synthesizer with General MIDI, Roland GS, or even Yamaha XG support for endless MIDI possibilities.
  • Includes General MIDI and Roland GS support out of the box thanks to GeneralUser GS by S. Christian Collins.
  • No operating system, no complex Linux audio configuration; just super-low latency audio.
  • Easy to configure and ready to play from cold-boot in a matter of seconds.
  • The perfect companion for your vintage PC or MiSTer FPGA setup.

βœ”οΈ Project status

  • Supports Raspberry Pi Zero 2 W, Raspberry Pi 3 Model A+, B, and B+, Raspberry Pi 4 Model B, and CM4 series.
    • Pi 2 works, but only with concessions on playback quality.
    • Pi Zero (original) and Pi 1 are unfortunately too slow (even with an overclock) and unsupported.
  • PWM headphone jack audio.
    • Quality is known to be poor (aliasing/distortion on quieter sounds).
    • It is not currently known whether this can be improved or not.
  • IΒ²S Hi-Fi DAC support.
    • This is the recommended audio output method for the best quality audio.
  • MIDI input via USB, GPIO MIDI interfaces, or the serial port.
  • Configuration file for selecting hardware options and fine tuning.
  • LCD status screen support (for MT-32 SysEx messages and status information).
  • Simple physical control surface using buttons and rotary encoder.
  • MiSTer FPGA integration via user port.
  • Network MIDI support via RTP-MIDI and raw UDP socket.
  • Embedded FTP server for remote access to files.
  • A user interface with menu system is planned.
  • More advanced MIDI routing is planned.

✨ Quick-start guide

πŸ†• If you have a Linux computer or MiSTer FPGA device, you may wish to try the new interactive mt32-pi installer script.

Otherwise, for a manual installation:

  1. Download the latest release from the Releases section.
    • If you are updating an old version, read the Updating mt32-pi wiki page for the correct procedure.
  2. Extract contents to a blank FAT32-formatted SD card.
    • Read the SD card preparation wiki page for hints on formatting an SD card correctly (especially under Windows).
  3. For MT-32 support, add your MT-32 or CM-32L ROM images to the roms directory - you have to provide these for copyright reasons.
    • You will need at least one control ROM and one PCM ROM.
    • For information on using multiple ROM sets and switching between them, see the MT-32 synthesis wiki page.
    • The file names or extensions don't matter; mt32-pi will scan and detect their types automatically.
  4. Optionally add your favorite SoundFonts to the soundfonts directory.
    • For information on using multiple SoundFonts and switching between them, see the SoundFont synthesis wiki page.
    • Again, file names/extensions don't matter.
  5. Edit the mt32-pi.cfg file to enable any optional hardware (Hi-Fi DAC, displays, buttons). Refer to the wiki to find supported hardware.
    • MiSTer users: Read the MiSTer setup section of the wiki for the recommended configuration, and ignore the following two steps.
  6. Connect a USB MIDI interface or GPIO MIDI circuit to the Pi, and connect some speakers to the headphone jack.
  7. Connect your vintage PC's MIDI OUT to the Pi's MIDI IN and (optionally) vice versa.

πŸ“š Documentation

More detailed documentation for mt32-pi can now be found over at the mt32-pi wiki. Please read the wiki pages to learn about all of mt32-pi's features and supported hardware, and consider helping us improve it!

❓ Help

Take a look at our FAQ page for answers to the most common questions about mt32-pi.

If you need some help with mt32-pi and the wiki doesn't answer your questions, head over to the discussions area and feel free to start a topic.

⚠ Note: Please don't use the Issues area to ask for help - Issues are intended for reproducible bug reports and feature requests. Thank you!

❀️ Contributing

This project is generally quite stable and very usable, but still considered by its author to be in early stages of development.

Hence, please DO NOT work on large features and open pull requests without prior discussion. There is a strong possibility that work-in-progress code for proposed features already exists, but may not yet be public, and your work will have to be rejected.

Trivial changes to the code that fix issues are always welcome, as are improvements to documentation, and hardware/software compatibility reports.

βš–οΈ License

This project's source code is licensed under the GNU General Public License v3.0.

The mt32-pi logo was designed by and is Β© Dale Whinham. The terms of use for the logo are as follows:

  • The logo MAY be used on open-source community hardware.
  • The logo MAY be used to link back to this repository or for similar promotional purposes of a strictly non-commercial nature (e.g. blog posts, social media, YouTube videos).
  • The logo MUST NOT be used on or for the marketing of closed-source or commercial hardware (e.g. case designs, PCBs), without express permission.
  • The logo MUST NOT be used for any other commercial products or purposes without express permission.
  • The shape and overall design of the logo MUST NOT be modified or distorted. You MAY change the colors if required.
  • If in any doubt, please ask. Thank you.

πŸ™Œ Acknowledgments

  • Many thanks go out to @rc55 and @nswaldman for their encouragement and testing! ❀️
  • A huge thank you to everyone who has donated via Ko-fi, PayPal, or Amazon - your support means a lot! ❀️
  • Special thanks to Edu Arana (Arananet), Porkchop Express (MiSTerAddons), @djhardrich, Nat (MiSTerFPGA.co.uk), Ricardo Saraiva (UltimateMiSTer.com), Serge Defever (Serdashop), and @opjose who have all generously donated hardware to the project.
  • The Munt team for their incredible work reverse-engineering the Roland MT-32 and producing an excellent emulation and well-structured project.
  • The FluidSynth team for their excellent and easily-portable SoundFont synthesizer project.
  • S. Christian Collins for the excellent GeneralUser GS SoundFont and for kindly giving permission to include it in the project.
  • The Circle and circle-stdlib projects for providing the best C++ baremetal framework for the Raspberry Pi.
  • The inih project for a nice, lightweight config file parser.

mt32-pi's People

Contributors

dependabot[bot] avatar dwhinham avatar nikitalita avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mt32-pi's Issues

LCD/OLED screen support

One of the nice things about the desktop version of MUNT is that it simulates the LCD screen of the real device.

It would be nice to be able to hook up a cheap character LCD to the Raspberry Pi so that status information is visible along with the MT-32 SysEx messages that some games like to display on the screen.

I'm currently implementing this for a 4x20 HD44780-style screen, and will probably add support for 2 and 1-line screens too.

Demo of some work-in-progress code can be seen here:
https://www.youtube.com/watch?v=Q0_ay0dCnRU

What screens would you like to see working?

A better project name?

The current project name isn't very exciting; it's just what I typed when starting the repository!

Can you help come up with something better? πŸ˜ƒ

Implement GM/GS reset SysEx handling

As a little educational project I am currently working on a DOS Real-mode CLI tool that sends mt32-pi control commands (I am basically frankenstein-ing the DOSMID MPU401 code, seems to work so far).

Playing around, I noticed that while mt32-pi in Munt mode - predictably - recognizes an MT-32/LA-Reset SysEx, it does not seem to care about either GM or GS resets while in Soundfont mode.

MT32/LA Reset (works in MUNT mode): F0 41 10 16 12 7F 01 F7
GM Reset: F0 7E 7F 09 01 F7
GS Reset: F0 41 10 42 12 40 00 7F 00 41 F7

To test: Send a couple hanging note-ons on channels 1-3, then send a reset. The notes will stay on.

It may be nice to implement this as a FluidSynth soft-reset if that's possible. Some MIDI files and games seem to send these at the start. For example StarGame.mid has a GS reset in the very beginning.

Unfortunately, in their manuals Roland only specify a 50ms grace period after sending a reset. Don't know if that's a bit too tight for resetting FluidSynth.

MIDI notes suffer from jitter

Currently, all MIDI notes are processed by mt32emu at the start of the audio buffer period, because we are not yet using the timestamping feature of mt32emu. This results in jitter.

It's not very noticeable with the small buffer sizes we are using, but ideally it needs to be dealt with.

In other words, MIDI is received, and added to the synth's queue. The synth is then asked to produce 512 frames of audio, and then it sees there are several new note-on's in the queue, so it processes them all immediately, even though in reality, they could have been spread out at any point within the 512-frame "window".

The desktop GUI MUNT takes care of this - we need to keep track of time and estimate how many samples have been rendered, and timestamp the MIDI events so that the synth knows how long to wait before actually simulating a note-on, and so on.

Show the selected ROM version on startup

As suggested by @thorr2 in another issue.

The ROM version is shown on the screen when you use a SysEx command to swap ROMs, but it would be good to show the version on startup, too.

The version strings for the ROMs are extracted from the ROM data itself, except for version 2.xx, as I don't yet have access to this ROM.

Oled flickering on and off under 8.4

Tried upgrading to 8.4 today and my oled started flickering on and off once you started to play music it would stay on but i think it was trying to turn off but every time a note hit it would come back on made it look like it was refreshing weird

I tried replacing all the files and just replacing kernel8 same thing as soon as i roll back to 8.3 it works as is should

Its a rbi3+ and using ssd1306_i2c oled screen

Support for 16x2 LCD displays

First of all: thanks, this is a lovely project :) I am slowly building one!

Suggestion for the LCDs: add support for easy-to-get 16x2 LCD panels.

I am using one now (config'd as 20x2) so the lower row ends with " |vol " and the volume is cropped out (I think). Perhaps a view with just 16 characters wide could be still useful? :) Perhaps just a V with an indicator block to show the approximate volume level?

USB MIDI plug & play (hotplug) support

As of Circle Step 43, USB plug & play is supported, but requires the application to make use of it.

This could be useful for temporarily connecting other MIDI equipment, or moving an in-use USB interface to a PC without having to restart mt32-pi after disconnecting/reconnecting the interface.

Config option to set default channel assignment

Hello.
First of all thanks for this great piece of code :)

And now a question.
MT-32 use by default inputs 2-9(and 10 to percusion) but it can be changed to 1-8(10 remains the same) with a keys combination.

Is there a way to can do it with this device? Perhaps sending a sysex msg?

Thats all and thanks again.

Show selected instrument instead of channels status?

This software is so cool! Thank you for your great efforts on this, really appreciate! For live playing it would be cool to have the option to have the display show the selected instrument instead of the midi channel status.

Would this be possible? :)

This is soo great :D

0.8.0 not working at all on Pi 4 2GB w/Clumsy MIDI

I see from the Pi LED that it's trying to boot - a longish-series of flashes, a pause, a flash, a pause, a final flash, and then nothing. No display at all on the OLED, no response to reboot SysEx over MIDI.

Replacing the kernels on the SD card with the ones from v0.7.1 restores functionality (even with the 'extra' options of the v0.8.0 config still in place).

Not sure how to debug from here.

Feature Request - MIDI Ripping

Would it be possible either via a SysEx or some other manner to trigger the recording of MIDI notes? I'd think playback should continue to work as normal, but also pass the notes to an output file.

This could be a way to rip soundtracks directly without a computer.

USB MIDI interfaces - Roland UM-1EX - Working

Hi,
Just to say this is the device I have been using, so it can be added to the 'Working List':

https://www.roland.com/global/products/um-1ex/

Thanks
P.S. Just updating to v0.6
P.P.S. If/when control buttons are added, I plan to hack them onto my PI-MIDI. The GPIO pins are accessible on the top of the PCB for soldering thin wires. I suppose a 'rotary controller' is the easiest as you get 3 inputs allowing al sorts of menu control with minimal wires. Works well on 'FlashFloppy' https://github.com/keirf/FlashFloppy/wiki/Hardware-Mods#rotary-encoder

Wrong instruments

I am currently having small issue with MT32-pi. It’s playing music but all the instruments are wrong and they are different every time when I boot the raspberry. The MT32-pi is connected to old dos pc using game port midi cable and m-audio midisport uno. I tried windows 10 laptop with munt instead MT32-pi and it is playing instruments correctly.

I am probably missing something pretty obvious here but cannot figure out what :)

Rainbow screen

I'm getting a rainbow screen on boot with the newest release. Using a Raspberry pi 3 Model B. I believe I've ruled out the hardware because:

  • this is occurring on two different Sandisk SD cards (formatted with the official SD Card Utility)

  • I'm able to boot/run Raspberry Pi OS (Minimal image based on Debian Buster) with no issue. I also ran the 'full-upgrade' while this was booted

  • I can query the i2s DAC once in Pi OS (returns 4d)

The only thing I haven't done yet is hook up my Roland UM-One via USB - would this prevent the kernel from booting?

Any help would be appreciated, this looks like a great project!

RPi 3: notes missing or delayed vs RPi 4 noisy and distorted sound

When using your latest build from July 3rd, on RPi 3 some notes are not played at all, while other play delayed.

On the RPi 4 timings and notes are correct but playback is noisy and distorted.

My setup: RPi 3 / RPi4 with DigitalLife MIDI to USB cable connected to an Atari Mega STE. Tested playback is SCUMMST (custom port of ScummVM for Atari ST and Indy 4).

Will do further testing with different inputs and post my updates here.

Initmt32emu fails if sf2 file in directory

Exodos default install includes an mt32 folder which has both the mt-32 roms as well as a SoundCanvas.sf2 file. If user copies the entire folder over to the mt32-pi sd card for mt32 roms it will cause this issue.

Alter (O)LED layout

During testing of the generic (128x32) OLED display it struck me that the layout felt off -the original 20x1 character output is on the first row and the volume bars on the second. Visually it would make sense to swap these around, combined with blanking out the appropriate channel completely rather than inverting it -just like on the original MT-32.

I feel it would be a good idea to explore the rest of the multiline displays for the most useful output too, but I guess that's to be explored in discrete tickets :)

Control surface

Now with the DAC, MIDI in and LCDs, will be fine to add some buttons to interact with the hardware. Maybe configurable via the cfg file instead of create reserved pins.

I have a Raspberry Pi 2

This looks like an awesome project, and I'd love to help you test it on my Raspberry Pi 2. Can I just download a regular release or do I need to do anything special?

New hardware - clumsyMIDI :)

Hi there!

I had some spare time on my hands and decided to design a GPIO-MIDI+DAC+SSD1306-OLED PCB.
By using the GY-PCM5102 breakout board, I could keep it through-hole only. That's why it's called clumsyMIDI. :)

Assembly is pretty beginner-friendly and components are cheap and easy to come by.
It includes two DIN sockets with MIDI IN and OUT. Hardware MIDI Thru is available as a pin header due to the limited space (can be rewired to MIDI Out socket if that's not used).

I have tested it with mt32-pi's gpio_thru option and everything works as it should. Apart from that, MIDI Out is probably most useful for ALSA/Linux right now.

For pictures and more info, take a look at https://github.com/gmcn42/clumsyMIDI
I have 4 more blank PCBs I'd be willing to send away for the price of shipping (from Germany) if somebody is interested in trying it out.

Thanks for your great work on mt32-pi!

Testing some additional DAC Hats PiSound, HiFi Berry, AudioInjector.net

As requested - opening a new issue:

I would like to test the following hardware.
HiFi Berry - PCM5122
AudioInjector.net - V. 1.5 AIH with WM8731S
PiSound from blokas with midi in and out, and a PCM1804 chip, and a few other ICs I don't have the ability to read.

Is there anything I can do to get to the console, or terminal to help out with the project? I would love to help out, and have at least one of these working, if not all three.

Configuration file

Ideally we want a user-editable configuration file so that things like audio device, sample rate, buffer size, and peripheral options (like LCD) can be configured.

Currently, all options are hard-coded into the build, which isn't very flexible.

I will probably go with a simple INI format, and use https://github.com/benhoyt/inih as a lightweight parser.

SysEx ROM Set Switching

I'm not sure if it's already planned, and I'm sorry if I missed it in the documentation but would it be possible to place multiple ROM sets on the SD card and use SysEx messages to switch between them?

The reason for this is there are two revisions of the MT-32 control ROM. The newer version of the ROM corrected some bugs, but there are a few old games that don't play correctly with the newer ROM.

There's also the CM-32L which has extra sound effects some games use. But much like the updated MT-32, there are games that don't work correctly with a CM-32L either.

So my request is to add three additional SysEx commands that would switch the ROM set to MT32-old, MT32-new, or CM32L.

If on the fly ROM switching isn't feasible. Would it be possible to add a switch to mt32-pi.cfg to specify which ROM set to use? The SysEx commands could modify the config and then reboot the Pi.

Thanks

Pi4: Only works in "low voltage" scenario

Hello! I really appreciate this project, thank you! I've been working on getting it working with a minimal setup using "mister" and nothing but a USB cable to the User port. I'm finding some very strange behavior where I can only get the mt32-pi to work when the "Low voltage" warning is present. Specifically:

  1. Powering the pi4 using the USB cable from user port: "Low voltage" warning is present on virtual OSD, but everything otherwise appears work perfectly. All music seems to work correctly.
  2. Powering the pi4 using the USB cable from user port, but with avoid_warnings=2: Virtual OSD shows only garbled noise output, and playing music results in only a few notes playing with incorrect instruments.
  3. Powering the pi4 via external USB-C power supply: Same as scenario 2.

So in short it appears that something about the "low voltage" state is the only thing getting things working for me. Suppressing that state or fixing the root-cause with a better PSU causes everything to break-down. Any thoughts here? Perhaps something about the throttling/down-clocking is actually desirable for my system? Is there a parameter I can use to test this further, and maybe deliberately apply it even with a "good" PSU connected?

Thanks in advance!

Adding support for USB soundcards?

Especially on old retro computers it would be nice to be able to mix midi output (music) with digital output (sound effect and speech). Therefore I'm trying to attach an USB soundcard with line-in and out.

The idea is to input digital audio in line-in and mix that with the midi sound to put both together out through the line-out.

Do you think that is possible?

It would also allow for a bit better output quality for music compared to default RPi PWM.

Feature Request: WiFi Samba Share

I have built a nice enclosure but it does not allow for ejecting the micro SD card without taking it apart. It would be great if WiFi could be enabled to allow remotely editing the config file and changing the ROM files to the various versions of the MT-32. Thanks for your consideration!

PCM5102 Debugging + Documentation

Hello there, sorry to bother you.

I have been fighting to get some PCM5102 boards to output anything. I couldn't find a wiring diagram on the wiki for them so I had a look at the other hats.

This seems to be how it is supposed to connect?
1 SCK => GND
2 BCK => Pin 12 (I2S CLK/BCLK)
3 DIN => Pin 40 (I2S DOUT)
4 LCK => Pin 35 (I2S WS/LRCLK/FS)
5 GND => GND
6 VIN => +5V

I bought two and neither work this way (pwm works fine if enabled). Output to i2s is enabled in the config. i2cdetect shows nothing on raspbian (but since there is no i2c control connection, that is probably ok?).

My questions are, are those wiring details correct, are they already in the wiki somewhere? Is there anything I am missing? From the wiki, the PCM5102 should be just "connect and go", or is there something else?

I updated to 0.8.1 and started with a fresh mt32-pi.cfg and only changed the output_device=i2s, no change. I have removed all connected displays and GPIO Midi.

Sorry for the probably stupid thing, it is absoluty a user error, but I simply can not find my error (other than maybe I have killed my PIs and/or the audio boards). Anything I can check?

Unreliable playing of multiple notes simultaneously?

Hi.

Running with the ready-assembled hat from Araranet (GPIO Midi and i2s hifi audio) :) Works ok, but for some reason I cannot play realiably more than one note at a time. If I try to play a chord with 3 notes, only one is played. But if I play the same notes individually (1-2-3) it works. Is this a config issue or something else?

Running Pi 3B+ and 0.3.1

Thanks!

USB Midi Input (pi) Broken in 0.6.x

USB Midi Receiving seems to be broken on the pi side in both 0.6.0 and 0.6.1.

Raspberry pi4 with USB plugged into Roland UM-ONE (also tried with M-Audio Uno) show Midi IN flashing with no sound and no messages on an attached 1306 OLED.

Audio is being sent via SoftMPU testing via Space Quest 3.

Release 0.5.0 is working as intended. Status Display messages show up (Insert Buckazoid, Space Quest III, and Channel meters all working).

Same config file was used testing all releases.

usb connection needs clarification

hello there! could you please provide more details - how to connect an RPi to a PC? is there a USB-USB midi cable? or need I a pair of USB->MIDI and MIDI->USB cables? or a way to connect USB->MIDI to GPIO?

Bad SysEx can cause mt32-pi to hang

I'm using pi-midi and cheap midi adapter. The problem is as follows: when starting a game I need to restart the Pi to get sound out of it.
Here's a demonstration: https://www.youtube.com/watch?v=gb6bEEK0EP8
I start the game at 00:12, and the game starts to send signal almost immediately (don't mind the label IN, it's wrong).
Then at 00:23 I unplug the pimidi's power and plug it back at 00:26. After restarting the sounds are played just fine and display updates. I tested with the gpio_thru option and the data is moving around even if there is no sound and the green led on Pi is not flashing.

Any ideas where the problem could be?

AMIGA MIDI - Sound note continues to play after exiting game.

Hi,
I mentioned this when we all were trying to sort out the hanging note issue, now that is sorted I thought I would bring this up.
I have tested with an actual AMIGA (A1200) and a MiSTER and get the same results. I tested MIDI by using some Sierra Online games (e.g. Kings Quest) which had MT-32 support and when I exit the game (I am using WHDLoad versions) a note continues to play. I have to power off the Raspberry Pi to stop the note from playing.

Thanks

No sound out- RPi4, PWM

I am using an RPi4 and have no audio output. I have a Fore USB MIDI interface. I extracted the latest release of MT32-Pi to the root of my SD Card, then copied in the two ROM files, named as the README specified. I could see the MIDI activity, MIDI OUT on the interface to MIDI IN on the keyboard, MIDI IN on the interface to MIDI out on the keyboard. I tried with the keyboard local synth enabled and disabled (Both of these should transmit over the MIDI interface according to the keyboard manual- it is a Yamaha). The speaker work when plugged in to other input sources, volume was properly set. I am wondering if there is a mixer or some way of setting the volume in MT32-Pi. I left the defaults for the audio entries in the file (All is set to PWM). File is attached but renamed as a txt so it will upload.
mt32-pi.txt
I am not really a coder, but have been working with my kids on music, computers and Midi, messing with RPi, emulators, linux, etc. Let me know how I can help the project.

Pi Sound Support

Let me know where to send a PiSound, after reading some of the other things you're working on, I think it would benefit both projects to send you one for development purposes.

Poor quality PWM audio (headphone jack)

When using the headphone jack for audio output, audio quality is poor - distortion is audible when playing quieter sounds.

It's not known whether this can be improved or not; we're currently just using Circle's PWMSoundBaseDevice.

Higher samplerates and using integer vs. float samples from mt32emu do not appear to make a difference.

It may be be possible to achieve better quality by using the firmware's audio driver (via CVCHIQSoundBaseDevice), which would also enable HDMI audio support, but the effects on latency are not currently known.

LCD oddness on certain games

I'm not sure if this is actually an issue with the mt32-pi/munt implementation, or simply how the MT-32 works, but games that send custom instrument data up to the MT-32 (like Master of Magic) cause the LCD display to change and the part numbers + volume disappear, leaving just the level meters.

feature suggestions from WavePi dev

Yo, I like your project. It's almost overtaken mine in a short amount of time.
My project is right here. Sadly I haven't been able to work on it as much as I'd like in the last year or so. https://github.com/t9999clint/WavePi

I have some experience with FluidSynth if you'd like, but I'd warn against it as it has quite a few bugs that I've never been able to work out. It seems like it's not handling modulation and pitch bend commands correctly and it glitches out after about 20 minutes.
I'm using BassMidi as a replacement right now, but it's closed source so I haven't been able to share it.

So here's what I'd suggest you add in order to have it completely overtake my project (the software side) in terms of functionality...

  1. Add some sysex commands for switching synth modes (Between Fluidsynth soundfonts, MT-32, CM-32, etc...)
  2. Add the ability to use midi over serial (not really needed but it's nice) - EDIT I was wrong you already have that. silly me EDIT
  3. Add Fluidsynth or some other opensource alternative so it can load soundfonts

Feel free to contact me for any questions

Hanging notes/data corruption on GPIO input with certain MIDI sources

Hello, I just installed this for the first time and made my own MIDI adapter for the GPIO pins using your schematic. I hooked up an OLED display and it works properly. Munt is missing some note-off's and it is consistent (always happens in the same places in the same songs). I am using Monkey Island 2 for example on my MiSTer and the music always has hanging notes in the same places that should not be there. The display shows these notes hanging. I have tried different chunk sizes (32 and 2048) and set my frequency to 32000 and the scaler to none. Nothing so far seems to help. Any ideas what could be causing this? I have also played Doom on my MiSTer with my Roland SC-55 mk2 and it works fine with no hanging notes, so that is not the cause. I also tried playing to the mt32-pi from my PC and it also has hanging notes. Thanks for your help.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.