ALSA:asound.conf 文件已读取但未与 arecord 一起使用
ALSA: asound.conf file read but not used with arecord
我正在使用 ALSA 配置麦克风,但是在 Whosebug/alsa doc/other 资源上搜索了几个小时后,我不明白 arecord 是如何工作的...
我正在尝试设置默认记录
Signed 16 bit Little Endian, Fréquence 48000 Hz, Stéréo
等效的 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
它失败了
Capture WAVE '/tmp/test.wav' : Unsigned 8 bit, Fréquence 8000 Hz, Mono
arecord: set_params:1299: Ce format d'échantillonage n'est pas
disponible Available formats:
- S16_LE
只是为了测试,我试试
arecord /tmp/test.wav -D multi
我成功了一半,它可以工作但是配置不正确
Capture WAVE '/tmp/test.wav' : Unsigned 8 bit, Fréquence 8000 Hz, Mono
有人可以向我解释我错过了什么吗? :|
谢谢!
-- 编辑 --
我意识到 /etc/asound.conf 被 ~/.asound 重叠了。
所以,我把第一个复制到第二个。
默认情况下不再致命,但总是在 8k/8 位中...
将 format
和 rate
之类的条目放入从属定义会限制应用程序可以选择的可能配置。
大多数应用程序询问设备它实际支持什么配置。但是,aplay
/arecord
没有;他们总是尝试使用您通过参数设置的配置(或他们愚蠢的默认值)。
接受的答案是错误的:
如果您对默认配置(由声卡驱动程序设置)不满意,您需要将format
和rate
条目放入从定义中我认为)硬件。 (在我的例子中,默认是 16 位音频,但我想要 24 位,因为麦克风信号可能非常安静。)
如果您对默认值不满意,还需要在 应用程序 中指定 format
和 rate
。在 arecord 的情况下,默认是电话标准 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,我同意很难弄清楚它是如何工作的:-)
我正在使用 ALSA 配置麦克风,但是在 Whosebug/alsa doc/other 资源上搜索了几个小时后,我不明白 arecord 是如何工作的...
我正在尝试设置默认记录
Signed 16 bit Little Endian, Fréquence 48000 Hz, Stéréo
等效的 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
它失败了
Capture WAVE '/tmp/test.wav' : Unsigned 8 bit, Fréquence 8000 Hz, Mono arecord: set_params:1299: Ce format d'échantillonage n'est pas disponible Available formats: - S16_LE
只是为了测试,我试试
arecord /tmp/test.wav -D multi
我成功了一半,它可以工作但是配置不正确
Capture WAVE '/tmp/test.wav' : Unsigned 8 bit, Fréquence 8000 Hz, Mono
有人可以向我解释我错过了什么吗? :|
谢谢!
-- 编辑 --
我意识到 /etc/asound.conf 被 ~/.asound 重叠了。
所以,我把第一个复制到第二个。
默认情况下不再致命,但总是在 8k/8 位中...
将 format
和 rate
之类的条目放入从属定义会限制应用程序可以选择的可能配置。
大多数应用程序询问设备它实际支持什么配置。但是,aplay
/arecord
没有;他们总是尝试使用您通过参数设置的配置(或他们愚蠢的默认值)。
接受的答案是错误的:
如果您对默认配置(由声卡驱动程序设置)不满意,您需要将format
和rate
条目放入从定义中我认为)硬件。 (在我的例子中,默认是 16 位音频,但我想要 24 位,因为麦克风信号可能非常安静。)
如果您对默认值不满意,还需要在 应用程序 中指定 format
和 rate
。在 arecord 的情况下,默认是电话标准 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,我同意很难弄清楚它是如何工作的:-)