美文网首页
树莓派使用USB声卡设置

树莓派使用USB声卡设置

作者: 不器1843 | 来源:发表于2019-10-17 15:10 被阅读0次

    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

    相关文章

      网友评论

          本文标题:树莓派使用USB声卡设置

          本文链接:https://www.haomeiwen.com/subject/sibqmctx.html