我最近买了一个外置声卡/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)
从输出中可以看出,尽管播放的文件确实包含 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
然而,/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
此时我注意到,在声音设置的硬件选项卡中,我可以为声卡选择两种不同的配置文件:数字立体声 (IEC958) 和模拟立体声。据我所知,在这两者之间切换不会导致任何变化。
不过,指定 ALSA 设备确实有帮助(也就是说,它可以aplay -Dhw:1,0 sr003-02-2496.wav
正常工作并播放文件而无需重新采样)。但由于 Pulseaudio 在声音设置中只显示一个 Fiio 设备/接收器,我不确定如何告诉 Pulseaudio 使用 ALSA 设备hw:1,0
。添加load-module module-alsa-source device=hw:1,0
到会导致 Pulseaudio 在启动期间/etc/pulse/default.pa
中止。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?
更多(希望有帮助)调试信息:
- 输出
aplay -L
- 输出
aplay -l
- 输出
pacmd list-sinks
- 最后,如果有相关性的话,我的 .asoundrc
答案1
回答两个问题:
您可以使用 GUI(例如 GNOME 音量控制、pavucontrol)或从命令行使用 来选择 PulseAudio 中的默认设备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
。
答案2
更新至 13.10 后,Pulseaudio 默认使用 HDMI,可能是因为我通过迷你显示端口将一台额外的显示器连接到我的笔记本电脑(Lenovo T430S)。archlinux 网站提供了一个简短的答案来重置或设置默认值:
登录并将默认输出更改为模拟
跑步
$ aplay-l
并发现模拟是卡 0
跑步
$ pacmd 列表
找到以下行:
active profile: <output:analog-stereo+input:analog-stereo>
“output:analog-stereo+input:analog-stereo”是我的配置文件名称,因此添加
set-card-profile 0 output:analog-stereo+input:analog-stereo
在 /etc/pulse/default.pa 中并保存
- 重新启动 pulseaudio
答案3
应用程序和 PulseAudio 之间的接口中使用的样本格式并不总是与 PulseAudio 用于访问硬件设备的样本格式直接相关。
S24_3LE
不是 PulseAudio 支持的应用程序格式之一(如输出所示aplay
)。要允许具有此类不常见格式的应用程序与 PulseAudio 一起运行,请添加一个插件,该插件可以根据您的 中的默认 PCM 设备自动进行格式转换.asoundrc
:
pcm.!default {
type linear
slave.pcm pulse
}
答案4
添加load-module module-alsa-source device=hw:1,0
是/etc/pulse/default.pa
正确的方法。但是,必须卸载以下模块以避免设备冲突(initialization failed
您收到的错误):
- 模块 udev 检测
- 模块检测
仔细查看并删除包含这些模块的行。此外,在这种情况下无法自动检测设备,因此您还/etc/pulse/default.pa
需要手动指定接收器。module-alsa-sink