如何配置不同的 ALSA 默认值以通过一台设备捕获并通过另一台设备播放?
Posted
技术标签:
【中文标题】如何配置不同的 ALSA 默认值以通过一台设备捕获并通过另一台设备播放?【英文标题】:How to configure different ALSA defaults for capture through one device and playback through another? 【发布时间】:2016-07-14 08:19:49 【问题描述】:我正在寻求一些帮助来配置 Raspberry Pi 上的音频,因为到目前为止我在谷歌上的所有努力都失败了!
我的设置:
Raspberry PI 3(运行 Debian Jessie) 我用来捕获音频的 USB 网络摄像头 (Logitech) 用于播放的 3.5 毫米音频插孔中的外部扬声器到目前为止,我已经设法将 ALSA 配置为默认情况下通过 USB 网络摄像头捕获并通过 3.5 毫米插孔播放。例如,以下工作正常:
# Capture from Webcam
arecord test.wav
# Playback through 3.5mm jack
aplay test.wav
默认情况下,这会捕获 8 位、8KHz、单声道的音频。但是,我希望默认捕获过程使用 16 位、16KHz、单声道设置,这就是我遇到的问题。
这是我的工作 ~/.asoundrc
文件:
pcm.!default
type asym
playback.pcm
type hw
card 1
device 0
capture.pcm
type plug
slave
pcm
type hw
card 0
device 0
还有我的/etc/modprobe.d/alsa-base.conf
:
options snd_usb_audio index=0
options snd_bcm2835 index=1
options snd slots=snd-usb-audio,snd-bcm2835
还有cat /etc/asound/cards
的输出:
0 [U0x46d0x825 ]: USB-Audio - USB Device 0x46d:0x825
USB Device 0x46d:0x825 at usb-3f980000.usb-1.4, high speed
1 [ALSA ]: bcm2835 - bcm2835 ALSA
bcm2835 ALSA
我已按照各种指南设置format
、rate
和channels
属性,但均未成功。例如,这不起作用:
pcm.!default
type asym
playback.pcm
type hw
card 1
device 0
capture.pcm
type plug
slave
pcm
type hw
card 0
device 0
format S16_LE
rate 16000
channels 1
(我还尝试将这些属性移动到 pcm
块中,这是许多绝望的尝试之一!)
事实上,我完全没有在 Linux 上使用音频的经验,完全迷失了方向,非常感谢任何指导!
【问题讨论】:
【参考方案1】:aplay
使用文件实际具有的任何示例格式,但arecord
创建一个新文件,因此如果您不想要愚蠢的默认值,则必须指定示例格式:
arecord -f S16_LE -r 16000 -c 1 test.wav
【讨论】:
是的,我已经通过指定参数进行录制,但我正在尝试了解如何配置内容,因此我不需要在录制时指定任何命令行参数。我认为~/.asoundrc
文件中的format
、rate
和channels
参数可以做到这一点(也许他们做到了,而我只是错误地使用了它们),但到目前为止我还不够!跨度>
配置文件中的那些参数可以限制设备,但除非应用程序也使用相同的值,否则这不起作用。 (一些应用程序会询问设备它实际支持什么;arecord
不会。)
感谢您的澄清,这很有帮助。因此,也许我可以创建一个简单的 shell 脚本,解析 .asoundrc
的默认设置,然后使用这些参数调用 arecord
。以上是关于如何配置不同的 ALSA 默认值以通过一台设备捕获并通过另一台设备播放?的主要内容,如果未能解决你的问题,请参考以下文章