1.設(shè)置默認(rèn)聲卡為USB聲卡
在$HOME下新建.asoundrc
$cd $HOME
$nano .asoundrc
輸入以下內(nèi)容
defaults.ctl.card 1
defaults.pcm.card 1
最后的1是USB聲卡的編號(hào)嚎幸,可通過(guò)以下命令查看
$aplay -l
或
$cat /proc/asound/cards
然后重啟一下alsa就把1號(hào)聲卡(usb聲卡)設(shè)置成默認(rèn)聲卡了扁眯。
測(cè)試錄音
$arecord -d 10 test.wav
測(cè)試播音
$aplay test.wav
2.播音和錄音為不同聲卡時(shí)恩商,可以參考以下配置钝荡,修改~/.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.調(diào)節(jié)聲卡音量
打開終端酸役,輸入
$alsamixer
即可調(diào)節(jié)音量
按 f6 會(huì)出現(xiàn)聲卡列表
一般來(lái)說(shuō)浸遗,usb 聲卡總是第二位的猫胁,聲卡編號(hào)是1(默認(rèn)聲卡是0)
4.測(cè)試指定聲卡
arecord -D "plughw:5,0" -d 3 temp.wav
aplay -D "plughw:1,0" temp.wav
5. 重啟Card 編號(hào)改變處理
Linux設(shè)備如果插拔和重啟的時(shí)候, 聲卡設(shè)備的 id 分配是完全靠?jī)?nèi)核心情的, 你這次調(diào)用的是 id 1的聲卡設(shè)備, 下次就有可能變成 0 和 2等其他 id. 遇到這種情況, 如果聲卡設(shè)備只有麥克風(fēng)而沒(méi)有揚(yáng)聲器(比如USB攝像頭), 就會(huì)報(bào) jack server 的錯(cuò)誤, 無(wú)法正常發(fā)出聲音.怎么辦?
/proc/asound/pcm 文件中會(huì)有所有聲卡設(shè)備的 "設(shè)備號(hào)-序列號(hào)" 的信息, 我們只用
打開 /proc/asound/pcm 文件, 過(guò)濾出具有 playback 1 的設(shè)備
提取出 "設(shè)備號(hào)-序列號(hào)" 的信息
通過(guò) mpg123 指定 設(shè)備號(hào)-序列號(hào) 信息, 即可播放指定聲卡硬件播放聲音
示例代碼如下:
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