You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
probonopd c7599c5511
Support multiple voices through Program Change MIDI messages
3 years ago
.github/workflows Add 'usbspeed=full', fixes USB MIDI keyboard issues 3 years ago
Synth_Dexed@86dba9826c Move RPi code from Synth_Dexed to MiniDexed, thanks @rsta2 3 years ago
circle-stdlib@47d9deb580 Mirror from https://github.com/rsta2/circle/issues/274#issuecomment-1029392371, thanks @rsta2 3 years ago
src React to Progam Change MIDI messages, part of #11 3 years ago
.gitignore Ignoring *.img in git commit. 3 years ago
.gitmodules Apply patch by @rsta2 3 years ago
README.md Support multiple voices through Program Change MIDI messages 3 years ago
build.sh Fix message [ci skip] 3 years ago

README.md

MiniDexed

Dexed is a FM synthesizer closely modeled on the famous DX7 by a well-known Japanese manufacturer. MiniDexed is a port to run it on a bare metal Raspberry Pi (without a Linux kernel or operating system). This is a work in progress. Contributions are highly welcome.

TODO

Contributions are highly welcome.

  • Get Synth_Dexed to build with circle-stdlib
  • Upload SD card contents to GitHub Releases
  • Get it to build for and boot on a Raspberry Pi 4
  • Get it to react to USB MIDI
  • Get it to react to MIDI via Raspberry Pi 4 GPIO
  • Get it to produce some sound on the headphone jack
  • Get it to produce some sound produced by Dexed
  • Load a default (hardcoded) sysex
  • Get it to build for and boot on a Raspberry Pi 3
  • Get it to build for and boot on a Raspberry Pi 2
  • Get it to build for and boot on a Raspberry Pi 1
  • Support multiple voices through Program Change MIDI messages
  • Add functionality for loading .syx files (e.g., from Dexed_cart_1.0.zip)
  • Get 8 Dexed instances to run simultaneously (like in a TX816) and mix their output together
  • Add a way to configure each Dexed instance
  • Allow for each Dexed instance to be stereo shifted
  • Add reverb effect

I am wondering whether we can run multiple Dexed instances, in order to recreate basically an open source equivalent of the TX802 (8 DX7 instances without the keyboard in one box).

Usage

  • Download from GitHub Releases
  • Unzip
  • Put the files into the root directory of a FAT32 formatted partition on SD/microSD card
  • Put SD/microSD card into Raspberry Pi 1, 2, 3 or 4 (Zero and Zero 2 can probably be used but need HDMI or a supported i2c DAC for audio out)
  • Attach headphones to the headphone jack using sounddev=sndpwm in cmdline.txt (default)
  • Alternatively, attach a PCM5102A or PCM5122 based DAC and select i2c sound output using sounddev=sndi2s | sndhdmi in cmdline.txt
  • Alternatively, attach a HDMI display with sound and select HDMI sound output using sounddev=sndhdmi in cmdline.txt (this may introduce slight latency)
  • Attach a MIDI keyboard via USB
  • Boot
  • Stat playing

Building locally

E.g., to build for Raspberry Pi 4 on a Ubuntu 20.04 build system, you can use the following example. See build.yml for complete build steps that create versions for Raspberry Pi 1, 2, 3,and 4 in 32-bit and 64-bit as required.

RPI=4

git clone https://github.com/probonopd/MiniDexed
cd MiniDexed

# Recursively pull git submodules
git submodule update --init --recursive

# Install toolchain
wget -q https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf.tar.xz
tar xf gcc-arm-*-*.tar.xz 
export PATH=$(readlink -f ./gcc-*/bin/):$PATH

# Build circle-stdlib library
cd circle-stdlib/
./configure -r ${RPI} --prefix "aarch64-none-elf-"
make -j$(nproc)
cd ..

# Build MiniDexed
cd src
make -j$(nproc)
ls *.img
cd ..

# Get Raspberry Pi boot files
cd ./circle-stdlib/libs/circle/boot
make
make armstub64
cd -

# Make zip that contains Raspberry Pi 4 boot files. The contents can be copied to a FAT32 formatted partition on a microSD card
mkdir -p sdcard
cp -r ./circle-stdlib/libs/circle/boot/* sdcard
mv sdcard/config64.txt sdcard/config.txt
rm -rf sdcard/config32.txt sdcard/README sdcard/Makefile sdcard/armstub sdcard/COPYING.linux
cp ./src/*img sdcard/
zip -r MiniDexed_Raspberry_Pi_${RPI}.zip sdcard/*

# Optionally, create a RPi image. This can be written to a microSD card using tools like Etcher or dd
sudo apt install --yes  mount parted
IMG="`date +%Y-%m-%d`_minidexed-RPi${RPI}.img"
dd of="${IMG}" seek=50MiB bs=1 count=0
sudo parted "${IMG}" mktable msdos
sudo parted "${IMG}" mkpart primary fat32 2048s 100%
DEV=`sudo losetup --find --partscan --show "${IMG}"`
sudo mkfs.vfat -F 32 -n BOOT "${DEV}p1"
mkdir boot
sudo mount "${DEV}p1" boot
sudo cp sdcard/* boot
sudo umount boot
sudo losetup -d "${DEV}"
rm -r boot

Acknowledgements