My latest audio (music) synthesizer experiments from the local
server, ready to read.
Mainly currently I've been doing work on Analog BF533 DSP based
MIDI synthesizer in a 19 inch rack unit which is in working state with
starting audio generator algoritms burned in flash memory and a Xilinx
CPLD board custom connected to the processor bus to give the DSP
outside world signal access such a infinite turn knob, switches,
displays, and in this case the fully working MIDI-IN interface..
The unit is based on the Blackfin DSP EZ-LITE board from Analog
Devices, which is programmed in C from the VisualDSP++ development
environment. Apart from the audio pass-through example all the
synthesis and effects code is completely my own, even without using
books or internet pages as source.
My first experiments now the board is built in the enclosure and now
the midi interface works well, with the official opto-coupler to
prevent grounding loops and high voltage hazards unlike PC interfaces,
have been organ type of notes, with attack and release (in organ jargon
'sustain') curves, with currently 8 notes of polyphony, and with very
high additive synthesis quality (24 bits output, over 100,000 long
lookup table).
Also, an analog input is available on the back of the unit (with
standard stereo Jack) which feeds to the chorus/lesley effect unit,
which is part of the software I wrote. The modulation wheel can
currently control the lfo's frequency (there are three delay lines with
independent high quality sinusodial length modulation), while the main
front pannel knob controls modulation depth in 16 discrete steps.
Connected to the high quality audio
system, with the 15"subwoofer, that sounds pretty good, as 'clean' but
strong organ. See the updatebelow for audio examples.
Some pictures:
Front panel view of the 4 unit high 19" rack unit, the second knob from
the right is a clicking infinte controller,
upper left corner knob is on/off, under the display there are two
pushbuttons.
Back side with lid removed: 8 stereo Jacks (of which 3 stereo out and 2
stereo in for the DSP board)
The DIN standard MIDI IN plug, an easy to reach fuse, and standard
eurocord grounded connector.
The inside with on the left the high voltage parts and the switching
supply, in the middle the 16x2 character display
and the Xilinx board on the bottom plate, the little MIDI optocoupler
input circuitry, and on the right the DSP board
with the audio connections, the flatcable coming from the bottom to the
Xilinx and in this case a USB connection.
Both the Xilinx and the EZLITE can be programmed from a PC
in-circuit, even pretty easily and quickly. I've used the display
before, but currently it is as yet onconnected. Of course it will get a
nice interface over the Xilinx. I've given that board various LED
displays as experiments already, see for instance my Xilinx
and DSP pages.
Since I currently make open source software, here are the xilinx files
and the DSP project files (I'll make schematic diagram too, hang on):
All materials are copyright by me
but may be freely used for non-commercial
purposes, with mentioning of the original author, and of course I'd
prefer the decency of being informed how the materials have been
altered and used.
Want a course ?
April
4 2005 Update
Well, the machine is a lot more advanced again, I've updated the DSP
program to contain:
- full regular MIDI messages implementation (though not
all options work yet): note on/off with veolocity, modulation
wheel to chorus depth
- polyphonic key/oscillator assignment with intelligent
reassignment (during release) and flexible 2 to 1 oscilator revoicing
- additive synthesis based oscilators (currently 24 part
saw tooth) causing no aliasing errors with over 24 bits accuracy
- ADSR volume envelope generator with good exponential
(unapproximated) behaviour.
- a well-sounding 4 pole IIR filter implementation, with
cutoff frequency coupled to ADSR and seperate cutoff control
- A 3-way, 3 independent high Q sine LFO strong stereo
chorus unit
- an analog input mixed to the chorus unit
- a linear 2 button controlled step-trough parameter
access program for the LCD display
- a infinite knob entry program module to change
parameters in 256 steps in real time with 2 automatic response speeds
- a display routine which can respond with decimal numbers
on the display on MIDI events.
- only ONE (1) sample delay of the 48KS/s processing
- this also holds for all midi control: after the midi
message is clocked in, one sample later the notes are started or
stopped or changed
so very real time behaviour and latency strictly determined by the
theoretical midi protocol speed, with no added variable delay, which
makes for very fast and slick and stable playing, almost like on a
directly analog keyboard.
On the analog/digital hardware side, I've added:
- a very high quality audio pre-amplification stage to
boost the EZLITE audio outputs (based on OPA627)
- volume contol for that, also usable as headphone output
- a +/- 12 Volt regulated supply based on a small toroid
transformer
- the midi-in circuitry (a optocoupler and plug)
- a 5 volt supply for
- the LCD display and backlight, with Xilinx connection
- LCD contrast control knob
- update of Xilinx programmed circuit with MIDI interface
and LCD driving from blackfin bus
All this was succesfully tested last friday by dragging the machine (in
a bag) to the Cultural Centre of Delft Univerity and demonstrating its
current operation and sound quality in the midi studio. Stay tuned, I
might be doing a (part of) a workshop shortly about synthesis and DSP
algorithms and programming (introductory) demonstrating this machine.
I've recorded some audio examples with my USB AD/DA converter (see Audio page)
from the audio out lines of the synthesizer, just a straight wire from
the output of the rack unit to the AD-in of the converter with 44.1kHz
/ 16 bits (The Blackfin DA converter is 48kHz/24 bit), the unedited wav
files are best (though not as superior and prestine as the synth out
sounds directly), the mp4 are for slower links:
For people wanting to build (parts of) this open source synthesizer
themselves, the latest programming files are in this
zip file for free downloading. The programs therein for Xilinx and
DSP are the same
as the ones making the sounds in the audio files, except for
programming the parameters.
The connections to the Xilinx/Digilent CoolrunnerII demo board,
according to the normal (manual) pin numbering, connector A through C
from top to bottom with looking into the connector view, names
corresponding to the Blackfin Bus names (and the LCD display and my own
midi and knob names) from the official CPLD programming names:
Butl/r are push buttons, B(l)X are not used for the synthesizer. This
diagram was automatically generated from the design files.
Anouncements for a demonstration
of the synthesizer at the Cultural Centre
of Delft University, Midi Sound Studio, on the board of the for me well
known EE building nearby (where I graduated as EE, and worked):
Also, the synth has been demonstrated (and made sound of course) on the
biggest dutch musicians fair, see mile2005 page.
I've found out there are some things different fromt he actual design
file in the Xilinx Coolrunner II on the board, so here is a design file
set which I recently tested by downloading it in another
Digilent/Xilins CoolrunnerII demo board, which I then connected up to
the synth hardware and the EZLITE DSP board. This file set works fine
(including the .bit programmer file for ISE 7.2 I think):
Xilinx programming files 3b.zip
DSP source and programming files 3r.zip
I've recently used the DSP project in Visual DSP++ 4.0.4.0 from Analog
Devices, which worked good, from a windows XP machine over the USB
programmer cable. IMPORTANT NOTE:
to compile like I did, the optimizer must be OFF for all files during
compile (link phase doesn't matter) except for the Process_data.c
compile phase, there the optimizer MUST be on, or the main DSP routine
won't run fast enough. The way to do this is to set optimize off,
compile everything, then set it ON, en (re-) compile the Process_data.c
file by right clicking, and make the project again after that, without
opting for rebuild when the optimizer is on. The remake will link in
the one optimized file together with the unoptimized .o files from the
other c sources, and create a new executable or flash loadable file.
The connections from the DSP board to the Coolrunner board are
according to the DSP manual schematics connector page, part of Databus
and Addressbus, NOT-Writeenable, NOT-Readenable,
NOT-Asynchronous_memory_select_bank-3.
UPDATE Aug 14, 2008
I've added some more necessary materials I forgot to mention here
to my recent
local diary page 50
, like the ldr file for the wavetable. It should be possible to built
the whole machine yourself from all this info, too, though you'd need more
than average DIY skills...
home page [2]
email: theover@tiscali.nl [2] message directly to site maintainer