Wednesday, August 1, 2018


Got sidetracked, as usual, into the world of FM synthesis. I was trying to get some stuff working and read a couple of articles and then found a rather nice library from P.Cook and  G.Scavone on the hub called STK. It is sort of designed for a LOT more horsepower processing than I have available in the M4F but with a bit of tweeking I think I can add in some voices that may be interesting. Preen FM has most of this already in the ideas implemented but not really in a voltage controlled sort of way... more your MIDI implementation. I was interested to see that the TX81Z, that most of the STK voices are modeled on, has different waveforms internally. I had never really looked at the newer Yamaha FM synths much beyond my venerable DX7 so was curious by all the rather interesting modulation waveforms beyond the  sinewave...

Wednesday, July 11, 2018


To try and speed things up a bit and spend less time fiddling around in interrupt service routines I have managed to get the DMA controller to do most of the hard lifting for collecting the ADC values. It has been a bit of a journey as the STM32 will only transfer 16 bits at once via the SPI and the whole chip enable output is plain messy... I ended up having multiple DMA channels and using a clock to generate the CE pin in the end. Checking it on a logic analyser it looks good. I am able to collect the PITCH 4 times interleaved with the FM, Timbre and Colour values in an attempt to get a little bit more resolution. I am also able to run the whole thing a fair bit faster than the original.

Wednesday, June 27, 2018

Band Limited Comb

Well life has interrupted the progress a bit I have been trundling along a bit. I have bought a braids board made from Oliver's gerbers from one of the various people that do that sort of thing. Needles to say I didn't pursue the path of least resistance... I have put a STM32L433CCTx on and it is basically almost precisely the same pin out. The code probably could be naively chopped across but I have made extensive use of the DMA controllers to reduce the load very substantially. For instance the load for the display is now, apart from updates, 0% for the CPU with a few DMA accesses. The ADC can run a lot faster and interleave pitch readings for a higher resolution measurement. The DAC output is also DMA and I have considered going to 192kHz and interpolating the output in the driver. I had already gone down the path of making it all floating point and slowly all the voices are coming back to life. This one is an example. The Band Limited Comb was always a bit of a mystery to me but I think I have it sorted now... This is the waveforms that are interpolated through.

Sunday, July 30, 2017


A Possible display option... Nice and crisp but still not too sure about the update rate...

Sunday, July 23, 2017

Votrax Oscillator

One of the things that I have been looking at to extend the Galon Oscillator suite is a simulation of the 80's voice synthesizer, the Votrax SC-01A. A chap called Olivier Galibert has been busy un-potting one and reverse engineering the design in conjunction with the patent information. It has been made part of the MAME game engine from where I have taken a snapshot to further tweek into Galon land...
This is the generated transistor logic map from the die image. The most important aspect of this is the ROM table values which weren't in the patent... The code for MAME, which is on GitHub, is a very interesting read. I plan to implement it using some of the MI code such as the noise generator and filters... anyway a work in progress...

Wednesday, July 12, 2017

Still here...

There has been activity just not very well documented... A STM32 version of GALON is being tested but the inter-wiring is messy... I am now looking at a scaled up version that is Euro and going a bit crazy with performance. I am looking at a more robust rotary pot as well which should help some of the mechanical issues... Here is a bit of a 3D view:

Friday, June 3, 2016

Display #4 Dotz

Well got the 4th display up and running. Now wishing that I hadn't decided to use an AVR Tiny as it has a very limited ability to address large const arrays... I ended up getting the Ruby script to generate a huge nested case statement instead... messy... should have gone for one of these instead as they are available in the same SOIC 14 package and I think they are cheaper!

 The display does look quite attractive though!

Waiting on the digital rotary pot to arrive. Of course the AVR Tiny I2C code is also different from the other 3 as well... Oh well... Only found one mistake in the PCB this time and I can fix that in the code this time.

Tuesday, May 31, 2016


Have been going through the various voices and trying to understand how they all work and have been scratching my head and doing some reverse engineering of the mathematics. This is the filter out of TOY* that is from the coefficients back through MATLab.