为 Pulseaudio 设置默认的 ALSA 设备

tmn*_*mnt 10 sound pulseaudio alsa

我最近得到了一个外部声卡/DAC (Fiio E17),目前正在尝试在我的 Ubuntu 12.04 安装中正确配置它。通过 USB 插入时,它会立即被识别并在音频设置中显示为新设备。播放也基本正常(除了一些与音量相关的小问题,这超出了本问题的范围)。

但是,在尝试通过使用 播放此类音频文件来测试 24 位/96 kHz 播放时mplayer,我遇到了一个小问题:

Opening audio decoder: [pcm] Uncompressed PCM audio decoder
AUDIO: 96000 Hz, 2 ch, s24le, 4608.0 kbit/100.00% (ratio: 576000->576000)
Selected audio codec: [pcm] afm: pcm (Uncompressed PCM)
==========================================================================
AO: [pulse] 96000Hz 2ch s16le (2 bytes per sample)
Run Code Online (Sandbox Code Playgroud)

从输出中可以看出,即使播放的文件确实包含 24 位/96 kHz 音频,它也会在播放前重新采样为 16 位。播放同一个文件aplay显示原因:

Playing WAVE 'sr003-02-2496.wav' : Signed 24 bit Little Endian in 3bytes, Rate 96000 Hz, Stereo
aplay: set_params:1081: Sample format non available
Available formats:
- U8
- S16_LE
- S16_BE
- S32_LE
- S32_BE
- FLOAT_LE
- FLOAT_BE
- MU_LAW
- A_LAW
Run Code Online (Sandbox Code Playgroud)

但是,/proc/asound/card1/stream0确认硬件确实支持 24 位:

FiiO FiiO USB DAC-E17 at usb-0000:00:1a.0-1.1, full speed : USB Audio

Playback:
  Status: Running
    Interface = 3
    Altset = 1
    Packet Size = 388
    Momentary freq = 44100 Hz (0x2c.199a)
  Interface 3
    Altset 1
    Format: S16_LE
    Channels: 2
    Endpoint: 3 OUT (ADAPTIVE)
    Rates: 32000, 44100, 48000, 96000
  Interface 3
    Altset 2
    Format: S24_3LE
    Channels: 2
    Endpoint: 3 OUT (ADAPTIVE)
    Rates: 32000, 44100, 48000, 96000
Run Code Online (Sandbox Code Playgroud)

此时我注意到在声音设置的硬件选项卡中,我可以为声卡选择两个不同的配置文件:数字立体声 (IEC958) 和模拟立体声。不过,据我所知,在这两者之间切换不会导致任何变化。

指定 ALSA 设备确实有帮助(也就是说,aplay -Dhw:1,0 sr003-02-2496.wav工作正常并且无需重新采样即可播放文件)。但是由于 Pulseaudio 在声音设置中只显示一个 Fiio device/sink,我不确定如何告诉 Pulseaudio 使用 ALSA device hw:1,0。添加load-module module-alsa-source device=hw:1,0到启动期间/etc/pulse/default.paPulseaudio 中止的结果module.c: Failed to load module "module-alsa-source" (argument: "device=hw:1,0"): initialization failed.

所以,这就是介绍,这是我的实际问题

  • 当我在声音设置中选择 Fiio E17 时,如何确定 Pulseaudio 实际使用的 ALSA 设备?
  • 在我的声音设置中选择 Fiio E17 时,如何告诉 Pulseaudio 使用 ALSA 设备 hw:1,0?

更多(希望有用)调试信息:

Aru*_*van 8

回答两个问题:

您可以使用 GNOME 音量控制、pavucontrol 等 GUI 或使用pacmd set-default-sink.

默认情况下,PulseAudio 会为 44.1 kHz 或 48 kHz 打开设备,以降低重采样工作量为准(因此 96 kHz 音频通常会导致设备以 48 kHz 的频率打开。此外,我们默认为 S16LE 打开设备。

现在,您有两个选择。如果您只想以原始格式播放一些文件,则paplay --passthrough <file>应该为您完成这项工作。您甚至可以指定要使用的设备。

另一种选择是全局使 PA 使用 96/24。您可以在/etc/pulse/default.conf( alternate-sample-rate = 96000, default-sample-format=s24-32le) 中更改它。不过,这导致更大的 CPU 使用率。这是一个有点愚蠢的情况,必须为所有设备应用全局配置。我们计划在某个时候添加每个设备的配置。

请注意,在此之后,您应该只使用 mplayer 的 PulseAudio 后端,而不是让 mplayer 与 ALSA 对话,然后 ALSA 与 PulseAudio 对话。你可以这样做,mplayer -ao pulse ...如果你想永久设置它,添加ao=pulse~/.mplayer/config.


小智 5

更新到 13.10 后,Pulseaudio 默认使用 HDMI,可能是因为我通过迷你显示端口将额外的显示器连接到我的笔记本电脑 (Lenovo T430S)。archlinux网站提供了一个可爱而简短的答案来重置或设置默认值:

  • 登录并将默认输出更改为模拟

  • 跑步

    $ aplay -l

发现模拟是卡0

  • 跑步

    $ pacmd 列表

并找到该行:

active profile: <output:analog-stereo+input:analog-stereo>
Run Code Online (Sandbox Code Playgroud)

“输出:模拟立体声+输入:模拟立体声”是我的个人资料名称,因此添加

set-card-profile 0 output:analog-stereo+input:analog-stereo
Run Code Online (Sandbox Code Playgroud)

在 /etc/pulse/default.pa 中并保存

  • 重新启动脉冲音频