Code Monkey home page Code Monkey logo

minidexed's Introduction

MiniDexed Github Build Status

minidexed

MiniDexed is a FM synthesizer closely modeled on the famous DX7 by a well-known Japanese manufacturer running on a bare metal Raspberry Pi (without a Linux kernel or operating system). On Raspberry Pi 2 and larger, it can run 8 tone generators, not unlike the TX816/TX802 (8 DX7 instances without the keyboard in one box). Featured by HACKADAY, Adafruit, and Synth Geekery.

Demo songs

Listen to some examples made with MiniDexed by Banana71 here.

Features

  • Uses Synth_Dexed with circle-stdlib
  • SD card contents can be downloaded from GitHub Releases
  • Runs on all Raspberry Pi models (except Pico); see below for details
  • Produces sound on the headphone jack, HDMI display or audio extractor (better), or a dedicated DAC (best)
  • Supports multiple voices through Program Change and Bank Change LSB/MSB MIDI messages
  • Loads voices from .syx files from SD card (e.g., using getsysex.sh or from Dexed_cart_1.0.zip)
  • Menu structure on optional HD44780 display and rotary encoder
  • Runs up to 8 Dexed instances simultaneously (like in a TX816) and mixes their output together
  • Allows for each Dexed instance to be detuned and stereo shifted
  • Allows to configure multiple Dexed instances through performance.ini files (e.g., converted from DX1, DX5, TX816, DX7II, TX802)
  • Compressor effect
  • Reverb effect
  • Voices can be edited over MIDI, e.g., using the synthmata online editor (requires additional hardware)

Introduction

Video about this project by Floyd Steinberg:

YouTube Video about MiniDexed (Floyd Steinberg)

System Requirements

  • Raspberry Pi 1, 2, 3, 4, or 400. Raspberry Pi Zero and Zero 2 can be used but need HDMI or a supported i2s DAC for audio out. On Raspberry Pi 1 and on Raspberry Pi Zero there will be severely limited functionality (only one tone generator instead of 8)
  • Raspberry Pi 5 can be used but currently support is experimental: HDMI sound and USB Gadget mode are not available yet, and it is not clear if there are implications for cooling from running MiniDexed. Also, MiniDexed is currently not taking advantage of the higher processing power of the Raspberry Pi 5 yet. Hence, you may consider using one of the less expensive, older Raspberry Pi boards for your first build.
  • A PCM5102A or PCM5122 based DAC, HDMI display or audio extractor for good sound quality. If you don't have this, you can use the headphone jack on the Raspberry Pi but on anything but the Raspberry 4 the sound quality will be seriously limited
  • Optionally (but highly recommended), an LCDC1602 Display (with or without i2c "backpack" board) and a KY-040 rotary encoder

Usage

  • In the case of Raspberry Pi 4, Update the firmware and bootloader to the latest version (not doing this may cause USB reliability issues)
  • Download from GitHub Releases
  • Unzip
  • Put the files into the root directory of a FAT32 formatted partition on SD/microSD card (Note for small SD cards which are no longer sold: If less than 65525 clusters, you may need to format as FAT16.)
  • Put SD/microSD card into Raspberry Pi 1, 2, 3 or 4, or 400 (Zero and Zero 2 can be used but need HDMI or a supported i2c DAC for audio out)
  • Attach headphones to the headphone jack using SoundDevice=pwm in minidexed.ini (default) (poor audio quality)
  • Alternatively, attach a PCM5102A or PCM5122 based DAC and select i2c sound output using SoundDevice=i2s in minidexed.ini (best audio quality)
  • Alternatively, attach a HDMI display with sound and select HDMI sound output using SoundDevice=hdmi in minidexed.ini (this may introduce slight latency)
  • Attach a MIDI keyboard via USB (alternatively you can build a circuit that allows you to attach a "traditional" MIDI keyboard using a DIN connector, or use a DIN-MIDI-to-USB adapter)
  • If you are using a LCDC1602 with an i2c "backpack" board, then you need to set LCDI2CAddress=0x27 (or another address your i2c "backpack" board is set to) in minidexed.ini
  • Boot
  • Start playing
  • If the system seems to become unresponsive after a few seconds, remove usbspeed=full from cmdline.txt and repeat (details)
  • Optionally, put voices in .syx files onto the SD card (e.g., using getsysex.sh)
  • See the Wiki for Menu operation
  • For voice programming, use any DX series editor (using MIDI sysex), including Dexed
  • For library management, use the dedicated MiniDexedLibrarian software
  • If something is unclear or does not work, don't hesitate to ask!

