Аудио ALSA и YouTube

Я хочу воспроизводить видео на YouTube и программно направлять звук Firefox на определенную звуковую карту.

Думаю, я бы сделал что-то вроде firefox | aplay -D hw:x,y. Yields:

Воспроизведение необработанных данных 'stdin': 8 бит без знака, частота 8000 Гц, моно. aplay: set_params:1059: образец формата недоступен.

Пытаюсь firefox | aplay -D hw:1,0 -f S16_LE -c 2

Воспроизведение необработанных данных 'stdin': Подписанный 16-битный Little Endian, частота 8000 Гц, стерео

Наконец, firefox | aplay -D plughw:1,0 -f S16_LE -c 2

Воспроизведение необработанных данных 'stdin': подписанный 16-битный Little Endian, частота 8000 Гц, стерео

Командная строка предполагает, что это сработало, но звук вышел из hw:0,0 (по умолчанию).

Нужно ли мне делать свой собственный плагин? Или нужно заставить alsa брать 44100Гц?

Кроме того, я отказываюсь использовать пульс, так как ошибка утечки памяти приводит к частым сбоям.


person cyrusv    schedule 20.01.2012    source источник


Ответы (2)


Я почти уверен, что flash всегда использует звуковую карту по умолчанию, поэтому вам нужно изменить pcm.default. Вы можете сделать это, отредактировав ~/.asoundrc и добавив что-то вроде:

pcm.!default {
    type hw
    card 0
    device 2
}

Конечно, это влияет на все приложения, но я считаю, что также можно установить ALSA_CONFIG_PATH (в среде), чтобы указать другой файл, чтобы вы могли сделать это только для Firefox.

В часто задаваемых вопросах по ALSA указано, что существуют ALSA_PCM_CARD и ALSA_CARD переменные среды, которые также могут работать.

Эти переменные на самом деле работают, потому что они являются частью конфигурации по умолчанию и в /usr/share/alsa/alsa.conf:

    @args.CARD {
            type string
            default {
                    @func getenv
                    vars [
                            ALSA_PCM_CARD
                            ALSA_CARD
                    ]
                    default {
                            @func refer
                            name defaults.pcm.card
                    }
            }
    }

Итак, вы должны быть в состоянии сделать это:

ALSA_PCM_CARD=1 ALSA_PCM_DEVICE=3 firefox

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

person derobert    schedule 20.01.2012
comment
Отлично. Я не мог заставить работать среду окружения, но это кажется эквивалентным программному изменению файла .asoundrc перед тем, как я открою firefox. - person cyrusv; 20.01.2012
comment
Я также хотел бы быть более уверенным, что Firefox не может играть из чего-либо, что не установлено по умолчанию. Мне трудно поверить, что я не могу передать это на другое устройство - person cyrusv; 20.01.2012
comment
@cyrusv: Звуковые данные не поступают в STDOUT, поэтому вы не можете их никуда передать. - person derobert; 20.01.2012

Flash использует собственную конфигурацию вывода, независимую от Firefox. Определите FLASH_ALSA_DEVICE перед запуском браузера, он сообщает Flash, какой ALSA PCM использовать вместо значения по умолчанию.

person NightKid    schedule 15.07.2013