ALSA:asound.conf文件已读取,但未与arecord一起使用

时间:2018-07-04 07:19:02

标签: configuration default alsa

我正在使用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.wavarecord /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中...

2 个答案:

答案 0 :(得分:1)

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

大多数应用程序询问设备实际支持的配置。但是,aplay / arecord不会;他们总是尝试使用您为参数设置的配置(或其愚蠢的默认设置)。

答案 1 :(得分:0)

我的信誉不足,无法对上面的答案发表评论,我也不允许投票。但是答案是错误的:

如果您对[...]的默认配置(我认为是soudcard驱动程序设置)不满意,则需要将formatrate条目放入从属定义中。 硬件。 (在我的情况下,默认值为16位音频,但我希望为24位,因为麦克风信号可能非常安静。)

如果您对默认设置不满意,还需要在应用程序中指定formatrate。如果是录音,则默认值为电话标准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,我同意很难找出所有工作原理:-)