[alsa-devel] a new synthesizer driver
Hi all,
I'm embarking on a big task: writing a new synthesizer driver. My device has all the ingredients for a MIDI wavetable sythesizer: 64 voices, each voice with envelope, pitch, and LFO controls. Also global effects like reverb. It's similar to the emu10k1.
So my first question would be, is the synth code under synth/emux/ general enough to use for a different synthesizer chip? Ie, can I implement my own operators in 'struct snd_emux_operators' and pass that to snd_emux_register() ?
Would it be a simple matter to make synth/emux/ a generic synth layer, by moving all the source in synth/emux/ up one level to synth/, and then rename all functions and data structures starting with "snd_emux" to "snd_synth" ? For instance, snd_emux_operators becomes snd_synth_operators, snd_emux_control() becomes snd_synth_control(), etc.
It seems this path is already partially completed, since synth/emux/soundfont.c is a generic soundfont loader.
The thing I want to avoid doing is creating a synth/my_synth/ directory and duplicating lots of code from synth/emux/ (including just copying soundfont.c verbatim!).
Steve
Steve Longerbeam wrote:
I'm embarking on a big task: writing a new synthesizer driver. My device
Which one?
has all the ingredients for a MIDI wavetable sythesizer: 64 voices, each voice with envelope, pitch, and LFO controls. Also global effects like reverb. It's similar to the emu10k1.
So my first question would be, is the synth code under synth/emux/ general enough to use for a different synthesizer chip? Ie, can I implement my own operators in 'struct snd_emux_operators' and pass that to snd_emux_register() ?
Probably not. The sound font loading code is somewhat generic, but that is because the sound font format was designed to be the equivalent of the Emu chips' hardware capabilities.
All that code has been written for Emu hardware. How much it must be changed depends on how different your hardware is.
Would it be a simple matter to make synth/emux/ a generic synth layer, by moving all the source in synth/emux/ up one level to synth/, and then rename all functions and data structures starting with "snd_emux" to "snd_synth" ?
I think it is possible to reuse some of that code, but it wouldn't be as easy as just renaming some things.
(The generic synth code is supposed to be in core/seq/seq_midi_emul.c. The synth/emux directory just exists to factor out common code of the Emu8000 and Emu10k1 drivers.)
Regards, Clemens
Clemens Ladisch wrote:
Steve Longerbeam wrote:
I'm embarking on a big task: writing a new synthesizer driver. My device
Which one?
it's an embedded SOC, the LSI Zevio 1020, here's a link:
http://www.lsi.com/consumer_home/products_home/standard_product_ics/applicat...
has all the ingredients for a MIDI wavetable sythesizer: 64 voices, each voice with envelope, pitch, and LFO controls. Also global effects like reverb. It's similar to the emu10k1.
So my first question would be, is the synth code under synth/emux/ general enough to use for a different synthesizer chip? Ie, can I implement my own operators in 'struct snd_emux_operators' and pass that to snd_emux_register() ?
Probably not. The sound font loading code is somewhat generic, but that is because the sound font format was designed to be the equivalent of the Emu chips' hardware capabilities.
All that code has been written for Emu hardware. How much it must be changed depends on how different your hardware is.
Would it be a simple matter to make synth/emux/ a generic synth layer, by moving all the source in synth/emux/ up one level to synth/, and then rename all functions and data structures starting with "snd_emux" to "snd_synth" ?
I think it is possible to reuse some of that code, but it wouldn't be as easy as just renaming some things.
(The generic synth code is supposed to be in core/seq/seq_midi_emul.c. The synth/emux directory just exists to factor out common code of the Emu8000 and Emu10k1 drivers.)
ok, that's what it looked like.
Steve
participants (2)
-
Clemens Ladisch
-
Steve Longerbeam