ALSA аудио и YouTube - PullRequest
       32

ALSA аудио и YouTube

2 голосов
/ 20 января 2012

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

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

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

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

Воспроизведение необработанных данных 'stdin': 16-битный Little Endian со знаком, частота 8000 Гц, стерео Предупреждение: частота не точна (запрошено = 8000 Гц, получено = 44100 Гц) пожалуйста, попробуйте плагин

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

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

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

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

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

Ответы [ 2 ]

6 голосов
/ 20 января 2012

Я почти уверен, что 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.

0 голосов
/ 16 июля 2013

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

...