Re: [LAD] mixing while using libao and libsndfile

2016-05-17 Thread Andrea Del Signore
On Tue, 17 May 2016 08:26:17 +, David Griffith wrote:

> On Tue, 17 May 2016, Andrea Del Signore wrote:
> 
>> On Tue, May 17, 2016 at 12:25 AM, David Griffith
>>  wrote:
>> On Mon, 16 May 2016, Andrea Del Signore wrote:
>> 
>> > I'm not simply trying to mix two files.  My main project is a game
>> > engine in which two sounds are allowed at any one time. For instance,
>> > there can be constant background music punctuated by sound effects. 
>> > I can't get these to mix correctly.
>> 
>> Hi,
>> 
>> in that case you can just skip the right number of frames before
>> starting playing sounds.
>> 
>> I modified my code to take the start time for each file and schedule
>> the play time with frame accuracy.
>> 
>> http://pastebin.com/0PMyfPvK
>> 
>> If you want your timing to be sample accurate the algorithm is a bit
>> more complex.
> 
> That won't work.  Your code schedules things ahead of time before
> anything else happens.  I need to be able to fire off sound effects the
> instant the player does something to cause them.  I can't know in
> advance.

Hi,

another code iteraction: http://pastebin.com/v8gTWBtJ

This is a basic implementation, there is a lot of things left todo (RT 
safeness as Paul already noted, code cleanup, etc...)

HTH,
Andrea

P.S.
I don't code in C very often, may be this is my first time in 6 or 7 
years. For me this code snippet is just an excuse to do some exercise :)


___
Linux-audio-dev mailing list
Linux-audio-dev@lists.linuxaudio.org
http://lists.linuxaudio.org/listinfo/linux-audio-dev


Re: [LAD] mixing while using libao and libsndfile

2016-05-17 Thread Andrea Del Signore
On Tue, 17 May 2016 08:08:00 -0400, Paul Davis wrote:

> Your design is way too simple and fundamentally wrong.
> 
> If you want low latency you need to use a pull model (aka callback
> model)
> for audio i/o to the device. Let the device tell you when it wants audio
> data, and deliver it,on time, without blocking (which means no on-demand
> file i/o in the same thread as the device audio i/o). See
> http://www.rossbencina.com/code/real-time-audio-programming-101-time-
waits-for-nothing
> 

Hi Paul,

thanks for your input! I'm aware of "most" of the design issues of that 
code. It's only an example that I've done to understand basic libsndfile 
api (or just an excuse to write something fun in C ;) )

My next version will be better, but it will mantains the push model in 
the api, in order to keep things very simple.

Thanks again,
Andrea

___
Linux-audio-dev mailing list
Linux-audio-dev@lists.linuxaudio.org
http://lists.linuxaudio.org/listinfo/linux-audio-dev


Re: [LAD] mixing while using libao and libsndfile

2016-05-17 Thread Paul Davis
Your design is way too simple and fundamentally wrong.

If you want low latency you need to use a pull model (aka callback model)
for audio i/o to the device. Let the device tell you when it wants audio
data, and deliver it,on time, without blocking (which means no on-demand
file i/o in the same thread as the device audio i/o). See
http://www.rossbencina.com/code/real-time-audio-programming-101-time-waits-for-nothing

On Tue, May 17, 2016 at 4:26 AM, David Griffith  wrote:

> On Tue, 17 May 2016, Andrea Del Signore wrote:
>
> On Tue, May 17, 2016 at 12:25 AM, David Griffith  wrote:
>> On Mon, 16 May 2016, Andrea Del Signore wrote:
>>
>> > I'm not simply trying to mix two files.  My main project is a
>> > game engine in which two sounds are allowed at any one time.
>> > For instance, there can be constant background music punctuated
>> > by sound effects.  I can't get these to mix correctly.
>>
>> Hi,
>>
>> in that case you can just skip the right number of frames before starting
>> playing sounds.
>>
>> I modified my code to take the start time for each file and schedule the
>> play time with frame accuracy.
>>
>> http://pastebin.com/0PMyfPvK
>>
>> If you want your timing to be sample accurate the algorithm is a bit more
>> complex.
>>
>
> That won't work.  Your code schedules things ahead of time before anything
> else happens.  I need to be able to fire off sound effects the instant the
> player does something to cause them.  I can't know in advance.
>
> --
> David Griffith
> d...@661.org
> ___
> Linux-audio-dev mailing list
> Linux-audio-dev@lists.linuxaudio.org
> http://lists.linuxaudio.org/listinfo/linux-audio-dev
>
>
___
Linux-audio-dev mailing list
Linux-audio-dev@lists.linuxaudio.org
http://lists.linuxaudio.org/listinfo/linux-audio-dev


Re: [LAD] mixing while using libao and libsndfile

2016-05-17 Thread Andrea Del Signore
On Tue, May 17, 2016 at 10:26 AM, David Griffith  wrote:

> On Tue, 17 May 2016, Andrea Del Signore wrote:
>
> On Tue, May 17, 2016 at 12:25 AM, David Griffith  wrote:
>> On Mon, 16 May 2016, Andrea Del Signore wrote:
>>
>> > I'm not simply trying to mix two files.  My main project is a
>> > game engine in which two sounds are allowed at any one time.
>> > For instance, there can be constant background music punctuated
>> > by sound effects.  I can't get these to mix correctly.
>>
>> Hi,
>>
>> in that case you can just skip the right number of frames before starting
>> playing sounds.
>>
>> I modified my code to take the start time for each file and schedule the
>> play time with frame accuracy.
>>
>> http://pastebin.com/0PMyfPvK
>>
>> If you want your timing to be sample accurate the algorithm is a bit more
>> complex.
>>
>
> That won't work.  Your code schedules things ahead of time before anything
> else happens.  I need to be able to fire off sound effects the instant the
> player does something to cause them.  I can't know in advance.
>
> --
> David Griffith
> d...@661.org



Yes my code for now implements only your initial request (play 2 sounds
spaced by few seconds), and it shows how to schedule N sound files of
different length at different times.

I'll try to write a simple mixer for my next learning exercise :)

Have a good day,
Andrea
___
Linux-audio-dev mailing list
Linux-audio-dev@lists.linuxaudio.org
http://lists.linuxaudio.org/listinfo/linux-audio-dev


Re: [LAD] mixing while using libao and libsndfile

2016-05-17 Thread David Griffith

On Tue, 17 May 2016, Andrea Del Signore wrote:


On Tue, May 17, 2016 at 12:25 AM, David Griffith  wrote:
On Mon, 16 May 2016, Andrea Del Signore wrote:

> I'm not simply trying to mix two files.  My main project is a
> game engine in which two sounds are allowed at any one time. 
> For instance, there can be constant background music punctuated
> by sound effects.  I can't get these to mix correctly.

Hi,

in that case you can just skip the right number of frames before starting
playing sounds.

I modified my code to take the start time for each file and schedule the
play time with frame accuracy.

http://pastebin.com/0PMyfPvK

If you want your timing to be sample accurate the algorithm is a bit more
complex.


That won't work.  Your code schedules things ahead of time before anything 
else happens.  I need to be able to fire off sound effects the instant the 
player does something to cause them.  I can't know in advance.


--
David Griffith
d...@661.org___
Linux-audio-dev mailing list
Linux-audio-dev@lists.linuxaudio.org
http://lists.linuxaudio.org/listinfo/linux-audio-dev