Linux 如何配置不同的ALSA默认值,以便通过一个设备捕获和通过另一个设备播放?

Linux 如何配置不同的ALSA默认值,以便通过一个设备捕获和通过另一个设备播放?,linux,audio,raspbian,alsa,raspberry-pi3,Linux,Audio,Raspbian,Alsa,Raspberry Pi3,我正在寻找一些帮助,在配置一个树莓Pi的音频,因为我所有的谷歌努力已经落空了 我的设置: 树莓皮3(运行Debian Jessie) USB网络摄像头(Logitech),用于捕获音频 3.5毫米音频插孔中的外部扬声器,用于播放 到目前为止,我已经成功地将ALSA配置为默认情况下通过USB网络摄像头进行捕获,并通过3.5毫米插孔进行播放。例如,以下方法可以很好地工作: # Capture from Webcam arecord test.wav # Playback through 3.5

我正在寻找一些帮助,在配置一个树莓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
我按照各种指南设置了
格式
速率
频道
属性,但没有成功。例如,这不起作用:

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上使用音频的经验,我完全不知所措,任何指导都将不胜感激

aplay
使用文件实际具有的任何样本格式,但是
arecord
会创建一个新文件,因此如果您不希望使用愚蠢的默认值,则必须指定样本格式:

arecord -f S16_LE -r 16000 -c 1 test.wav

是的,我通过指定参数使录制工作正常,但我试图理解如何配置,这样在录制时就不需要指定任何命令行参数。我原以为
~/.asoundrc
文件中的
格式
速率
频道
参数就可以做到这一点(也许他们做到了,我只是用错了),但到目前为止我还没有做到!配置文件中的这些参数可以限制设备,但除非应用程序也使用相同的值,否则这不起作用。(一些应用程序询问设备实际支持什么;
arecord
不支持。)感谢您的澄清,这非常有帮助。因此,我可以创建一个简单的shell脚本,解析默认设置的
.asoundrc
,然后使用这些参数调用
arecord