为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 = 96000default-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以手动指定接收器。