2

我想播放 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?

另外,我拒绝使用脉冲,因为内存泄漏错误使其经常崩溃。

4

2 回答 2

6

我很确定 flash 总是使用默认声卡,所以你需要更改pcm.default. 您可以通过编辑~/.asoundrc和添加以下内容来做到这一点:

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

当然,这会影响所有应用程序,但我相信也可以设置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
                    }
            }
    }

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

ALSA_PCM_CARD=1 ALSA_PCM_DEVICE=3 firefox

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

于 2012-01-20T18:14:43.973 回答
0

Flash 使用自己的输出配置,独立于 Firefox。在运行浏览器之前定义 FLASH_ALSA_DEVICE,它告诉 Flash 使用什么 ALSA PCM 而不是默认值。

于 2013-07-15T22:46:52.773 回答