Re: [LAD] mixing music and sound effects using libao

From: Hermann Meyer <brummer-@web.de>
Date: Fri May 01 2015 - 08:49:48 EEST

Am 01.05.2015 um 00:17 schrieb dave@email-addr-hidden:
> On Thu, 30 Apr 2015, Hermann Meyer wrote:
>
>> Am 30.04.2015 um 10:41 schrieb dave@email-addr-hidden:
>>>
>>> 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 files.
>
>
Well, here is debian/sid with pulse/jack running. Indeed, it didn't work
with plain ALSA, . .
_______________________________________________
Linux-audio-dev mailing list
Linux-audio-dev@email-addr-hidden
http://lists.linuxaudio.org/listinfo/linux-audio-dev
Received on Sat May 2 12:15:01 2015

This archive was generated by hypermail 2.1.8 : Sat May 02 2015 - 12:15:01 EEST