USB免驅聲卡教程
可視化測試軟件(Windows)
命令彙總(可跳過)
更新系統並安裝工具:
執行:
sudo apt update&&sudo apt全升級安裝 ALSA:
sudo apt install alsa-base alsa-utils
識別硬件:
列出音頻設備:
aplay -l查看 PCI/USB 音頻設備:
lspci | grep -i audio、lsusb
基礎配置與驗證:
運行配置嚮導:
sudo alsaconf(若可用)調節音量:
alsamixer(按 M 取消靜音,方向鍵調音量,ESC 退出)保存設置:
sudo alsactl store播放測試:測試音頻輸出(確保揚聲器 / 耳機已連接):
Bash# 播放测试音,-D 指定 USB 声卡设备(X 为 aplay -l 显示的 card 编号) speaker-test -c 2 -D plughw:X,0- 重啓音頻服務:
sudo systemctl restart alsa(部分環境可能需要重啓系統:sudo reboot)
Jetson系列主控&Ubuntu系統&樹莓派
命令行調試
一、USB聲卡接入
- 在插入USB聲卡之前,我們使用
lsusb命令查看一下USB設備:
- 然後把USB聲卡插上,再使用
lsusb查看一下,可以看到,多出來的那個就是USB聲卡:
- 然後使用
arecord -l可以列出所有錄音設備,可以看到,我們的USB聲卡設備
- 使用
aplay -l可以列出所有播放設備
二、USB聲卡使用
arecord -l,例如這裏顯示UACDemoV1.0即是我們的聲卡,card 0;device 0,在命令中修改爲plughw:0,0指定該錄音設備
接執行Linux自帶的錄音命令,錄製一段5秒的聲音進行測試
記錄-D plughw: 0,0-fS16_LE-r 16000-d 5-t wav test.wav
其中 plughw:0,0 表示card 0 , device 0,即我們的USB聲卡,需根據arecord -l 找到自身設備號進行修改,如果你的UACDemoV1.0即是我們的聲卡,顯示card 1;device 1,就需要將命令中的plughw:0,0改爲plughw:1,1。 plughw參數提供了自動的格式轉換,可以在不同的數據格式和硬件之間進行橋接。arecord 其他的參數如下:
| 指令 | 含義 | 本指令含義 |
|---|---|---|
| -D | 選擇設備名稱 | 使用外接USB聲卡“plughw:1.0” |
| -f | 錄音格式 | S16_LE代表有符號16位小端序 |
| -r | 採樣率 | 16000是16KHz採樣 |
| -d | 錄音時長 | 錄音5秒 |
| -t | 錄音格式 | wav格式 |
| test. wav | 文件名,可以包含路徑 | 文件名字叫test.wav |
如果聲音過小,輸入命令 alsamixer ,來對音量進行調整,按下F6,選擇USB聲卡,
然後按下F5,將錄音和播音設備都展示出來,我們將錄音的音量按上鍵調高,PCM是播放,CAPTURE MIC是錄音
然後使用aplay命令來播放
插頭S16_LE
參數說明如下:
-D plughw:0,0:指定錄音設備。plughw:0,0 表示使用第一個聲卡的第一個設備。
-f S16_LE:設置音頻文件格式。S16_LE 表示 16 位小端格式(Signed 16-bit Little Endian),一種常用的音頻數據格式,“小端”指數據的低位字節存儲在內存的低地址端。
-r 16000:設置採樣率。
-c 1:設置聲道數。
-d 5:設置錄音時長/秒。
PulseAudio 可視化窗口查看
通過PulseAudio,命令行方式查看
pactl list sources short # 列出當前 PulseAudio 音頻服務器中所有可用的音頻源
49 代表源索引
Alsa _input.usb 表示這是一個USB輸入設備,表示是一個麥克風
s16le 表示 16 位小端(Signed 16-bit Little Endian)的音頻採樣格式。
1ch 表示單聲道。
48000Hz 是採樣率,表示每秒採樣 48000 次
SUSPENDED 代表當前麥克風是掛起的
RUNNING 代表麥克風被佔用中
python調用USB免驅聲卡
自行查找代碼案例,例如搜索“Python調用USB免驅聲卡”
問題彙總
Jetson
- 設備被佔用問題
關閉設置頁面,重新運行命令
若還不行,重新插拔或者重新啓動
查看哪個進程佔用音頻設備
sudo lsof /dev/snd/*
插上聲卡前
插上聲卡後
殺死進程 kill -9 PID ,PID爲插上聲卡後出現的PID,截圖裏是33739
然後重新錄音、播放
樹莓派
1.噪音較大問題
先將麥克風音量置於100 打開終端
$ sudo vi /boot/config.txt #或者可能在/boot/firmware/config.txt在文本最後添加
audio_pwm_mode = 2ESC輸入:wq退出保存
然後重啓
$ reboot2.每次重新啓動會初始化音量設置
重新設置好音量後,
需要保存當前音量配置到系統默認配置文件
執行以下命令將當前設置持久化
sudo chmod 664 /var/lib/alsa/asound.state
sudo alsactl storeUbuntu虛擬機
- 錄音時有噪音雜音
解決辦法:USB控制器兼容性改爲3.0或3.1
RDK x3&x5
查看設備編號
檢查聲卡是否存在,檢查設備編號。
通過 cat /proc/asound/cards 命令確認聲卡是否註冊
0 [duplexaudio ]: simple-card - duplex-audio
duplex-audio通過 cat /proc/asound/devices 命令確認邏輯設備
root@ubuntu:~# cat /proc/asound/devices
2: [ 0- 0]: digital audio playback
3: [ 0- 0]: digital audio capture
4: [ 0] : control
33: : timer通過 ls /dev/snd/ 命令檢查用戶空間的實際設備文件
root@ubuntu:~# ls /dev/snd/
by-path/ controlC0 pcmC0D0c pcmC0D0p timer通過上述查詢,可以確認,聲卡0對應的是板載聲卡;設備也是存在的, 且設備號爲 0-0 , 實際我們操作的設備應該是 pcmC0D0p 和 pcmC0D0c。
錄製一段5秒的聲音進行測試
記錄-D plughw: 0,0-fS16_LE-r 16000-d 5-t wav test.wav
其中 plughw:0,0 表示card 0 , device 0,即我們的USB聲卡,plughw參數提供了自動的格式轉換,可以在不同的數據格式和硬件之間進行橋接。arecord 其他的參數如下:
| 指令 | 含義 | 本指令含義 |
|---|---|---|
| -D | 選擇設備名稱 | 使用外接USB聲卡“plughw:1.0” |
| -f | 錄音格式 | S16_LE代表有符號16位小端序 |
| -r | 採樣率 | 16000是16KHz採樣 |
| -d | 錄音時長 | 錄音5秒 |
| -t | 錄音格式 | wav格式 |
| test. wav | 文件名,可以包含路徑 | 文件名字叫test.wav |
如果聲音過小,輸入命令 alsamixer ,來對音量進行調整,按下F6,選擇USB聲卡,
然後按下F5,將錄音和播音設備都展示出來,我們將錄音的音量按上鍵調高,PCM是播放,CAPTURE MIC是錄音
然後使用aplay命令來播放
插頭S16_LE
參數說明如下:
-D plughw:0,0:指定錄音設備。plughw:0,0 表示使用第一個聲卡的第一個設備。
-f S16_LE:設置音頻文件格式。S16_LE 表示 16 位小端格式(Signed 16-bit Little Endian),一種常用的音頻數據格式,“小端”指數據的低位字節存儲在內存的低地址端。
-r 16000:設置採樣率。
-c 1:設置聲道數。
-d 5:設置錄音時長/秒。
常見問題
RDK 板卡如何區分 USB 聲卡與板載聲卡?
RDK X3 系列的音頻子板如何與 USB 聲卡共存並同時使用?
RDKS100 如何通過圖形化界面方式支持音頻功能使用?
參考 RDK多媒體處理與應用
檢查最基本的音頻驅動
能否使用 USB 免驅聲卡,核心取決於內核
是否啓用了 USB Audio Class 支持(即
CONFIG_USB_AUDIO);是否加載了相應的內核模塊(如
snd-usb-audio)
只要內核支持,再補裝基礎音頻工具,就能正常使用;若內核被裁剪,則需要重新編譯內核啓用驅動。
步驟 1: 檢查內核是否支持 snd_usb_audio
*# 方法1: 检查是否已加载驱动模块*
lsmod | grep snd_usb_audio
*# 方法2: 检查内核是否内置该模块(即使未加载)*
modinfo snd_usb_audio *# 有输出=内核支持;无输出=内核未编译该模块*若 modinfo 無輸出:說明系統內核裁剪了該驅動,需重新編譯內核,在 .config 中開啓:
CONFIG_SND_USB_AUDIO=m # 编译为模块,或=y 内置到内核
CONFIG_SND_USB_UA101=y
CONFIG_SND_USB_CAIAQ=y若 modinfo 有輸出:直接加載模塊:
sudo modprobe snd_usb_audio步驟 2: 安裝基礎音頻工具(精簡版默認無)
精簡版系統通常沒有 alsa-utils 這類工具,需手動安裝:
# Ubuntu/Debian 系统
sudo apt update && sudo apt install -y alsa-utils usbutils
# 无网络环境: 下载 alsa-utils 离线包,用 dpkg -i 安装步驟 3: 驗證 USB 聲卡識別與功能
1.插入 USB 聲卡,執行命令確認設備識別:
# 查看 USB 设备枚举
lsusb | grep -i audio
# 查看音频设备列表
aplay -l輸出中出現 USB Audio 相關的 card X 條目,說明識別成功。
2.測試音頻輸出(確保揚聲器 / 耳機已連接):
# 播放测试音,-D 指定 USB 声卡设备(X 为 aplay -l 显示的 card 编号)
speaker-test -c 2 -D plughw:X,0步驟 4: (可選)安裝音頻服務(桌面 / 後臺播放需求)
若需要在後臺播放音頻、或搭配桌面環境使用,精簡版需額外安裝音頻服務:
# 轻量级服务(推荐,无桌面也能用)
sudo apt install -y pulseaudio
# 或 PipeWire(Ubuntu 22.04+ 推荐)
sudo apt install -y pipewire pipewire-alsa精簡版系統的常見坑點及解決
1.權限不足,普通用戶無法訪問聲卡
解決:將用戶加入 audio組,重啓後生效:
sudo usermod -aG audio $USER2.無聲音,但設備識別正常
解決:用 alsamixer調大音量、解除靜音(按 M 鍵取消靜音):
alsamixer -c X # X 为 USB 声卡的 card 编号3.內核版本過低,不支持新型 USB 聲卡時,分以下兩種情況
sudo apt install -y linux-generic && sudo rebootsudo modprobe snd-hda-intel model=generic #(不同机型可尝试不同 model 值)
# 创建声卡驱动配置文件
sudo echo "options snd-hda-intel model=generic" > /etc/modprobe.d/sound.conf
sudo reboot