为了测试和解决这个问题,我使用全新安装的 Fedora 33,音频设置或配置文件保持不变。
默认情况下,音频严重失真(它是可以辨别正在播放的内容,但总体来说不可用)。
但是,当我安装并启动jackd
并使其运行时,设置如下:
jackd -r -dalsa -dhw:0 -r48000 -p256 -n2
然后尝试一个音频文件mpv
(可以使用JACK),声音清脆清晰,按预期工作:
mpv --ao=jack test.flac
注:也jackd
有-r44100
作品。
这当然不是令人满意的通用方法,因为并非每个软件都能够单独使用 JACK,因此它不适用于 Firefox。
因为 JACK 能够正确处理事情,所以我猜是脉冲或 alsa(自动)设置导致了问题?或者可能是其他什么?
简而言之:我如何使用 ALSA 配置(或脉冲音频)复制 JACK 所做的事情。通过 ALSA 的解决方案是首选使这个答案有效无脉搏以及。当然也有可能是pulsuadio导致了这个问题,我不知道。
附加信息:
- 输出
aplay -l
:
**** List of PLAYBACK Hardware Devices ****
card 0: Studio [Audiofuse Studio], device 0: USB Audio [USB Audio]
Subdevices: 0/1
Subdevice #0: subdevice #0
card 1: Generic [HD-Audio Generic], device 0: ALC1220 Analog [ALC1220 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: Generic [HD-Audio Generic], device 1: ALC1220 Digital [ALC1220 Digital]
Subdevices: 1/1
Subdevice #0: subdevice #0
- 输出
jackd -r -dalsa -dhw:0 -r48000 -p256 -n2
:
jackdmp 1.9.14
Copyright 2001-2005 Paul Davis and others.
Copyright 2004-2016 Grame.
Copyright 2016-2019 Filipe Coelho.
jackdmp comes with ABSOLUTELY NO WARRANTY
This is free software, and you are welcome to redistribute it
under certain conditions; see the file COPYING for details
no message buffer overruns
no message buffer overruns
no message buffer overruns
JACK server starting in non-realtime mode
self-connect-mode is "Don't restrict self connect requests"
audio_reservation_init
Acquire audio card Audio0
creating alsa driver ... hw:0|hw:0|256|2|48000|0|0|nomon|swmeter|-|32bit
configuring for 48000Hz, period = 256 frames (5.3 ms), buffer = 2 periods
ALSA: final selected sample format for capture: 32bit integer little-endian
ALSA: use 2 periods for capture
ALSA: final selected sample format for playback: 32bit integer little-endian
ALSA: use 2 periods for playback
- 输出
aplay --dump-hw-params -D hw:Studio -t raw /dev/zero
:
Playing raw data '/dev/zero' : Unsigned 8 bit, Rate 8000 Hz, Mono
HW Params of device "hw:Studio":
--------------------
ACCESS: MMAP_INTERLEAVED RW_INTERLEAVED
FORMAT: S32_LE
SUBFORMAT: STD
SAMPLE_BITS: 32
FRAME_BITS: [320 576]
CHANNELS: [10 18]
RATE: [44100 192000]
PERIOD_TIME: [125 297211)
PERIOD_SIZE: [6 13107]
PERIOD_BYTES: [240 524288]
PERIODS: [2 1024]
BUFFER_TIME: (62 594422)
BUFFER_SIZE: [12 26214]
BUFFER_BYTES: [480 1048576]
TICK_TIME: ALL
--------------------
aplay: set_params:1343: Sample format non available
Available formats:
- S32_LE
- 输出
cat /proc/asound/Studio/stream0
(仅“播放”):
Playback:
Status: Stop
Interface 1
Altset 1
Format: S32_LE
Channels: 18
Endpoint: 1 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000
Data packet interval: 125 us
Bits: 24
Interface 1
Altset 2
Format: S32_LE
Channels: 18
Endpoint: 1 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000
Data packet interval: 125 us
Bits: 24
Interface 1
Altset 3
Format: S32_LE
Channels: 10
Endpoint: 1 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000
Data packet interval: 125 us
Bits: 24
Channel map: FL FR FC LFE RL RR FLC FRC RC SL
答案1
我明白了,我尝试使用 sox 自己转换文件。然后我得到的是以下错误:播放 WAVE 'CONVERTED-test.wav' :签名 32 位 Little Endian,速率 44100 Hz,立体声 aplay:set_params:1349:通道计数不可用。使用通道 18 和 sox 命令最终使 aplay 正确且清晰地播放文件!注意:当我使用通道 10 的 sox 转换文件时,文件也会由 aplay 播放,但在这种情况下,文件会再次失真。通道的任何其他数字将导致通道计数不可用错误。
因此,看起来 10 通道的接口在驱动程序或其他地方存在错误,您需要说服 Pulseaudio 使用 18 通道的接口。
看着模块 alsa 接收器,你可以把它放在一个ALSA设备上。
这可能意味着您需要在~/.asoundrc
.
您可以配置通道数硬件插件,但我自己从未这样做过,而且我没有具有这些通道选择的硬件。
所以我想这需要对各种配置文件进行一些实验。这很难远程完成,我无法向您提供分步说明。
另一种选择是在 ALSA 跟踪器上提交错误报告。他们可能会发现驱动程序中的问题(如果是通用 USB 驱动程序,这可能需要一个怪癖),或者为您提供配置文件的建议。
ALSA Bug 跟踪解释这里。