Not to take anything away from the original posting, but if performance is a goal, this may be interesting.
This seems to be for an Android app. But is there a variant that works as a LV2 plug-in or even a stand alone Linux app?
I take it this is the Android app: https://play.google.com/store/apps/details?id=com.levien.syn...
Would be great to have in F-Droid repo.
Thanks for coding such an important tool!
DX7 fans (like me) already know your implementation, it is famously used by the Dexed software. Thanks raphlinus, for making the world a better place.
Kudos to the Supercollider clone writer, but thank you so much for making the basis of a practical tool that musicians can use!
I guess if I get it working for my dev env (Nexus 5X) I'll send you a PR .. you planning on working on this some more?
Chowning's "Sabelithe" (on Spotify and Youtube) makes really cool use of synthesis to transform percussion elements into melodic elements over the progression of the piece.
"This is a program I first wrote for my own use way back in 1986 on my spiffy new Mac 512k, that somehow ended up enough in demand that it became a so-called "product", and actually got rated as a "5 Mouse" program by MacUser Magazine. It lets you use the computer itself as a musical instrument, played by moving the mouse with one hand while you control dozens of available musical parameters from the Mac's "qwerty". It's a great musical idea generator, ear trainer, compositional tools, and improvising instrument. The software does a lot of harmony handling for you (you control the variables it uses for this), so it's useful - as are all "real instruments"at any level of musical training, experience, or skill, from beginning through professional."
There's a neat little program called SPEAR for creating sounds using additive synthesis:
“The Yamaha DX7 is an FM synthesis-based digital synthesizer and electronic keyboard manufactured by the Yamaha Corporation from 1983 to 1989. It was the first commercially successful digital synthesizer.”
“The very earliest digital synthesis experiments were made with computers, as part of academic research into sound generation. In 1973, the Japanese company Yamaha licensed the algorithms for frequency modulation synthesis (FM synthesis) from John Chowning […]”
I once wrote an implementation of this in C++. It does sound different than the old Yamaha-style FM. But I was never able to make it into a finished 'synth' product as a VST or whatever.
So you could make something similar and get sound out of it in a couple hours, but you'd have to come up with your own presets, or you could spend a few months figuring out how the preset parameters map to actual values like envelope amplitude, timing, modulation levels, et cetera. This project is the hard version, which (apparently, since I don’t have Supercollider fired up at the moment, and my DX synth is in storage) correctly gets all the envelopes and modulation right.
Curious to know how close it is, e.g., does it respond to aftertouch? Not sure about that. Most of the DX presets I'm familiar with have some fairly aggressive aftertouch responses.
If you, as a DX7 clone developer, want to make happy these 2 or 3 people too, please, use fixed point calculations, resampling, real ROM data and so on :)
I considered doing a super-accurate "dirty" mode but ultimately decided against, as most of these changes would make it sound worse. One important subtlety is that after the DAC (which is just sample-and-hold) there's a Sallen-Key low-pass filter tuned at about 16kHZ, to round off the worst of the DAC artifacts. Many digital replicas (my own included) miss this, which gives a harsh brittleness to the sound.
I know dexed added multiple bit depths (this work was done after mine, and I haven't followed their fork carefully). I don't know about the other aspects of the signal chain though.
I get where you are coming from, though, and think it would be a good project for a super-dedicated contributor.
You mean IC54 and IC56? I noticed them on the circuit but didn't know it was tuned SO LOW! Wasn't the sample rate over 50KHz for each voice? 16Khz looks overkill for such sample rate. I know this is a time-division-multiplexed DAC so pehaps the time division multiplexing generates even more artifacts of their own?
I would love to see a circuit that replaces the whole DAC section with 16 separate DACs that then mix their sound on the analog domain...
Note that the output wasn't 12-bit. There was a 12-bit DAC chip, but additionally to those 12 bits there are additional bits that are fed to another DAC (implemented using resistors) in charge of doing "gain-ranging" (that is, adjusting the output level of that channel). Thus the dynamic range available was much higher than just 12-bit.
>Most of software versions of DX7 don't take these nuances in account which makes some DX7 purists upset. If you, as a DX7 clone developer, want to make happy these 2 or 3 people too, please, use fixed point calculations, resampling, real ROM data and so on :)
On the other hand, i play the hardware DX7 (the real thing) plus a DX7IIFD, and i'd rather have the developers produce a cleaner version of the DX7, with a much larger/longer sine table, and more nuances to the sound. On the 'net, many claim the DX1 and DX5 sounded much more cleaner (not just "less background noise" but "sweeter sound"); i wish we could aim for that.
By the way, Yamaha FS1r is the only hardware FM synth that I currently have. Several years ago I've implemented singing synthesis after reading Yamaha's patent on FS1r. The synthesis was implemented on a specialized multicore chip and we even showed the result to Yamaha representatives. They liked the sound, but they were not interested in the chip. Anyway, it's a different story :)
The DX7 was the first affordable fully digital synthesizer on the market. It appeared in 1983 in a world of mostly-analog synthesizers that had polyphony limited to 8 voices (at hugely expensive prices for an 8 voice model!) and a limited amount of presets. A typical popular polysynth of the era would be the Prophet-5, with 5 voices.
Also, only the most expensive analog polysynths were velocity sensitive, and only one had aftertouch (the sublime Yamaha CS-80 and the Yamaha GX1).
Finally, the analog synthesizers that had no DCO (digitally controlled oscillators) could have some tuning problems due to temperature changes, etc.
So in 1983 this DX7 synthesizer appears on the market, offering 16 (sixteen!) voices and 32 presets (expandable to 64 by use of a ROM cartridge) plus this new stuff called MIDI (that only two or three synths supported by that time). The typical analog substractive polysynth had two oscillators per voice (remember, 5 voices was "good", 8 voices was "deluxe" in the early 80s), one envelope generator per voice, and one filter. This DX7 thing had 6 oscillators per voice (total = 96 oscillators) and 6 envelope generators per voice (total = 96 EGs); but no filters.
Also, by that time almost no true synthesizer could give you a decent (credible) electric piano or flute sound. The DX7 could do very decent electric pianos, and a very credible flute sound was included as well.
Thus this was a monster synth that sold like hot cakes, so much, that Yamaha couldn't keep up with demand and many musicians had to wait for one...
The DX7 wasn't the ultimate Yamaha, however; The DX1 was the deluxe model, with polyphonic aftertouch, 32 voices, balanced outputs, weighted keys and a much more comprehensive interface. Later the DX5 was released -- a stripped-down DX1, without the nice interface and no poly aftertouch.
The DX7 was used in massive amounts of songs until the people got tired of the presets ("why they didn't program it?" is another story worthy of an article). Later the Roland D50 appeared, with easier-to-create sounds, and the mainstream abandoned the DX7 and FM synthesis.
SC is split into a GC'd frontend and a non-GC'd backend, and it's the backend that does the sound synthesis. The frontend runs the SC-language programs, whose output is a graph of sound processing components that is serialized and sent to the backend, where it updates the running synthesis graph. I think also the frontend can send new parameter values for nodes in the graph to the backend, so the frontend GC can have an effect on synthesis in cases of allocation-heavy, rapid control; but my limited experience with SC didn't involve that level of control.
I can't remember the details, but early serial numbers have a slightly different sound. They also had slightly different MIDI protocols, including something like a heartbeat. I know because I own a more recent unit.
It sounds amazing though!
Digital sounds in popular music went through that backlash in the 90s and early 2000s. Nothing could have prevented the backlash, and no one thing caused it. It happened to disco in the 80s and 90s when it was the butt of jokes, which then saw a solid resurgence in the 2010s with the pinnacle being Daft Punk making what was effectively a disco album.
DX7 was responsible for more hit synth sounds in the mid to late 80s than any other synth (probably, though there were some other contenders, and a few analog signal path, digitally controlled, synths that definitely had a big impact during the same era...the Prophet and the Roland JX-8P come to mind as instruments that would have often appeared alongside the DX7 on record). And, many of those songs are still loved and played today...and often continued to be played throughout the anti-digital era of the late 90s until the early 2000s when we started seeing EDM producers and others begin to reintegrate FM synthesis and other digital techniques into their sound (dubstep is all about FM synthesis, for example...those big angry swooshy wubby noises are often FM synths).
Only in the hands of a capable programmer can it go to places unreachable by contemporaneous machines. Eno is the most obvious name that comes to mind... do you know any others that plumbed the depths of FM?
EDIT: tldr start watching at 7:37
Agree, but once you learn to program it, you can really get very good sounds. I'm a satisfied programmer!
Does this imply all SuperCollider projects have to be GPL3?