Skip to content

USB免驅聲卡教程

可視化測試軟件(Windows)

audio_tools.7z

命令彙總(可跳過)

  • 更新系統並安裝工具:

    • 執行:sudo apt update&&sudo apt全升級

    • 安裝 ALSA:sudo apt install alsa-base alsa-utils

  • 識別硬件:

    • 列出音頻設備:aplay -l

    • 查看 PCI/USB 音頻設備:lspci | grep -i audiolsusb

  • 基礎配置與驗證:

    • 運行配置嚮導: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聲卡接入

  1. 在插入USB聲卡之前,我們使用 lsusb 命令查看一下USB設備:

Image

  1. 然後把USB聲卡插上,再使用 lsusb 查看一下,可以看到,多出來的那個就是USB聲卡:

Image

  1. 然後使用 arecord -l 可以列出所有錄音設備,可以看到,我們的USB聲卡設備

Image

  1. 使用 aplay -l 可以列出所有播放設備

Image

二、USB聲卡使用

arecord -l,例如這裏顯示UACDemoV1.0即是我們的聲卡,card 0;device 0,在命令中修改爲plughw:0,0指定該錄音設備

Image

接執行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,1plughw參數提供了自動的格式轉換,可以在不同的數據格式和硬件之間進行橋接。arecord 其他的參數如下:

指令含義本指令含義
-D選擇設備名稱使用外接USB聲卡“plughw:1.0”
-f錄音格式S16_LE代表有符號16位小端序
-r採樣率16000是16KHz採樣
-d錄音時長錄音5秒
-t錄音格式wav格式
test. wav文件名,可以包含路徑文件名字叫test.wav

如果聲音過小,輸入命令 alsamixer ,來對音量進行調整,按下F6,選擇USB聲卡,

Image

然後按下F5,將錄音和播音設備都展示出來,我們將錄音的音量按上鍵調高,PCM是播放,CAPTURE MIC是錄音

Image

然後使用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 可視化窗口查看

Image

通過PulseAudio,命令行方式查看

pactl list sources short # 列出當前 PulseAudio 音頻服務器中所有可用的音頻源

Image

49 代表源索引

Alsa _input.usb 表示這是一個USB輸入設備,表示是一個麥克風

s16le 表示 16 位小端(Signed 16-bit Little Endian)的音頻採樣格式。

1ch 表示單聲道。

48000Hz 是採樣率,表示每秒採樣 48000 次

SUSPENDED 代表當前麥克風是掛起的

RUNNING 代表麥克風被佔用中

python調用USB免驅聲卡

自行查找代碼案例,例如搜索“Python調用USB免驅聲卡

問題彙總

Jetson

  1. 設備被佔用問題

Image

關閉設置頁面,重新運行命令

若還不行,重新插拔或者重新啓動

查看哪個進程佔用音頻設備

sudo lsof /dev/snd/*

插上聲卡前

Image

插上聲卡後

Image

殺死進程 kill -9 PID ,PID爲插上聲卡後出現的PID,截圖裏是33739

然後重新錄音、播放

樹莓派

1.噪音較大問題

先將麥克風音量置於100 打開終端

Bash
$ sudo vi /boot/config.txt     #或者可能在/boot/firmware/config.txt

在文本最後添加

Bash
audio_pwm_mode = 2

ESC輸入:wq退出保存

然後重啓

Bash
$ reboot

2.每次重新啓動會初始化音量設置

重新設置好音量後,

需要保存當前音量配置到系統默認配置文件

執行以下命令將當前設置持久化

Python
sudo chmod 664 /var/lib/alsa/asound.state
sudo alsactl store

Ubuntu虛擬機

  1. 錄音時有噪音雜音

解決辦法:USB控制器兼容性改爲3.0或3.1

RDK x3&x5

查看設備編號

檢查聲卡是否存在,檢查設備編號。

通過 cat /proc/asound/cards 命令確認聲卡是否註冊

Shell
0 [duplexaudio    ]: simple-card - duplex-audio
                      duplex-audio

通過 cat /proc/asound/devices 命令確認邏輯設備

Shell
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/ 命令檢查用戶空間的實際設備文件

Shell
root@ubuntu:~# ls /dev/snd/
by-path/   controlC0  pcmC0D0c   pcmC0D0p   timer

通過上述查詢,可以確認,聲卡0對應的是板載聲卡;設備也是存在的, 且設備號爲 0-0 , 實際我們操作的設備應該是 pcmC0D0ppcmC0D0c

錄製一段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聲卡,

Image

然後按下F5,將錄音和播音設備都展示出來,我們將錄音的音量按上鍵調高,PCM是播放,CAPTURE MIC是錄音

Image

然後使用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

Plain
*# 方法1: 检查是否已加载驱动模块*
lsmod | grep snd_usb_audio

*# 方法2: 检查内核是否内置该模块(即使未加载)*
modinfo snd_usb_audio  *# 有输出=内核支持;无输出=内核未编译该模块*

modinfo 無輸出:說明系統內核裁剪了該驅動,需重新編譯內核,在 .config 中開啓:

Plain
CONFIG_SND_USB_AUDIO=m  # 编译为模块,或=y 内置到内核
CONFIG_SND_USB_UA101=y
CONFIG_SND_USB_CAIAQ=y

modinfo 有輸出:直接加載模塊:

Bash
sudo modprobe snd_usb_audio

步驟 2: 安裝基礎音頻工具(精簡版默認無)

精簡版系統通常沒有 alsa-utils 這類工具,需手動安裝:

Bash
# Ubuntu/Debian 系统
sudo apt update && sudo apt install -y alsa-utils usbutils

# 无网络环境: 下载 alsa-utils 离线包,用 dpkg -i 安装

步驟 3: 驗證 USB 聲卡識別與功能

1.插入 USB 聲卡,執行命令確認設備識別:

Bash
# 查看 USB 设备枚举
lsusb | grep -i audio

# 查看音频设备列表
aplay -l

輸出中出現 USB Audio 相關的 card X 條目,說明識別成功。

2.測試音頻輸出(確保揚聲器 / 耳機已連接):

Bash
# 播放测试音,-D 指定 USB 声卡设备(X 为 aplay -l 显示的 card 编号)
speaker-test -c 2 -D plughw:X,0

步驟 4: (可選)安裝音頻服務(桌面 / 後臺播放需求)

若需要在後臺播放音頻、或搭配桌面環境使用,精簡版需額外安裝音頻服務:

Bash
# 轻量级服务(推荐,无桌面也能用)
sudo apt install -y pulseaudio

# 或 PipeWire(Ubuntu 22.04+ 推荐)
sudo apt install -y pipewire pipewire-alsa

精簡版系統的常見坑點及解決

1.權限不足,普通用戶無法訪問聲卡

解決:將用戶加入 audio組,重啓後生效:

Bash
sudo usermod -aG audio $USER

2.無聲音,但設備識別正常

解決:用 alsamixer調大音量、解除靜音(按 M 鍵取消靜音):

Bash
alsamixer -c X  # X 为 USB 声卡的 card 编号

3.內核版本過低,不支持新型 USB 聲卡時,分以下兩種情況

Bash
sudo apt install -y linux-generic && sudo reboot
Python
sudo modprobe snd-hda-intel model=generic #(不同机型可尝试不同 model 值)
# 创建声卡驱动配置文件
sudo echo "options snd-hda-intel model=generic" > /etc/modprobe.d/sound.conf
sudo reboot