[Top][All Lists]

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

Re: [fluid-dev] API design: fluid_synth_process()

From: Ceresa Jean-Jacques
Subject: Re: [fluid-dev] API design: fluid_synth_process()
Date: Wed, 2 May 2018 03:29:00 +0200 (CEST)



>Despite the fact that this function ignores two of its arguments, I just dont know how to properly tell it which channels to map to which output buffers.


fluid_synth_process(int len, int nout, float** out) behaves like fluid_synth_nwrite_float(int len, float** left, float** right). Both functions are intended

to return synthesized buffers for a number of stereo audio channels (synth->audio_channels). fluid_synth_process() seems adapted to send audio to audio card with multiples

stereo audio channels (unlike fluid_synth_write_float(), fluid_synth_write_s16() which are only useful for only one stereo audio channel).

The internal mixer stereo audio channels buffers (from 0 to audio_channels-1) are outputed in the out array in an interleaving format:

(l_audio_chan_0, r_audio_chan_0, l_audio_chan_1, r_audio_chan_1,....). Consequently nout and out array must be set to sufficient size (nout >= 2 x synth->audio_channels).


The way a MIDI channel number is mapped to an audio channel number is done inside the fluidsynth mixer in fluid_rvoice_buffers_mix().

During fluid_rvoice_buffers_mix(), the function is instructed by the voice to select (mapping) the audio channel buffer number m to mix this voice.

In the actual version the mapping m is function of the MIDI channel of the voice:

     m= 2 x ( MIDI channel number % buf_count) with

     with buf_count = max (audio_channels, audio_groups).


Somes pictures are attached to illustrates this.

Hope the author of this API could tell more about the intended unused parameters int nin, float** in.


> Message du 26/04/18 14:42
> De : "Tom M." <address@hidden>
> A : address@hidden
> Copie à :
> Objet : [fluid-dev] API design: fluid_synth_process()
> I thought to release a beta in the nearer future. But I would like to have the API ready before I do so. One function that still strikes me is fluid_synth_process() [1]. It's lacking a real implementation for 15 years. If we dont get it right now, we'll never do, so we better discuss it.
> This function is used for pulling synthesized audio from the synth. It's said to become the "generic interface in future versions". Although its usage is discouraged as being still "experimental", it's already established due to being required for the callback function of new_fluid_audio_driver2() [2].
> Despite the fact that this function ignores two of its arguments, I just dont know how to properly tell it which channels to map to which output buffers. I'm thinking here in the scope of a "future release" that might support surround audio and rendering effects of each midi channel to separate stereo / surround buffers.
> Does anybody have an idea how to deal with this function (preferably without changing its signature)? Any idea of how those two ignored arguments could be used? Would welcome any thoughts (esp. from a user perspective).
> Tom
> [1]: http://www.fluidsynth.org/api/synth_8h.html#a1ac90e2732aa652679305f78cbd66670
> [2]: http://www.fluidsynth.org/api/audio_8h.html#a3959d8add1dea97e507a5ea2c802c0bc
> _______________________________________________
> fluid-dev mailing list
> address@hidden
> https://lists.nongnu.org/mailman/listinfo/fluid-dev

Attachment: fluid_rvoice_buffers_mix_mapping_1.jpg
Description: JPEG image

Attachment: fluid_rvoice_buffers_mix_mapping_0.jpg
Description: JPEG image

reply via email to

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