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.wavarecord /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 位中...

formatrate 之类的条目放入从属定义会限制应用程序可以选择的可能配置。

大多数应用程序询问设备它实际支持什么配置。但是,aplay/arecord 没有;他们总是尝试使用您通过参数设置的配置(或他们愚蠢的默认值)。

接受的答案是错误的:

如果您对默认配置(由声卡驱动程序设置)不满意,您需要formatrate条目放入从定义中我认为)硬件。 (在我的例子中,默认是 16 位音频,但我想要 24 位,因为麦克风信号可能非常安静。)

如果您对默认值不满意,还需要在 应用程序 中指定 formatrate。在 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,我同意很难弄清楚它是如何工作的:-)