如何配置不同的 ALSA 默认值以通过一台设备捕获并通过另一台设备播放?

jga*_*uld 7 linux audio alsa raspbian raspberry-pi3

我正在寻找一些帮助来配置 Raspberry Pi 上的音频,因为到目前为止我所有的谷歌搜索工作都没有成功!

我的设置:

  • Raspberry PI 3(运行 Debian Jessie)
  • 我用来捕捉音频的 USB 网络摄像头(罗技)
  • 用于播放的 3.5 毫米音频插孔中的外部扬声器

到目前为止,我已经设法将 ALSA 配置为默认情况下通过 USB 网络摄像头捕获并通过 3.5 毫米插孔播放。例如,以下工作正常:

# Capture from Webcam
arecord test.wav

# Playback through 3.5mm jack
aplay test.wav
Run Code Online (Sandbox Code Playgroud)

默认情况下,它以 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
                        }
                }
        }
}
Run Code Online (Sandbox Code Playgroud)

而我的/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
Run Code Online (Sandbox Code Playgroud)

和输出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
Run Code Online (Sandbox Code Playgroud)

我遵循了各种指南来设置format,ratechannels属性,但没有任何成功。例如,这不起作用:

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
                }
        }
}
Run Code Online (Sandbox Code Playgroud)

(我还尝试pcm在许多绝望的尝试之一中将这些属性移动到块内!)

事实上,我根本没有在 Linux 上使用音频的经验,我完全迷失了,任何指导将不胜感激!

CL.*_*CL. 0

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

arecord -f S16_LE -r 16000 -c 1 test.wav
Run Code Online (Sandbox Code Playgroud)