Pinout

All devices on Raspberry Pi GPIOs are optional.

Raspberry Pi Pinout/GPIO Diagram

Please see the wiki for more information.

Downloading

Compiled versions are available on GitHub Releases. Just download and put on a FAT32 formatted SD card.

Building

Please see the wiki on how to compile the code yourself.

Contributing

This project lives from the contributions of skilled C++ developers, testers, writers, etc. Please see https://github.com/probonopd/MiniDexed/issues.

Discussions

We are happy to hear from you. Please join the discussions on https://github.com/probonopd/MiniDexed/discussions.

Documentation

Project documentation is at https://github.com/probonopd/MiniDexed/wiki.

Acknowledgements

This project stands on the shoulders of giants. Special thanks to:

Stargazers over time

Stargazers over time

minidexed's People

Contributors

arsamus avatar dcoredump avatar dialtr avatar diyelectromusic avatar donluca avatar geomaciolek avatar jenntoo avatar probonopd avatar rsta2 avatar smuehlst 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

minidexed's Issues

Add a build for Raspberry 3

The latest build contains a version for Raspberry 3 in addition to Raspberry Pi 4.
I could not get it to boot on the Raspberry 3 yet, though.

Support Serial MIDI

Currently we can play notes on a MIDI controller (keyboard) and (for testing and debugging) USB (QWERTY) keyboards.

In addition, we would like to support Serial MIDI, to connect older MIDI keyboards that don't come with USB using a circuit like this:

image

Image Source: https://hackaday.com/tag/6n137/

Connect the wire labeled "RX" to GPIO15 on the Raspberry Pi. This is a SoC number, not the position on the header (see this).

Compressor, Reverb on/off

Should we have menu entries to switch effects like Compressor, Reverb on/off?

Suggested menu structure:

  • TG1
  • ...
  • TG8
  • Effects
    • Compressor
      • On | Off
    • Reverb
      • On | Off
      • Edit Reverb
        • Size
        • High damp
        • Low damp
        • Low pass
        • Diffusion
        • Send

Supporting RTP-MIDI

RTP-MIDI (also known as AppleMIDI) is a protocol to transport MIDI messages within RTP (Real-time Protocol) packets over Ethernet and WiFi networks. It is completely open and free (no license is needed), and is compatible both with LAN and WAN application fields.

I imagine this could be quite useful to, e.g., send sysex from a computer to the Raspberry Pi and to have the Raspberry Pi driven by sequencers on a computer, phone, or tablet, especially since USB gadget mode is not available on Circle (although a Raspberry Pi PIco could probably be used to act as a USB MIDI to serial converter).

The AppleMIDI library contains C++ code for Arduino. It compiles on Arduino, MacOS (XCode) and Windows (MSVS).

I wonder how much effort it would be to port it to Circle.

In case the effort is prohibitive, we might want to use an ESP8266 as a WLAN-RTP-MIDI-to-Serial-MIDI bridge, but using wired Ethernet would be better to reduce latency.

Performance sysex (PCED)

