我正在使用ALSA来配置麦克风,但是在stackoverflow / alsa doc /其他来源上搜索了几个小时之后,我不明白录音的工作原理...
我正在尝试设置默认记录
签名的16位Little Endian,频率48000 Hz,立体声
等效的arecord
CLI命令是(以我为例):
arecord /tmp/test.wav -f dat -D sysdefault:CARD=1
我尝试使用/etc/asound.conf
我写这个:
pcm.!default {
type asym
playback.pcm {
type plug
slave.pcm "hw:1,0"
}
capture.pcm "multi"
}
pcm.multi {
type plug
slave.pcm "multiapps"
}
pcm.multiapps {
type dsnoop
ipc_key 666666
slave {
pcm "hw:1,0"
format "S16_LE"
rate 48000
}
}
ctl.!default {
type hw
card 1
}
但是当我尝试简单的时候:
arecord /tmp/test.wav
或arecord /tmp/test.wav -D default
失败并
捕获WAVE'/tmp/test.wav':无符号8位,频率8000 Hz,单声道 记录:set_params:1299:ce格式d'échantillonagen'est pas 不适用可用格式: -S16_LE
只是测试,我尝试
arecord /tmp/test.wav -D multi
我成功了一半,但可以正常使用
捕获WAVE'/tmp/test.wav':无符号8位,频率8000 Hz,单声道
有人可以向我解释我错过了什么吗? :|
谢谢!
-编辑-
我意识到/etc/asound.conf与〜/ .asound重叠。
所以,我在第二个中复制了第一个。
默认情况下不会再致命,但始终在8k / 8bit中...
答案 0 :(得分:1)
将format
和rate
之类的条目放入从属定义中会限制应用程序可以选择的可能配置。
大多数应用程序询问设备实际支持的配置。但是,aplay
/ arecord
不会;他们总是尝试使用您为参数设置的配置(或其愚蠢的默认设置)。
答案 1 :(得分:0)
我的信誉不足,无法对上面的答案发表评论,我也不允许投票。但是答案是错误的:
如果您对[...]的默认配置(我认为是soudcard驱动程序设置)不满意,则需要将format
和rate
条目放入从属定义中。 硬件。
(在我的情况下,默认值为16位音频,但我希望为24位,因为麦克风信号可能非常安静。)
如果您对默认设置不满意,还需要在应用程序中指定format
和rate
。如果是录音,则默认值为电话标准8b / 8kHz(因此一点也不傻!-尽管我更喜欢16b / 32kHz)。
如果您提供了可以将硬件格式转换为应用程序格式的正确的alsa元素,则将自动进行转换(执行arecord -v
以查看转换)。您可以在“ pcm.multi”中使用“ plug”,这样就可以了。
因此,您现在仅需要在应用程序中指定所需的格式。所以请RTFM,man aplay
可以做到:
arecord -D multi -c 1 -r 48000 -f S16_LE -v -t wav /tmp/test.wav
(关于RTFM,我同意很难找出所有工作原理:-)