为Pulseaudio设置默认的ALSA设备
我最近有一个外部声卡/ DAC(Fiio E17),我正在尝试在我的Ubuntu 12.04安装上正确配置它。 通过USB插入时,它会立即被识别并在音频设置中显示为新设备。 播放工作大多也很好(除了一些与音量相关的小问题,超出了这个问题的范围)。
但是,当试图通过使用mplayer
播放这样的音频文件来测试24位/ 96 kHz播放时,我遇到了一个小问题:
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
到/etc/pulse/default.pa
导致Pulseaudio使用module.c: Failed to load module "module-alsa-source" (argument: "device=hw:1,0"): initialization failed.
中止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
回答这两个问题:
您可以使用类似GNOME音量控制,pavucontrol的GUI或使用pacmd set-default-sink
从命令行选择PulseAudio中的默认设备。
默认情况下,PulseAudio打开设备的频率为44.1 kHz或48 kHz,无论哪种情况都会导致重采样工作量降低(因此96 kHz音频通常会导致设备以48 kHz的频率打开。此外,我们默认打开S16LE的设备。
现在,您有两种选择。 如果您只想以原生格式播放一些文件, paplay --passthrough
应该为您完成这项工作。 您甚至可以指定要使用的设备。
另一种选择是全球使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
。
更新到13.10 Pulseaudio后默认为HDMI,可能是因为我有一个额外的显示器连接到我的笔记本电脑(联想T430S)通过我的迷你显示端口。 archlinux网站提供了一个简短的答案来重置或设置默认值:
-
登录并将默认输出更改为模拟
-
跑
$ aplay -l
并发现模拟是卡0
-
跑
$ pacmd list
并找到该行:
active profile:
“输出:模拟立体声+输入:模拟立体声”是我的个人资料名称,所以添加
set-card-profile 0 output:analog-stereo+input:analog-stereo
在/etc/pulse/default.pa中保存
- 重启pulseaudio
应用程序和PulseAudio之间的接口中使用的样本格式并不总是与PulseAudio用于访问硬件设备的样本格式直接相关。
S24_3LE
不是PulseAudio支持的应用程序格式之一(如aplay
输出中所示)。 要允许具有此类exception格式的应用程序与PulseAudio一起运行,请添加一个插件,如果需要.asoundrc
的默认PCM设备,则执行自动格式转换:
pcm.!default { type linear slave.pcm pulse }
只是一个快速的解决方法我发现使用Lubuntu Trusty Tahr与我的Fiio E17通过USB连接:我也想知道比特率,这就是为什么我在这里发现这个post。 但是因为我在相当旧的上网本上听音乐,我不想默认将它设置为96/24(cpu不是最快的)但是,对我有用的是使用VLC,并在专家音频设置中指定使用ALSA模块进行输出,然后使用以下输出设备:“Fiio USB DAC-E17,USB音频直接硬件设备,无任何转换”
这样,我可以在我想要的时候通过USB输出96/24声音到Fiio(也显示在Fiio的小屏幕上) – 而且我不需要在操作系统中更改一些更基本的东西。 像大胆或浏览器这样的玩家仍然使用默认的pulseaudio输出。 有时VLC表示该设备已被使用 – 然后只关闭任何其他软件,如大胆,即使用例如pulseaudio输出,它应该工作。
问候,安迪
这是这个问题的正确答案:
来自ArchWiki
确定要使用的ALSA hw设备。 然后将其添加到default.pa文件中。 (更改0,0以适合您的设备。)
load-module module-alsa-sink device=hw:0,0
将load-module module-alsa-source device=hw:1,0
到/etc/pulse/default.pa
是正确的方法。 但是,必须卸载以下模块以避免设备冲突( initialization failed
错误):
- 模块的udev-检测
- 模块检测
仔细查看您的/etc/pulse/default.pa
并删除包含这些模块的行。 此外,在这种情况下,无法自动检测设备,因此您还需要加载module-alsa-sink
以手动指定接收器。