LINUX.ORG.RU

ALSA и SAA7134


0

0

Есть у меня тв-тюнер на базе SAA7134.

Карта завелась, звук есть, но нужно получать звук с нее одновременно на несколько arecord'ов...

пытался через плагин dsnoop - но что-то никак: root@dvb1:/etc# arecord -D input -c2 -r32000 -f S16_LE ALSA lib pcm_mmap.c:369:(snd_pcm_mmap) mmap failed: Invalid argument ALSA lib pcm_direct.c:971:(snd_pcm_direct_initialize_slave) unable to install hw params ALSA lib pcm_dsnoop.c:569:(snd_pcm_dsnoop_open) unable to initialize slave arecord: main:545: audio open error: Invalid argument

кто-нибудь разбирался с этим?


Ответ на: комментарий от AEP

Alexander, если не затруднит, расскажите о mmap в двух словах - применительно к захвату звука с устройств.

нигде не попадалось описание (может плохо/не там искал?)... на звуковых картах подобных проблем не встречал, да и насколько помню с Audigy SE как раз mmap не заработал...

GByte
() автор топика
Ответ на: комментарий от GByte

Захват звука через mmap осуществляется путем программирования регистров карты, чтобы она писала звук в кольцевой буфер в памяти, который также доступен приложению напрямую. Кроме того, приложение получает уведомления о заполнении новых участков буфера.

Проверить захват звука через mmap (а не через потоковое чтение, которое используется по умолчанию) можно такой командой:

arecord -M -r 32000 -c 2 -f S16_LE -D hw:1 file.wav

где ключ -M как раз и говорит о необходимости использования mmap, а не потокового чтения. Работает ли эта команда с Audigy SE?

Плугин преобразования формата в ALSA всегда использует mmap для получения исходных данных, поэтому с устройства, не поддерживающего mmap, записать звук в "неродном" формате не получится. Это просто ограничение существующей реализации (если угодно, баг), а не нечто фундаментальное.

AEP ★★★★★
()
Ответ на: комментарий от AEP

т.е. этот патч как раз и призван создать возможность получения звука с тюнеров на этом чипе в несколько arecord'ов одновременно?

anonymous
()
Ответ на: комментарий от anonymous

Нет, этот патч всего-навсего исправляет поддержку mmap. Все остальное - последствия. Описание моей исходной проблемы: моя программа, которая поддерживает только 24-битный звук и надеется, что ALSA сконвертирует все как надо через plug, не заработала при проверке с SAA7134.

AEP ★★★★★
()
Ответ на: комментарий от AEP

Поставил патч, скомпилил модуль.

Проблема не решилась - одновременно несколько arecord'ов забирать сигнал с устройства не могут :(

GByte
() автор топика
Ответ на: комментарий от GByte

> Проблема не решилась

Давай разбираться (можно в Jabber или SIP, см. в профиль - в конце пропишем решение в форум).

Вопросы:

1) Был ли перезагружен модуль ядра?

2) Исчезло ли сообщение про mmap?

3) С какого кстройства пишем с помощью arecord? Несколько arecord'ов одновременно с hw:1 писать не могут даже с патчем, т.е. надо писать с dsnoop:1.

AEP ★★★★★
()
Ответ на: комментарий от AEP

Если кто-то еще хочет помочь, вот дополнительная информация. Компьютер перезагружен, сообщение про mmap пропало (т.е. патч сработал). Запись с arecord производится так:

arecord -f S16_LE -r 32000 -c 2 -D input file1.wav & arecord -f S16_LE -r 32000 -c 2 -D input file2.wav

где в /etc/asound.conf прописано:

pcm.input { type dsnoop ipc_key 2048 slave { pcm "hw:2,0" format S16_LE rate 32000 channels 2 period_size 1024 buffer_size 4096 } }

У меня работает. У GByte - нет (подозреваю, что из-за спешки оказался не убит arecord, запущенный в фоне во время одного из старых экспериментов).

AEP ★★★★★
()
Ответ на: комментарий от AEP

> У меня работает. У GByte - нет

Проблема была в файле ~/.asoundrc, в котором pcm.input был определен по-другому.

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