On Tue, May 17, 2016 at 12:25 AM, David Griffith <dave@661.org> wrote:
On Mon, 16 May 2016, Andrea Del Signore wrote:

> I've been knocking my head against a wall for more than a year trying to
> figure out how to correctly mix two streams of audio while using
> libsndfile for input and libao for output.  My main requirement is that
> I cannot assume anything about the output drivers -- that is, I cannot
> depend on the output driver (ALSA, OSS, Sun, etc) being able to do the
> mixing for me.  Many of my target platforms lack any sort of mixing
> services.  I need to do this myself.  I tried starting a mixer/player
> thread that would work in a producer/consumer relationship with one or
> two audio file decoder threads.  I can play one sound at a time just
> fine. When I try to do both, I get distortion followed by a segfault.

Hi,

not sure if I understood correctly: do you just want to mix N files?

Like you I'm learning libsndfile and libao so this is my attempt to mix some audio files:

http://pastebin.com/dm7z8b3Z

HTH,
Andrea

P.S.
Can someone explain line 88 (I already read the sndfile FAQ)?

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.

Ciao,
Andrea