iiwusynth-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [iiwusynth-devel] Multi channel output and number of midi channels


From: Peter Hanappe
Subject: Re: [iiwusynth-devel] Multi channel output and number of midi channels
Date: Wed, 27 Nov 2002 16:48:57 +0100
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.0) Gecko/20020623 Debian/1.0.0-0.woody.1

M. Nentwig wrote:
Hello,

Hey Markus,


I'm trying to make up for my abscence lately by writing very long
mails. Hang on.


A flexible number of effect channels is a very, very good idea.
The Fx channels like reverb, chorus etc can be stereo by default. It's a
bit more overhead in the DSP loop, but CPUs are getting faster even as I
write this...

I believe the DSP algorithm writes to a mono buffer, but the effects
module takes a mono buffer as input and creates a stereo buffer as
output.


The approach to do things like on a mixing console is useful for reverb,
chorus. But I need insert effects as well for equalizer, overdrive,
autopan, wahwah and that sort of things. Insert effects are applied
usually -before- the aux send.

I understand.

Let me show off my ascii-art skills ;) I hope you all use a fixed width
font. Here's the current audio routing model:

   |                                |
   |                                |
[chan0]                          [chan1]     ...   [chanN]
   |                                |
   +-------+-------+-------+        +-+-+-+
   |       |       |       |        | | | |
   V pan   V pan   V rev   V chor   V V V V
   | left  | right | send  | send   | | | |
   |       |       |       |        | | | |
   |       |       |  =====+========|=|=|=+================+==== aux 2
   |       |  =====+================|=|=+=========+========|==== aux 1
   |       |                        | |           |        |
   |       |                        | |        [reverb] [chorus]
   |       |                        | |          | |      | |
  =+=======|========================+=|==========+=|======+=|=== left
   |   ====+==========================+============+========+=== right
   |       |
   v       v
  left    right

If you want to add an equalizer before the effects, you could insert the
EQ module at the output of every channel. That can become quite heavy,
though.

In the mail I sent yesterday, I proposed something like this:

   |              |
   |              |
[chan0]         [chan1]       ...    [chanN]
   |              |
   +-+-+-+-+-+    +-+-+-+-+-+
   | | | | | |    | | | | | |
   V V V V V V    V V V V V V
   | | | | | |    | | | | | |
   | | | | | +====|=|=|=|=|=+=================================+== aux 4
   | | | | +======|=|=|=|=+=========================+=========|== aux 3
   | | | +========|=|=|=+=================+=========|=========|== aux 2
   | | +==========|=|=+=========+=========|=========|=========|== aux 1
   | |            | |           |         |         |         |
   | |            | |         [fx1]     [fx2]     [fx3]     [fx4]
   | |            | |          | |       | |       | |       | |
   |=+============|=+==========|=+=======|=+=======|=+=======|=+== left
  =+=|============+============+=========+=========+=========+==== right
   | |
   v v
   L R

Simply add more effects buses (8 in total?). Each effects-send can be
controlled by one of the 'GPC' MIDI messages. By default fx1 is reverb
and fx2 is chorus. (Actually, reverb-send is controlled by GPC-6, so
maybe reverb should go on aux-6. Chorus is controlled by GPC-8.)

Now, if we allow the effects to be a cascade of LADSPA plugins, maybe
you can do what you would like to do. For example, the [fx3] module
could be an equalizer connected to a reverb, like [EQ]->[reverb].
Using this, we avoid introducing a patch-like language.
It may not give all the imagined possibilities
but it seems quite flexible to me. And it's still intuitive. For
anything more complex, users should use a visual patch language
like Max/jMax/PD/...

The API could be something like:

  /* Getting information about an effects plugin */
  iiwu_synth_count_plugins(synth, aux);
  iiwu_synth_get_plugin_name(synth, aux, index);
  iiwu_synth_get_plugin_description(synth, aux, index);

  /* Adding/removing an effects plugin */
  iiwu_synth_add_plugin(synth, aux, plugin_name);
  iiwu_synth_remove_plugin(synth, aux, index);

  /* Getting information about plugin parameters */
  iiwu_synth_count_plugin_params(synth, aux, index);
  iiwu_synth_get_plugin_param_name(synth, aux, index);
  iiwu_synth_get_plugin_param_description(synth, aux, index);

  /* Getting/setting plugin parameter values */
  iiwu_synth_set_plugin_param(synth, aux, index, name, value);
  iiwu_synth_get_plugin_param(synth, aux, index, name);

Most of them can have a command line equivalent, so you can control
all effects through sysex messages, as you proposed.


Just because I love them so much, here's another marvel of a figure.
This is the multi-channel output I proposed yesterday:

   |              |
   |              |
[chan0]         [chan1]       ...    [chanN]
   |              |
   +-+-+-+-+-+    +-+-+-+-+-+
   | | | | | |    | | | | | |
   V V V V V V    V V V V V V
   | | | | | |    | | | | | |
   | | | | | +====|=|=|=|=|=+=================================+== aux 4
   | | | | +======|=|=|=|=+=========================+=========|== aux 3
   | | | +========|=|=|=+=================+=========|=========|== aux 2
   | | +==========|=|=+=========+=========|=========|=========|== aux 1
   | |            | |           |         |         |         |
   | |            | |         [fx1]     [fx2]     [fx3]     [fx4]
   | |            | |          | |       | |       | |       | |
   v v            v v          v v       v v       v v       v v
  L0 R0          L1 R1      FxL0 FxR0 FxL1 FxR1 FxL2 FxR2 FxL3 FxR3



My LADSPA module will do that job, if I
extend it to multichannel input / output. But I just mention this - I
think Peter's concept will work out fine.

Let me know what you think about the ideas above. Can it suit you?


My own RME Multiface has 10 analog output channels, so I can test the
multichannel synthesizer.

Hey! You've got a RME multiface! Happy with it? No probs on Linux?


Concerning the API changes: I feel that we should do the multichannel
API changes before making a stable release. Other developers will
probably start with the last stable release, and why give them a
headache?

Agree.

[cut]

Cheers!
Peter

Cheers

Markus






reply via email to

[Prev in Thread] Current Thread [Next in Thread]