树莓派使用USB声卡设置

1.设置默认声卡为USB声卡

在$HOME下新建.asoundrc
$cd $HOME
$nano .asoundrc
输入以下内容
defaults.ctl.card 1
defaults.pcm.card 1
最后的1是USB声卡的编号,可通过以下命令查看
$aplay -l
或
$cat /proc/asound/cards
然后重启一下alsa就把1号声卡(usb声卡)设置成默认声卡了。
测试录音
$arecord -d 10 test.wav
测试播音
$aplay test.wav

2.播音和录音为不同声卡时,可以参考以下配置,修改~/.asoundrc

pcm.!default {
    type asym
    playback.pcm {
        type plug
        slave.pcm "hw:0,0"
    }
    capture.pcm {
        type plug
        slave.pcm "hw:1,0"
}
其中,hw:1,0表示card 1 device 0

3.调节声卡音量

打开终端,输入
$alsamixer
即可调节音量
按 f6 会出现声卡列表
一般来说,usb 声卡总是第二位的,声卡编号是1(默认声卡是0)

4.测试指定声卡

arecord -D "plughw:5,0" -d 3 temp.wav
aplay -D "plughw:1,0" temp.wav

5. 重启Card 编号改变处理

Linux设备如果插拔和重启的时候, 声卡设备的 id 分配是完全靠内核心情的, 你这次调用的是 id 1的声卡设备, 下次就有可能变成 0 和 2等其他 id. 遇到这种情况, 如果声卡设备只有麦克风而没有扬声器(比如USB摄像头), 就会报 jack server 的错误, 无法正常发出声音.怎么办?
/proc/asound/pcm 文件中会有所有声卡设备的 "设备号-序列号" 的信息, 我们只用
打开 /proc/asound/pcm 文件, 过滤出具有 playback 1 的设备
提取出 "设备号-序列号" 的信息
通过 mpg123 指定 设备号-序列号 信息, 即可播放指定声卡硬件播放声音
示例代码如下:



def get_sound_card_id():
    try:
        with open("/proc/asound/pcm") as f:
            s = f.read()
            for line in s.split("\n"):
                if "playback 1" in line:
                    number = line.split(":")[0].split("-")
                    return ("%s,%s" % (int(number[0]), int(number[1])))
    except:
        return "0,0"

def play_sound(sound_file):
    sound_card_id = get_sound_card_id()

    play_command = "mpg123 -o alsa -a hw:%s %s" % (sound_card_id, sound_file)
    subprocess.Popen(play_command, shell=True)

玩树莓派还是Python好啊, 轻描淡写几行代码就搞定了

alsamixer

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容