[LAD] mixing music and sound effects using libao

dave at 661.org dave at 661.org
Thu Apr 30 22:17:57 UTC 2015

On Thu, 30 Apr 2015, Hermann Meyer wrote:

> Am 30.04.2015 um 10:41 schrieb dave at 661.org:
>> I've been playing around with libsndfile, libvorbisfile, libmodplug, and 
>> libao to provide background music and sound effects for a game engine.  I 
>> have a solid handle on making one noise at a time, but I don't understand 
>> mixing.  At first I thought I would have to write my own mixer and handle 
>> the channels, sample rate, and sample size issues myself.  I really don't 
>> want to have to do that.  Then I noticed in the libao documentation that 
>> nothing says that I cannot spawn two threads, each of which calls 
>> ao_open_live() and ao_play() on different sound files.  Indeed, the docs 
>> for ao_initialize() seem to suggest this can be done with the statement 
>> that it be called in the main thread.
>> I tried this and it works so erratically that I'm not sure libao was 
>> written with this in mind.  I get these results in order of likelihood:
>> 1) "Segmentation fault"
>> 2) "*** glibc detected *** ./threadtest7: malloc(): memory corruption
>>     (fast): 0x0000000001bc5390 *** Bus error"
>> 3) "*** glibc detected *** ./threadtest7: double free or corruption (out):
>>     0x00000000018ba2e0 ***"
>> 4) A bit of the first file, then the second file.
>> 5) Only the second file.
>> 6) Both files messily mixed with a zipping noise. (very rare)
>> Is libao in fact intentionally capable of doing this?  If not, what are my 
>> options for mixing music and sound effects?  I really don't want to use 
>> SDL_mixer for a variety of reasons, chiefly because my program is 
>> terminal-only.  Virtual beer if you can guess what the program is.
> Hi
> It seems libao is able to do this. Attached is the example code from the 
> libao side, roughly hacked in a second thread to play to signals 
> simultaneous. Works stable here.

This has trouble opening the second device:

ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave
Error opening device2.

I'm using Debian Wheezy amd64 without Pulseaudio.  Maybe Debian's default 
setup for ALSA is wrong?  There are no /etc/asound.conf or ~/.asoundrc 

David Griffith
dave at 661.org

A: Because it fouls the order in which people normally read text.
Q: Why is top-posting such a bad thing?
A: Top-posting.
Q: What is the most annoying thing in e-mail?

More information about the Linux-audio-dev mailing list