Re: [LAD] mixing while using libao and libsndfile
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
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
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
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
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