ALSA音频和YouTube

cyr*_*usv 2 linux youtube flash audio alsa

我想播放youtube视频,并以编程方式将firefox的音频指向特定的声卡.

我想我会做像firefox | aplay -D hw:x,y. Yields 这样的事情:

播放原始数据'stdin':无符号8位,速率8000 Hz,单声道播放:set_params:1059:样本格式不可用可用格式: - S16_LE

firefox | aplay -D hw:1,0 -f S16_LE -c 2

播放原始数据'stdin':签名16位Little Endian,速率8000 Hz,立体声警告:速率不准确(请求= 8000Hz,得到= 44100Hz)请尝试插件插件

最后, firefox | aplay -D plughw:1,0 -f S16_LE -c 2

播放原始数据'stdin':签名16位Little Endian,速率8000 Hz,立体声

命令行表明它有效,但音频来自hw:0,0(默认值).

我需要制作自己的插件吗?或者我需要强制alsa采取44100Hz?

此外,我拒绝使用脉冲,因为内存泄漏错误使它经常崩溃.

der*_*ert 6

我很确定flash总是使用默认声卡,所以你需要改变pcm.default.您可以通过编辑~/.asoundrc和添加以下内容来完成此操作:

pcm.!default {
    type hw
    card 0
    device 2
}
Run Code Online (Sandbox Code Playgroud)

当然,这会影响所有应用程序,但我相信也可以设置ALSA_CONFIG_PATH(在环境中)指定不同的文件,所以你可以只为Firefox做.

ALSA FAQ表示有ALSA_PCM_CARDALSA_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
                    }
            }
    }
Run Code Online (Sandbox Code Playgroud)

所以,你应该能够做到这一点:

ALSA_PCM_CARD=1 ALSA_PCM_DEVICE=3 firefox
Run Code Online (Sandbox Code Playgroud)

使用系统中相应的卡和设备编号.或者您当然可以将自己的环境变量(或其他条件检查)添加到ALSA配置中.

  • @cyrusv:声音数据不会转到STDOUT,因此您无法将其传送到任何地方. (2认同)