Play midi files on the motherboard speaker/buzzer
Switch branches/tags
Nothing to show
Clone or download
Cqoicebordel Merge pull request #1 from Spotrealms/master
Add additional required package
Latest commit 249ee52 Jul 16, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
LICENSE Initial commit Apr 24, 2016 Add additional required package Jul 16, 2018
mid2beep Correct spacing and CLI arguments Apr 24, 2016


Play midi files on the motherboard speaker/buzzer


Do whatever you want with this, just keep my pseudo associated with it.


  • Have a speaker in your PC. I'm not talking about the one to listen to music, but the one that beeps when you do something wrong.
  • Have beep, midi2abc, and bc installed (they should be in the repo of your Linux distro, the second under the name abcmidi)


Copy the script mid2beep in a folder in your $PATH (or any folder you want to run this script from), and make it executable (chmod +x mid2beep)

And that's all !


mid2beep ships with good default values (I hope). So all you have to do is to run it with mid2beep -m=/home/midifile.mid and everything should be fine.


The program works the best with monophonic midi files. But you may be able to have something nice with polyphonic files too. You'll just have to choose the right channel for it. By default, the channel 1 is used. You can use the option -c=n or --channel=n to choose the channel you want.
To see the available channels, you might want to use the -i or --info option, that prints some infos about the file you are trying to use, including a list of all channels.
If you want to script it, all that output of infos might not suit you. You can disable the progress info with -p or --noprogress, and you can disable the output of the beep command using -b or --hidebeep. Or maybe, you are working on a piece, and so, you don't want to listen to each iteration, so you can disable the sound by using -q or --quiet.
Finally, maybe the tune doesn't have the right speed to your ears. It should automagically detect the right speed, but you might want to adjust the speed manually. In that case, use -s=n or --speed=n. Note that n isn't necessarily an integer (eg. 0.5 is half speed)

When using polyphonic files, I used the brute force method to render them : play only the first of two notes that start at the same time. It can create issues of rythm, but hey, it's a good starting point :)