Our objective is to ultimately run multiple Dexed instances at the same time (#12).

Sound generators like the TX816 and TX802 use the performance sysex format. We should support it.

GPIO pinout for external devices

As suggested in rsta2/circle#280 I investigated the GPIO pinout of the (already known) external devices, which can be connected to a Raspberry Pi, when using MiniDexed and generated a list as a suggestion (see attached).

Two comments:

  • The default setting for the LCD outputs RS and RW has changed. Would need to be updated in config.cpp and minidexed.ini.

  • We should enable the system option USE_PWM_AUDIO_ON_ZERO in build.sh. This allows to connect earphones or an amplifier to the Raspberry Pi Zero (2) via GPIO12/13 using a small external circuit.

pinout.txt

[Idea] Control Voltage input

Over at Reddit, someone suggested adding CV control:

I see the potential for a killer eurorack module !

Even with a minimal implementation, like CV for pitch and algorithm I see a very interesting thing indeed.

Unlike other minicontrollers or MCUs nowadays, Raspberry Pi does not have a built-in Analog-to-Digital Converter (ADC) Circuit.

So the easiest solution might be to built a CV-to-USB-MIDI (e.g., using a Pro Micro ATmega32U4) or CV-to-3.3V-Serial-MIDI (e.g., using a Nano) circuit using an Arduino and feed the MIDI into the Raspberry Pi.

For this, we would need MiniDexed to listen to more than one MIDI input (USB and Serial and/or 2 USB) at the same time. Is this possible @rsta2?

Freezing a few seconds after boot

I'm using an RPi 3 (FAT32) with a USB MIDI controller, but it seems to freeze after about 5-10 seconds whether the controller is plugged in or not. It sounds great right up until then, though :)

Is there any way to do diagnostics/logging?

As an aside, I'm really happy to see someone working on this. I've been checking around for exactly this (headless dexed on RPi) every few months and was going to put in a feature request with dopefish to see if he would consider adding it to mt32-pi when i saw there was already a ticket for it. Then, I saw your comment about this project in the ticket comments! Exciting stuff.

Show patch name on HD44780 display

Inexpensive HD44780 displays like this one are supported in Circle.

Looks like the original DX7 uses a similar 16x2 display.

image

Although I wonder how to set contrast on this display when not used with such an i2c board that also includes a potentiometer.

cc1: error: unknown value 'armv7-a' for '-march'

Trying to make the aarch64 SD card contents, running into:

https://github.com/probonopd/MiniDexed/runs/5079236408?check_suite_focus=true#step:7:42

make -C armstub armstub7-rpi4.bin
make[1]: Entering directory '/home/runner/work/MiniDexed/MiniDexed/circle-stdlib/libs/circle/boot/armstub'
aarch64-none-elf-gcc -march=armv7-a -DGIC=1 -DBCM2710=1 -DBCM2711=1 -o armstub7-rpi4.o -c armstub7.S
cc1: error: unknown value 'armv7-a' for '-march'
cc1: note: valid arguments are: armv8-a armv8.1-a armv8.2-a armv8.3-a armv8.4-a armv8.5-a armv8.6-a; did you mean 'armv8-a'?
make[1]: *** [Makefile:13: armstub7-rpi4.bin] Error 1
make[1]: Leaving directory '/home/runner/work/MiniDexed/MiniDexed/circle-stdlib/libs/circle/boot/armstub'
make: *** [Makefile:[48](https://github.com/probonopd/MiniDexed/runs/5079236408?check_suite_focus=true#step:7:48): armstub] Error 2
Error: Process completed with exit code 2.

Reverb and other effects

Looks like https://codeberg.org/dcoredump/MicroDexed/ has effects like this. Do you think these could be put into Synth_Dexed and hence made usable for MiniDexed @dcoredump?

Let's think about how we should best make use of the 4 cores of the Raspberry Pi 4 for tasks like

  • Running multiple Dexed instances (ideally at least 8)
  • Running effects like Reverb
  • Eventually, running some sort of user interface (in addition to MIDI sysex commands)

Is there a way to periodically output the CPU usage of each core @rsta2? We should find out how CPU intensive the various things are and how to best split them up across CPU cores.

Optmize config.txt settings

Should we do the following by default?

[all]
boot_delay=0
disable_splash=1
force_eeprom_read=0
gpu_mem=16
disable_overscan=1

[pi4]
# Optimized frequency settings for lower energy use/temperature on Pi 4
arm_freq=600
arm_freq_min=100
gpu_freq=100
over_voltage=-16
over_voltage_min=-16

Optimize rotary encoder movement

Currently, If two clicks are needed for a single movement. mt32-pi.cfg has this information:

# Set the rotary encoder type (if used by control scheme).
#
# Different rotary encoders may complete different fractions of a Gray-code
# cycle per detent ("click").
#
# If four clicks are needed for a single movement, try "quarter".
# If two clicks are needed for a single movement, try "half".
#
# Values: quarter, half, full*
encoder_type = full

Code is here.

Next step: Try mt32-pi.cfg with my rotary encoder.

Build for Raspberry Pi 2 fails

Trying to build a 32-bit version for Raspberry Pi 2 too but running into

config.status: executing depfiles commands
make[2]: Leaving directory '/home/runner/work/MiniDexed/MiniDexed/circle-stdlib/build/circle-newlib'
make[1]: Leaving directory '/home/runner/work/MiniDexed/MiniDexed/circle-stdlib/build/circle-newlib'
make[1]: *** [Makefile:879: all] Error 2
make: *** [Makefile:17: newlib] Error 2
Error: Process completed with exit code 2.

https://github.com/probonopd/MiniDexed/runs/5265872462?check_suite_focus=true#step:6:1184

It looks like some issue with circle-newlib. @smuehlst can it be built for 32-bit systems such as Raspberry Pi 2?

Maybe I am missing some necessary "cleanup" steps after having built the 64-bit versions?

Revisit final sound processing stages

Continuation from #69 (comment):

Ah yes, I tried the compressor in the VLC media player, and it's getting louder there, when it is switched on. As I read it, @dcoredump wants to re-work the whole final signal processing stage (use floats instead of int16_t, pan, mixer, compressor, reverb), which makes absolutely sense to me. At the moment, each TG has its own compressor, and as I said earlier, my pan processing + mixer is not ideal. There is much room for improvement in it.

This ticket is a reminder that we revisit the way we set up and use limiter/anti-clipping, compressor, pan processing, and mixer once @dcoredump has re-worked the final signal processing stage. No hurries, just so that it won't be forgotten.

Stereo panning

Implement Stereo panning for each Dexed instance.

This is needed to create the characteristic "fat" sound known from the TX816 and the TX802.

Voice initialize function

Reading

FM Theory & Applications: By Musicians for Musicians
by Dr. John Chowning and David Bristow
ISBN 4636174828

there are lots of example voices that help one to learn FM synthesis. They start by using the "VOICE INIT" button on the DX7. "This function sets up the basic voice data for creating new voices".

Maybe we should have a similar function, e.g., under

TG X -> Edit Voice -> Initialize

It should load the initialization default values:

https://github.com/asb2m10/dexed/blob/11ae4d7ef597b2d52f45e59ab56b342252d0bd88/Source/PluginData.cpp#L230-L239

void DexedAudioProcessor::resetToInitVoice() {
    const char init_voice[] =
      { 99, 99, 99, 99, 99, 99, 99, 00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7,
        99, 99, 99, 99, 99, 99, 99, 00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7,
        99, 99, 99, 99, 99, 99, 99, 00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7,
        99, 99, 99, 99, 99, 99, 99, 00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7,
        99, 99, 99, 99, 99, 99, 99, 00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7,
        99, 99, 99, 99, 99, 99, 99, 00, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 1, 0, 7,
        99, 99, 99, 99, 50, 50, 50, 50, 0, 0, 1, 35, 0, 0, 0, 1, 0, 3, 24,
        73, 78, 73, 84, 32, 86, 79, 73, 67, 69 };

LCD: Reverse click and double-click

In computer interfaces, double-click is for opening stuff. So I think it would be more natural to double-click in order to go down in the menu hierarchy ("open a submenu"), and to single-click to go up ("close the submenu"). Wdyt @rsta2?

Support selecting patches using MIDI Bank Change and Program Change messages

Many USB keyboards can send Bank LSB and Bank MSB Changes, and Program Changes. If we put several .syx files on the microSD card, then we might use Bank LSB and Bank MSB Changes to select those .syx files, and Program Changes to select patches.

(Once #8 is implemented I can say which MIDI messages we need to react to.)

[Idea] Use human readable format for storing sysex

Formats like VCED and PCED are made to be machine-readable, not so much human-readable. VMEM and PMEM even more so; they were designed around memory constraints of the early 80s.

So the question is, would it be a good idea to introduce human-readable formats (e.g, "VINI" and "PINI")?

Since the .ini data format is widely used and natively supported in Dexed, I was thinking along these lines:

[Performance]
Performance_Name=
...

[INST 1]
Voice_Number=
Detune=
Note_Limit_Low=
Note_Limit_High=
...

[INST 2]
...

Also see page 29 of the TX-802 Owners Manual.

Table Add-10 in DX7II_MIDI_DataFormat.pdf mentions "PERFORMANCE Parameters (PCED, PMEM format)". Those are not for the TX-802 but possibly are similar? https://www.manualslib.com/manual/779968/Yamaha-Tx81z.html?page=74#manual mentions "Performance Edit Parameters (PCED)".

And while we are at it, we might also want to convert those voice sysex (VCED, VMEM) into something more human-readable like

[Voice]
Voice_Name=
Algorithm_Selector=
Feedback_Level=
Osc._Sync.=
Transpose=

[OP 1]
...

[OP 2]
...

NOTE: We may want shorter names for those (ideally standard names), e.g., "ALS" for "Algorithm_Selector" and "FBL" for Feedback_Level. Also see page 30 of the TX-802 Owners Manual and table Add-8 in DX7II_MIDI_DataFormat.pdf.

What do you people think?

Optimize CHUNK_SIZE [ _HDMI ] parameter

@rsta2 wrote

The CHUNK_SIZE [ _HDMI ] parameter should be tuned and decreased for smaller latency. Maybe it should be configurable for the user later

Can I help this tuning by testing on various Raspberry Pi models? I have Zero, 1, 2, 3, 4.
How exactly would one tune/test this?

Real-time parameter control

It would be useful if changes to voice parameters would have immediate effect on already-playing notes.
This would be especially neat in combination with #63.

For some parameters this is already the case (e.g, volume), but apparently not for all of them. More investigation needed.

Do you perhaps know more about this subject @dcoredump?

Center setting for stereo

Right now "center" seems to be 9th dot from the left = 8th from the right?

For me it would feel more natural to have a center ("middle") position for stereo panning, with the same number of dots left and right from the selected setting (maybe even marked with ":" instead of "." to make it easy to spot).

Wdyt @rsta2?

Assign/"learn" MIDI CCs

Update: See this post below for a concise user story and a rough idea of how to implement this.


It would be nice if we could assign/"learn" MIDI CCs (knobs and sliders on MIDI hardware controllers) to manipulate Dexed voice parameters.

E.g., these guys:

image

(Example shows the Nektar Impact LX61+.)

The sliders and knobs all send CCs with values from 0 to 127, and the buttons toggle between 0 and 127: B0 xx 00 ... B0 xx 7F with xx being different for each slider/knob/button. For xx = 07 it is volume, which is already implemented.

You would select, via the LCD, a voice, then select "Edit params", then scroll through the available Dexed parameters using the rotary encoder, and while one is selected, move a slider/knob/button on the MIDI controller, which would make MiniDexed react to this slider/knob/button (=MIDI CC). Then you would rotate the roraty encoder to go to another parameter, again wiggle another slider/knob/button ont the MIDI congroller, and so on. (The assignment should be written to an INI file in order to survive a reboot.)

Imagine that. A "DX7 with more than one Data Entry slider". Isn't that what people would have wanted already back in the day? ;-)

For those without a fancy MIDI controller with many siders and knobs, you could select a Dexed parameter on the LCD UI, then click the rotary encoder button, and then rotate the rotary encoder to manipulate the value of the selected Dexed parameter that way. (Edit: @rsta2 has implemented this in https://github.com/probonopd/MiniDexed/pull/61)]

Notes get stuck while quickly playing with USB MIDI keyboard controller

I open this separate issue, because we will probably have to deal with this problem for a while.

Problem description

When quickly playing on an USB MIDI keyboard controller, connected to a Raspberry Pi 1-3 or Zero (Raspberry Pi 4 is not affected), notes can get stuck, i.e. the respective tone is played forever, even after releasing the key. This can be reproduced with continuous voices (e.g. organ) playing rapid glissando for a while on the following keyboard:

  • M-AUDIO Keystation Mini 32 Mk3

Workaround

The problem may be reduced or solved with the following option in the file cmdline.txt on the SD card:

usbspeed=full

This switches the whole USB from high speed (480 MBps) to full speed (12 MBps). The most USB MIDI controllers do only support full speed, so this is generally not a problem, but a few other keyboards do require high speed mode to work. The workaround does not work there and cannot applied by default.

Transaction failed (status 0x202), Transaction failed (status 0x402)

Using M-Audio Keystation Mini 32 MK3, getting Transaction failed (status 0x202), Transaction failed (status 0x402) when playing many notes at once or in quick succession.

Raspberry Pi 2 and 3 with sndhdmi

  • Transaction failed (status 0x202)
  • Transaction failed (status 0x402)

Raspberry Pi 2 and 3 with sndpwm

  • Transaction failed (status 0x402)

As a result, notes get not played or notes get sustained. Looks like individual key down/up events are missed.

To reproduce, play e.g. quick glissandos.

Shortcut for switching between OPx

It would be neat if we could have a shortcut for switching between OPx, like we have a shortcut for switching between TGx.

We could use the same "gesture": keep-button-pressed-and-rotate-knob. If there is "TGx" in the upper-right corner of the screen, it would go through the TGs (as it is now). If there is "OPx" in the upper-right corner of the screen, it would go through the OPs (new).

Wdyt @rsta2

Support more than one MIDI device

Currently only one MIDI USB device is being used. minidexed.cpp has

(CUSBMIDIDevice *) CDeviceNameService::Get ()->GetDevice ("umidi1", FALSE);

What would we need to do if we wanted to support more than one USB MIDI device?
Use cases might include

  • USB MIDI foot controllers
  • USB MIDI sequencers
  • Multiple keyboards
    etc.

[Idea] Raspberry Pi hat PCB

klonk2905 wrote over at Reddit:

Hey, I'm willing to collaborate on the hardware part.

A "hat" with decent power supply, quality DAC, and dedicated sliders/controls will be top notch at some point, and that is something I can help with.

Let's collect the ideas and requirements here.

Basically a https://github.com/gmcn42/clumsyMIDI but with 1602 LCD and rotary encoder.

Record midi and/or wav

Would it be possible to record midi and/or wav to microSD and/or USB storage, at least on the more powerful models?

UI with a HDMI-Touch-Screen?

What about adding (later) a UI for a Touchscreen (connected via HDMI/USB), so voices and setup can be configured with?

Add HDMI audio out

If not, the code should be dropped.

I personally don't need this because my experience is that an external HDMI->Audioconverter adds too much latency.

Some voices are not played

Ignore Bank Select and Program Change numbers that are not supported

I didn't find this exact information in DX documentation but the "MX49/MX61 Data List" PDF says:

Bank Select and Program Change numbers that are not supported by Yamaha will be ignored.

@rsta2 you are already doing this for the rotary encoder and it seems like we should be doing the same for MIDI Bank Select and Program Change messages.

Output MIDI messages for debugging and development

Let's output MIDI messages to the screen and/or to serial for debugging and development.

We will also need this if we want MiniDexed to act upon special MIDI messages outside of Synth_Dexed.

Since MIDI is processed inside Synth_Dexed, would we need a callback of some sort in order to get the MIDI messages?

@dcoredump wdyt?

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.