MIDIControl is a versatile MIDI player/recorder with a lot of additional functions. Ready to help when organ-players are unavailable.

Similar projects worth following
When I was asked, if I could help my friend automate a church, I was right in. The issue was: If there is an unexpected event, like funeral, it's usually very tough to get an organist that fast, they usually don't have time. Luckily, many churches have a MIDI synth organ (at least in CZ) by now, so solution came in mind, I created MIDIControl.

MIDIControl is a versatile MIDI player/recorder with many additional and inovative functions.
It can: Play MIDI, Record MIDI, Automatically choose MIDI IN and OUT, Test MIDI ports functionality (loopback) and switch the organ ON/OFF. It also communicates with church LED display, displaying song number, verse etc. for people singing. It has easy-to-use GUI and can be operated locally, using custom remote controller, by any BLE smart device (phone, PC) and also from the main Linux machine. Linux machine being the brains of the system used for communication, playing, recording, storage, connectivity and to enable future scalability/up

This is my highschool project and also entry to the HACKADAY 2020 Wildcard.

Modernization of churches became a bigger trend in past years but is usually tough, due to issues preventing elegant solutions. Proprietary devices, non-existent control systems for certain devices and high prices of other solutions lead me to create my custom solution, MIDIControl.


MIDIControl is a device, made to help priests all around the world with unexpected church ceremonies, when organist can't be reached. The device is capable of playing and recording standard MIDI files. It adds many additional and innovative functions, never seen before. MIDIControl can automatically sense MIDI input and output and select the device IN/OUT accordingly. The output circuitry can also create a loopback, allowing the device to test it's own functionality and report problems. It features a backup power supply for occasions, when the device is unexpectedly disconnected from power - it  automatically turns off all playing notes. It also has a switched constant current output for switching the organ ON and OFF remotely (using optical isolator and SSR for example). I also reversed engineered a protocol for displays, used in churches in Czech Republic, so the device can display useful information for people in the church, like song numbers, verses etc.

Linux PC

The device is mainly an interface between a linux machine and the peripherals. It's communicating with the linux machine over USB C with PD support. Remote control is achieved with custom made remote control (MIDIController) with BLE. It can also be controlled by any BLE enabled device as it's using a well documented protocol. 

All control commands are provided by the linux PC that MIDIControl is connected to. It runs a custom C program doing all the file conversion, communication with both controller and main unit and other intensive tasks. The device can be fully controlled from the linux machine and the communication protocol accounts for scalability. This means, there can be additional functions added (remote access, web access, cooperation with other devices) without editing FW of any of these devices.

MIDIControl Controller

The device needed to be fully controllable remotely, from around the altar. The remote controldemands were also pretty high. It needed to show info about the song, settings of the controller, control the organ, set the verses... on the LED display. I decided to make a custom one, rather than sourcing something, that can be customized to do what i wanted.

I created a simple remote control with alphanumeric keyboard and arrows with enter for navigation. It has a power button and multifunctional button. GUI is displayed on a 1.3" OLED. The controller is BLE enabled, powered with two Li-ion batteries and supports UCPD and charging with up to 2A currents. It's housed in a 3D printed box.

The code

The code is still under development, allthough, free to use if anyone is interrested.

Adobe Portable Document Format - 164.58 kB - 08/25/2020 at 08:45


Adobe Portable Document Format - 188.21 kB - 08/25/2020 at 08:45


Adobe Portable Document Format - 54.03 kB - 08/25/2020 at 08:45


Adobe Portable Document Format - 41.74 kB - 08/25/2020 at 08:45


RAR Archive - 38.31 kB - 08/25/2020 at 08:43


View all 8 files

  • 1 × STM32G431CB
  • 1 × STM32G071CB
  • 2 × RN4870
  • 1 × ATTINY1607
  • 1 × Other passives and many ICs

  • Time for upgrade.

    Vojtěch Vosáhlo08/28/2020 at 12:23 0 comments

    In the working prototype, I implemented communication between main unit and PC with usb over serial bridge. This made it impossible to use on the market MIDI player/recorder applications for linux. I decided to change that and make the device appear as composite device, consisting of CDC class (used for controll data) and MIDI device class. Any existing MIDI player can thus send MIDI bytes to the device, without a need of other tweaks.

  • It's playing!

    Vojtěch Vosáhlo08/28/2020 at 12:18 0 comments

    I took the device for a run, playing ther organ. It's working awesome!

  • Completly assembled

    Vojtěch Vosáhlo08/28/2020 at 08:32 0 comments

    I've assembled PCBs of the main unit and uploaded some sample firmware. It works! Now, I'll start tuning SW and FW.

  • PCBs arrived!

    Vojtěch Vosáhlo08/28/2020 at 08:30 0 comments

    All the designed PCBs arrived. Only thing left is to assemble them :)

View all 4 project logs

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates