LINUX.ORG.RU
ФорумAdmin

Alsa one stereo duplex device -> 2 mono duplex devices howto

 ,


0

0

Подскажите пожалуйста! Есть стерео звуковая карта, как настроить алзу чтоб работать с моно каналами как с отдельными звуковыми картами?

Ответ собственно нашел по ссылке там вполне рабочее решение и я им пользовался, но на zedboard c звуком xilinx оно не работает! dmix говорит что требуется поддержка mmap, а в драйвере звуковухи такой поддержки нет.

Пробовал завернуть hw в mmap_emul, но dmix хочет работать только с hw. Флаг mmap_emulation в hw уже давно obsolete.

Без dmix пример по ссылке работает, но каналами mono1 и mono2 можно пользоваться только поочередно. Если попробовать одновременно, то пишет что устройство занято.

dmix требует поддержку mmap

aplay -Dmono1 -r 48000 -f S16_LE -c 1
ALSA lib pcm_direct.c:1164:(snd1_pcm_direct_initialize_slave) slave plugin does not support mmap interleaved or mmap noninterleaved access
ALSA lib pcm_dmix.c:1111:(snd_pcm_dmix_open) unable to initialize slave
aplay: main:828: audio open error: Invalid argument
COBECTb ()

в hw больше не поддерживает mmap_emulation

если добавить mmap_emulation true в секцию hw то ругается так

aplay -Dmyhw -r 48000 -f S16_LE -c 2
ALSA lib pcm_hw.c:1882:(_snd_pcm_hw_open) Unknown field mmap_emulation
aplay: main:828: audio open error: Invalid argument

COBECTb ()

Пришлось поковырять драйвер

Вписал что устройств поддерживает mmap и все заработало. Oo

COBECTb ()

вот что вышло в итоге

pcm.myhw {
	type hw
	card 0
	device 0
        channels 2
}

pcm.mymix {
        type dmix

        ipc_key 4535
        ipc_perm 0666

        slave.pcm "myhw"
        slave.channels 2
}

pcm.myplug {
        type plug

        slave.pcm "mymix"
        slave.channels 2
}


pcm.mono1 {
        type route

        slave.pcm "myplug"
        slave.channels 2
	ttable {
		0.0= 1
		0.1= 0
	}
}

pcm.mono2 {
        type route

        slave.pcm "myplug"
        slave.channels 2

        ttable {         
                0.0= 0
                0.1= 1  
        }
}


pcm.myhwin {
        type hw
        card 0
        device 1
        channels 2
}

pcm.mymixin {
        type dsnoop

        ipc_key 4536
        ipc_perm 0666

        slave.pcm "myhwin"
        slave.channels 2
}

pcm.myplugin {
        type plug

        slave.pcm "mymixin"
        slave.channels 2
}


pcm.mono1in {
        type route

        slave.pcm "myplugin"
        slave.channels 2
        ttable {
                0.0= 1
                0.1= 0
        }
}

pcm.mono2in {
        type route

        slave.pcm "myplugin"
        slave.channels 2

        ttable {
                0.0= 0
                0.1= 1
        }
}

теперь с каждым каналом можно работать отделено, параллельно и независимо друг от друга. На вход mono1in и mono2in, на воспроизведение mono1 и mono2. Например можно так

 arecord -D mono1in | aplay -D mono1 
Можно ли сделать одинаковые имена на вход и выход?

COBECTb ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.