MusicBrainopen hardware · est. NL

Component

DX7 FM voice

v0.5.108

InstrumentsVintage

Yamaha DX7: six-operator FM with the factory sounds.

Software v0.5.108

Board overview

Overview

Yamaha DX7: six-operator FM with the factory sounds.

A six-operator FM voice modelled on the Yamaha DX7, with the eight factory ROM banks (1A to 4B) built into the firmware. Bank picks the ROM and Program one of its 32 voices; the display shows the voice name. Bank USR plays your own 32-voice .syx bank, loaded through the DX7 bank dialog for the Teensy; without an upload USR sounds as E.PIANO 1.

Each module is one voice. For chords, use a PolyGroup (the Poly seeds set up eight). Velocity drives the FM envelopes as on the original, so a soft and a hard note differ in tone, not just in level. Coarse and Fine transpose the voice, and the pitch follows V/Oct continuously, so glide works.

Controls

ControlRangeDefaultWhat it does
Bank0 … 80Picks one of the factory banks (1A–4B), or USR for your own .syx.
Program0 … 310The sound within the bank (0–31); the display shows its name.
Coarse-36 … 36 semi0Transposes the voice in semitones.
Fine-100 … 100 ct0Fine tuning in cents.
Level0 … 10.8Output volume.

Ports

PortDirectionSignalWhat it carries
V/OctincvPitch, 1 V per octave; followed continuously, so glide works.
GateingateNote on while high, note off when it falls.
VelincvVelocity 0 to 1, read at the start of the note; drives the FM envelopes.
OutoutaudioMono audio output.

How it works

The voice runs on msfa, Google's music-synthesizer-for-android engine, the same core that Dexed and MicroDexed use: six operators in the 32 DX7 algorithms, the DX7 envelopes and LFO, and the DX7 patch format, all in fixed-point arithmetic. It renders natively at 44.1 kHz in blocks of 64 samples, so no resampler is needed. The large lookup tables are built once and shared by all instances.

msfa only knows a note's pitch at the moment it is struck. To let the pitch follow V/Oct afterwards (glide, bends), the module sends the full difference between the struck note and the current V/Oct through the internal pitch bend. The browser simulator runs the same msfa core compiled to WebAssembly.

Runs on

  • Teensy 4.1 (the MusicBrain Brain): about 1.3 % CPU per instance (one note, default settings), measured on firmware 0.5.108.
  • The browser: the editor's simulator runs the same C++ code as WebAssembly, so what you hear while patching is what the Brain plays.

Try it

In the editor's example set: 🎹 DX7 poly ×8, 🎹 DX7 (6-op FM), 🎚️ DX7 + FET comp, 🎚️ DX7 + Diode comp, 🔁 DX7 + Digital echo, 🌊 DX7 + BBD chorus, 〰️ DX7 + Tremolo, 💡 DX7 + Vibe, 🌪️ DX7 + Rotary, 🎼 DX7 ×8.

Editor: https://editor.musicbrain.nl

Sources & licences

  • msfa (music-synthesizer-for-android) by Google, Apache License 2.0; vendored in firmware/lib/msfa. The same engine is used by Dexed and MicroDexed.
  • Factory voices: the eight original Yamaha DX7 ROM cartridges (1A–4B, © Yamaha), included for compatibility. DX7 is a trademark of Yamaha Corporation; this module is modelled on the instrument and is not a Yamaha product.
  • The MusicBrain wrapper is MIT licensed.

Versions

  • 0.5.51: the sounding note follows V/Oct, so glide plays the right notes (before, it stuck on the previous note).
  • 0.5.37: the eight factory ROMs built in (Bank 1A–4B plus USR).
  • 0.5.36: first version: one DX7 voice on the msfa engine, with a bank upload frame.