为Pulseaudio设置默认的ALSA设备


8

我最近获得了一个外部声卡/ 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

此时,我注意到在声音设置的硬件选项卡中,可以为声卡选择两个不同的配置文件:Digital Stereo(IEC958)和Analog Stereo。据我所知,在这两者之间切换不会导致任何更改。

不过,指定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.在启动过程中中止。

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

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

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


什么是mplayeraplay命令行?
CL。

@CL。如果您要这样做,我会跑步mplayer -ao alsa:device=hw=1.0 sr003-02-2496.wavaplay -Dhw:1,0 sr003-02-2496.wav使用正确的设备。
tmnt

我是在询问无法接通的电话。您是否要使用PulseAudio?
CL。

@CL。啊,对不起,这些只是没有任何标志的普通呼叫,即aplay sr003-02-2496.wavand mplayer sr003-02-2496.wav。是的,如果可能的话,我想使用PulseAudio。
tmnt

Answers:


8

回答两个问题:

您可以使用带有GNOME音量控件,pavucontrol之类的GUI的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.confalternate-sample-rate = 96000default-sample-format=s24-32le)中进行更改。但是,这导致更大的CPU使用率。这有点愚蠢,必须为所有设备应用全局配置。我们计划在某个时候添加每个设备的配置。

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


非常感谢你的帮助!pacmd set-default-sink只能让我设置列出的接收器之一pacmd list-sinks,对吗?虽然我想您答案的第二部分还是会引起这个问题;)因此,如果我理解正确,Pulseaudio不支持在24位和16位之间动态切换?更改my之后default.conf,mplayer似乎仍然将所有内容重新采样为16位,然后再将其移交给脉冲(参见此处),这是因为CL。在他的回答中描述?
tmnt

哦,而且paplay似乎不喜欢我的音频文件:)播放24位文件会导致segfault Code should not be reached at pulsecore/sndfile-util.c:391, function pa_sndfile_readf_function(). Aborting.,而播放32位文件甚至会使Pulseaudio崩溃
tmnt

4

在更新为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

2

应用程序和PulseAudio之间的接口中使用的示例格式并不总是与PulseAudio用于访问硬件设备的示例格式直接相关。

S24_3LE不是PulseAudio支持的应用程序格式之一(如aplay输出所示)。为了允许具有这种异常格式的应用程序与PulseAudio一起运行,如果您的默认PCM设备需要添加一个插件,该插件可以进行自动格式转换.asoundrc

pcm.!default {
    type linear
    slave.pcm pulse
}

感谢您的帮助,但恐怕这没有任何改变。即使将其添加到my中.asoundrcmplayer仍会将音频下采样至16位(即输出看起来与我的问题中发布的输出相同),并且/proc/asound/card1/stream0仍然显示使用了错误的altset。如果实际上是PA支持的格式有问题,那么mplayer即使指定了ALSA设备,也不应降低音频采样率,因为它仍然使用Pulseaudio?
tmnt

难道aplay现在的工作?这似乎是中的错误mplayer
CL。

不,aplay仍然失败,输出相同。我现在已经注意到,通过设置default-sample-format = s24-32le在我的.pulse/daemon.conf我可以强制PA使用正确的输出设备。但是,mplayer仍然会重新采样音频,并且aplay在尝试播放24位音频文件时仍然失败,因此我想这也无济于事。
tmnt

2

我找到一个快速解决方法,将Lubuntu Trusty Tahr与通过USB连接的Fiio E17结合使用:我也想知道比特率,所以才在这里找到这篇文章。但是由于我是在较旧的上网本上听音乐的,所以我不想默认将其设置为96/24(cpu并不是最快的)。但是,对我有用的是使用VLC,并在专家音频设置中进行指定使用ALSA模块进行输出,然后使用以下输出设备:“ Fiio USB DAC-E17,USB Audio Direct硬件设备,不进行任何转换”

这样,我可以在需要时通过USB向Fiio输出96/24声音(也显示在Fiio的小屏幕上)-而且我不必更改操作系统中更基本的内容。大胆的播放器或浏览器仍然使用默认的pulseaudio输出。有时VLC表示该设备已经在使用中-然后关闭诸如audacious之类的其他软件,例如使用pulseaudio输出,它应该可以工作。

问候,安迪



1

这是此问题的正确答案:

ArchWiki

确定您要使用的ALSA硬件设备。然后将其添加到您的default.pa文件。(更改0,0以适合您的设备。)

load-module module-alsa-sink device=hw:0,0

1

添加load-module module-alsa-source device=hw:1,0/etc/pulse/default.pa是正确的做法。但是,必须卸载以下模块,以避免设备冲突(initialization failed您收到的错误):

  • 模块检测
  • 模块检测

仔细查看您的内容,/etc/pulse/default.pa然后删除包含这些模块的行。此外,在这种情况下,无法自动检测到设备,因此您也要加载module-alsa-sink以手动指定接收器。


如果仅手动加载捕获(源)设备,检测播放(接收器)是否会有冲突?
卢卡斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.