fluid-dev
[Top][All Lists]
Advanced

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

Re: [fluid-dev] Re : Re: Re : Re: Re : two questions about generating mo


From: Ien Cheng
Subject: Re: [fluid-dev] Re : Re: Re : Re: Re : two questions about generating mono ouput
Date: Thu, 14 May 2015 18:12:06 -0400

Thanks JJC. I'll go ahead and use the adding method for now. If I ever see a need and get around to creating a mono output API I'll certainly offer it back to the maintainers in case they want to include it. All the best, Ien

On Thu, May 14, 2015 at 2:14 PM, CERESA Jean-Jacques ENAC/ENAC <address@hidden> wrote:
> Is it very unusual to need mono output?
I don't know if anyone can say that it is usual or not to need mono output.
The fact is many music are recorded at least in stereo. This is why many synthesizers follow this standard.
SoundFont 2.01 synthesiser model is based on mono or stereo sample. I am not a Fluidsynth maintainer, but as far i known, 
actualy, Fluidsynth produces always stereo samples on output even the Soudfont samples are mono.
It is clear that the aim of FluidSynth is to comply to the SF 2.01 model.
It is clear also that FluidSynth is a good library to embed only the necessary components in a custom application.
 
There is no reason that applications are forced to used stereo in the case of it need only mono sample.
In fact actually, there are 3 functions in the set of API rendering audio these are:
1)fluid_synth_write_s16()  for one stereo channel (PCM samples).
2) fluid_synth_write_float()  for one stereo channel (float samples).
3) fluid_synth_nwrite_float()  for multiples stereo channels (float samples).
 
Alls are for stereo audio channels. Alls are actually used in audio drivers so it is not a good idea to modify theses. But it is very easy to add  function to do the same things for mono channel.
If you are a developper, you can do this yourself  for your need, and if you think that it can be useful for others you
can ask the maintainer to add your work to the library.
 
If you intend to build a new API rendering audio for mono sample this need to be done in fluid_synth.c file.
If you think i can help you, ask me.
 
jjc
 
Le 14/05/15, Ien Cheng <address@hidden> a écrit :

Ah yes hadn't even thought about that -- good point.

Is it very unusual to need mono output? If it's a common need, maybe I'll hack the API to provide a way to do it directly -- does the FluidSynth project accept pull requests for things like this?

--Ien

On May 14, 2015 10:57 AM, "CERESA Jean-Jacques ENAC/ENAC" <address@hidden> wrote:
Hi
>Adding the two channels seems like the straightforward and more natural thing to do. 
 
Really, way 2 is the right way. Has you say,this is the more straightforward, because even if you choose the way 1,
you solve your initial level problem, but you change the panoramic balance beetween voices (only in the case if your sound is made from
more than 1 voice). In others word, with way 1 you risk breaking the work done by the soundfont sound designer !.
 
All the best.
 
jjc
 
 
Le 14/05/15, Ien Cheng <address@hidden> a écrit :
Thanks JJC -

That's all very helpful!

Adding the two channels seems like the straightforward and more natural thing to do. 

All the best, Ien

On Thu, May 14, 2015 at 9:32 AM, CERESA Jean-Jacques ENAC/ENAC <address@hidden> wrote:
Hi, 
 
>If this is the correct way to generate mono output ?
When any audio device (i.e the  fluid_synth_write_s16() or another device) supplies a stereo (left,right) signal, the right way to transfort this signal in a mono signal with the same level is to sum left and right part.:   Mono signal = left + right
 
>Could this explain why the volume is low? Because each channel is at half volume? 
Let a stereo signal with panoramic at 0 (i.e centered) (Left = 50% level, Right= 50 % level).
If you overwrite left channel by right channel (or the reverse) you lost 50% of the initial level
 
Let a stereo signal with panoramic at -25 % . (Left = 75% level, Right= 25 % level)
If you overwrite left channel by right channel you lost 75% of the level !!!
 
>what other reasons could there be for the volume to be low?
1) Of course, the main gain must be at 1 to get a full level of the soundfont sample used to synthesize your sound.
2)To get a full stero level, not only Velocity must be full (127) but also both MIDI CC _expression_ and Volume need to be full. Both have correct initial default value (127 and 100).
 
>If so, is there another way to general full-volume mono output? ,
Here tow distincts ways:
1)If you want to use your way (i.e. the right channel  overwriting the left channel), you can do this workaround:
Set a stereo signal with panoramic at +50 % . (Left = 0% level, Right= 100 % level),  for alls voices of the preset used to synthesize your sound.
 
2)After calling fluid_synth_write_s16() , for each sample you can do:  left = left + right.
 
Which do you prefer ?
 
jjc
 
Le 14/05/15, Ien Cheng <address@hidden> a écrit :
Hi fluidsynth-dev:

I've got fluidsynth working nicely in an Android app. What I'm doing is using the fluid_synth_write_s16 API to generate PCM data that I feed into Android's OpenSL ES audio system.

However, I'm running into an odd problem where the volume level is low, even with all MIDI velocities set to the max of 127.

I wonder if this is due to the way I'm trying to generate mono output. In the parameters to to fluid_synth_write_s16, I've set lout = rout, loff and roff to both be 0, and lincr and rincr to both be 1 -- i.e. the right channel is overwriting the left channel.

Could this explain why the volume is low? Because each channel is at half volume? 

If so, is there another way to general full-volume mono output? If this is the correct way to generate mono output, what other reasons could there be for the volume to be low?

Thanks!

--Ien

p.s. Aere Greenway, if you are reading this, THANKS for your reply to my question about SF2/DLS/iOS the other day -- I got the mailing list digest and can't reply to your reply directly.

_______________________________________________
fluid-dev mailing list
address@hidden
https://lists.nongnu.org/mailman/listinfo/fluid-dev



_______________________________________________
fluid-dev mailing list
address@hidden
https://lists.nongnu.org/mailman/listinfo/fluid-dev


_______________________________________________
fluid-dev mailing list
address@hidden
https://lists.nongnu.org/mailman/listinfo/fluid-dev



reply via email to

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