如何通过 ALSA 将 PulseAudio 配置为输入/输出?

Met*_*hic 2 audio linux skype pulse-audio alsa

如何将 PulseAudio 配置为仅使用单个 ALSA 设备进行输入和输出?

默认的 PulseAudio 配置会导致 PulseAudio 在启动时打开所有 ALSA 设备。这使得 PulseAudio 无法与其他 ALSA 客户端一起使用。与 ALSA 相比,许多人更喜欢 PulseAudio,但其他用户觉得它令人沮丧。不管是好是坏,PulseAudio 已经成为一种标准,一些流行的 Linux 应用程序,例如 Skype 和 Firefox,只支持通过 PulseAudio 输出音频。

一些用户更喜欢使用直接输出到 ALSA 的音频客户端,其他人则输出到另一个音频框架,如 JACK,但希望让 JACK 直接访问 ALSA。对于这些用户,通过卸载 PulseAudio 可以轻松释放所有 ALSA 设备。但是,删除 PulseAudio 会导致无法在 Skype 和 Firefox 中使用音频。

更好的解决方案是提出一种配置,使 PulseAudio 能够与其他 ALSA 客户端“很好地播放”,仅输出到在其配置中指定的单个设备,甚至只是 ALSAdefault设备。我们怎么做?

Met*_*hic 5

这个答案建立在@dirkt 的答案之上,所以感谢他。

  1. 您可以编辑~/.config/pulse/default.pa. 它列在“pulseaudio(1)”手册页的“文件”下。如果存在,default.pa则不使用全局。对我来说,我可以通过以下最小配置获得工作设置:

    load-module module-alsa-sink device=default
    load-module module-alsa-source device=default
    
    load-module module-native-protocol-unix
    
    Run Code Online (Sandbox Code Playgroud)

    但是,您可能需要查看/etc/pulse/default.pa我系统上的全局版本,以查看此文件中还有什么内容。这里配置了各种花里胡哨的功能:恢复音量设置、发现蓝牙设备、与 JACK 接口、用户注销时自动退出守护程序等模块。如果您决定将全局文件复制到主目录并进行编辑,或者甚至直接编辑全局文件,则需要执行以下操作:

    • 注释掉load-module module-udev-detect,它会搜索 ALSA 硬件设备并覆盖您传递给上面 ALSA 模块的设备参数。
    • 然后添加module-alsa-sinkmodule-alsa-source行。该module-native-protocol-unix行应该已经存在。
    • 您可能需要注释掉该行load-module module-suspend-on-idle;这给我在测试某些输出设备时带来了问题。症状是mplayer -ao pulse ...报告“音频设备卡住了!” 并mpv -ao pulse ...报告“[ao/pulse] 流被暂停。救助。” 注释掉那个模块解决了这个问题。
  2. 如果您选择与device=default上述不同的设备,例如两个单独的ALSA 设备用于录制和播放,那么根据我的经验,它将无法工作 -parecord尝试从接收器设备而不是源设备进行录制。如果您已经通过 ALSA 为输入和输出配置了单独的设备,并且您希望它们由相同的 PCM device 命名,则需要将如下内容放入~/.asoundrc

    pcm.!default {     # "!" means "override" the previous definition
        type asym
        playback.pcm "hw4mix"
        capture.pcm "hw:5"
    }
    
    Run Code Online (Sandbox Code Playgroud)

    这里hw4mix命名了之前在文件中定义的dmix 设备;whilehw:5指定我的 USB 麦克风的硬件设备。这让 PulseAudio 很高兴。如果您想为 PulseAudio 客户端使用特殊设备,您可以将其命名为“special_pulseaudio_device”而不是“default”(当然也可以更新default.pa以引用它)。

  3. 测试。使用pulseaudio -kkillall pulseaudio来终止当前的 PulseAudio 守护进程。然后再次启动它pulseaudio -vv。当然,每次编辑~/.asoundrc. 一旦你有一个工作设置,你可以尝试像pactl exit; pulseaudio --start. 该--start选项使其在后台运行,您将无法看到错误消息。

    使用parecord -v t.wavpaplay -v t.wav来录制和播放 WAV 文件。您应该能够同时运行这些命令。

    • 由于我使用dmix设备进行播放,因此可以同时使用paplayaplay,并且会自动进行混音。但是,无法在我的设置中共享麦克风;我无法arecord在 PulseAudio 运行时使用它进行录制(“设备或资源繁忙”)。为此,我需要创建一个dsnoop设备并将其名称放在hw:5上面的位置。

    • 如果您要让 Skype 正常工作,请使用 Skype“回声/声音测试服务”来测试您的设置。请记住,Skype 可能已经在后台运行 -killall skype在启动它之前尝试,以强制它建立新的 PulseAudio 连接。根据我的经验,Skype 在无法连接到 PulseAudio 守护程序时不会报告任何类型的错误情况。

拥有良好的 ALSA 配置是可取的,即使只是因为某些应用程序(Ecasound?遗留代码?)不能与 PulseAudio 一起使用。我希望这些说明对那些根据自己的喜好配置了 ALSA,现在希望能够使用依赖于 PulseAudio 的 Skype 等程序的人有所帮助。