2026/1/12 19:53:29
网站建设
项目流程
云霄建设局网站,高端 网站开发,怎么做个人网站,网站开发服务流程目录
目录
前言
DTS配置的参考
内核配置的参考
USB Subsystem内核配置
USB Phy内核配置
USB Host Core驱动内核配置
USB EHCI驱动内核配置
芯片平台USB Host Controller驱动内核配置
ALSA相关内核配置
验证测试的参考
总结 前言
USB外置声卡一般是基于USB音频类UAC标准的设备通过USB接口连接计算机实现音频的输入输出功能。UAC标准是核心基础UAC是USB规范中的音频类标准定义了音频设备与主机的通信方式包括设备枚举、音频数据传输和控制功能支持即插即用并在Windows、macOS、Linux等系统上广泛兼容。该标准分为UAC1.0和UAC2.0等版本其中UAC2.0支持更高采样率如192kHz/24bit和更高效的数据传输。工作原理与关键特性USB声卡通过UAC协议使用USB控制传输设置参数、批量传输传输音频数据并利用中断传输传递状态信息。其关键特性包括高兼容性无需额外驱动即可在多种操作系统上运行。灵活的音频格式支持可配置采样率、位深度和通道数例如支持双声道16bit/48kHz或更高规格。低延迟与高保真部分设备信噪比达85dB适合专业录音和播放。常见应用场景USB声卡广泛应用于音乐制作、语音采集、游戏、家庭影院和音视频会议等场景。USB声卡是外置声卡即外挂USB设备作为声卡我们调试过程中可以将主控的对应的USB接口配置成HOST模式此时需要打开Linux ALSA驱动中的USB声卡驱动配置。DTS配置的参考/* usb20 host controller */ usb_1: usb1YYYYYYYY { compatible xxx,xxx-usb; reg 0xYYYYYYYY 0xYYY; interrupts GIC_SPI INT_USB20_HOST IRQ_TYPE_LEVEL_HIGH; clocks ahbX_gate 9, ahbX_reset 9; clock-names usb_gate, usb_reset; xxx,usbphy usbphy_1; dr_mode host; /* 配置成了USB host模式 */ ...内核配置的参考USB Subsystem内核配置CONFIG_USB_SUPPORTy CONFIG_USB_ARCH_HAS_HCDyUSB Phy内核配置CONFIG_USB_PHYy CONFIG_USB_NX_PHYyUSB Host Core驱动内核配置CONFIG_USB_COMMONy CONFIG_USBy CONFIG_USB_ANNOUNCE_NEW_DEVICESy CONFIG_USB_DEFAULT_PERSISTyUSB EHCI驱动内核配置CONFIG_USB_EHCI_HCDy CONFIG_USB_EHCI_ROOT_HUB_TTy CONFIG_USB_EHCI_TT_NEWSCHEDy CONFIG_USB_EHCI_HCD_PLATFORMy芯片平台USB Host Controller驱动内核配置CONFIG_USB_XXXy CONFIG_USB_XXX_HOSTy CONFIG_USB_XXX_DEBUGyALSA相关内核配置CONFIG_SOUNDy CONFIG_SNDy CONFIG_SND_USBy CONFIG_SND_USB_AUDIOy验证测试的参考1. 烧录固件后正常开机接入USB声卡命令行终端可以输入dmesg | grep usb探测到该USB接口的声卡的打印如下# dmesg | grep usb ... [ 0.986351] usbcore: registered new interface driver snd-usb-audio [ 0.993497] usb 1-1.1: new full-speed USB device number 3 using lb_hdc [ 1.150058] usb 1-1.1: New USB device found, idVendor1b3f, idProduct2008, bcdDevice 1.00 [ 1.150068] usb 1-1.1: New USB device strings: Mfr1, Product2, SerialNumber0 [ 1.150074] usb 1-1.1: Product: USB Audio Device [ 1.150080] usb 1-1.1: Manufacturer: GeneralPlus [ 1.177847] input: GeneralPlus USB Audio Device as /devices/platform/xxxxxxxx.usb1/xxx_hdc.1/usb1/1-1/1-1.1/1-1.1:1.3/0003:1B3F:2008.0001/input/input5 [ 1.177999] hid-generic 0003:1B3F:2008.0001: input: USB HID v2.01 Device [GeneralPlus USB Audio Device] on usb-xxx_hdc.1-1.1/input3 ...2. 列出USB设备列表查看USB声卡的USB设备信息是否存在。例如# lsusb Bus 001 Device 001: ID 1d6b:0002 Bus 001 Device 004: ID 0bda:c820 Bus 001 Device 002: ID 05e3:0608 Bus 001 Device 003: ID 1b3f:2008 这里USB声卡的VID是1b3fPID是2008。3. 查看音频设备信息。例如# cat /proc/asound/cards 0 [xxxcard ]: xxx_card - xxx_card 主控内置的音频编解码器设备 xxx_card 1 [Device ]: USB-Audio - USB Audio Device 外置的USB声卡设备 GeneralPlus USB Audio Device at usb-xxx_hdc.1-1.2, full speed # arecord -l **** List of CAPTURE Hardware Devices **** card 0: xxxcard [xxx_card], device 0: audio xxx_ac_dai-0 [] 主控内置的音频编解码器设备 Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio] 外置的USB声卡设备 Subdevices: 1/1 Subdevice #0: subdevice #0 # aplay -l **** List of PLAYBACK Hardware Devices **** card 0: xxxcard [xxx_card], device 0: audio xxx_ac_dai-0 []主控内置的音频编解码器设备 Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio] 外置的USB声卡设备 Subdevices: 1/1 Subdevice #0: subdevice #0 # cat /proc/asound/card1/usbbus 001/003 # cat /proc/asound/card1/usbid 1b3f:20084. 录制音频测试。例如录制USB声卡20秒声音# arecord -D plughw:1,0 -f S16_LE -r 48000 -c 2 -d 20 -t wav /mnt/card/test.wav Recording WAVE /mnt/card/test.wav : Signed 16 bit Little Endian, Rate 16000 Hz, Mono其中-D用于选择设备名称这里使用外置USB声卡plughw:1,0-f用于指定录音格式S16_LE代表有符号16位小端序-r用于指定采样率48000表示48KHz采样-c用于指定声道数2表示双声道-d用于指定录音的时长单位为秒。如果未指定此参数录音将默认持续进行直到用户手动中断例如通过按 CtrlC-t用于指定录音文件格式wav表示wav格式/mnt/card/test.wav表示指定保存的文件路径或文件名。5. 播放音频测试。例如播放20秒声音# aplay -v /mnt/card/test.wav Playing WAVE /mnt/card/test.wav : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo Plug PCM: Direct Stream Mixing PCM Its setup is: stream : PLAYBACK access : RW_INTERLEAVED format : S16_LE subformat : STD channels : 2 rate : 48000 exact rate : 48000 (48000/1) msbits : 16 buffer_size : 7680 period_size : 1920 period_time : 40000 tstamp_mode : NONE tstamp_type : MONOTONIC period_step : 1 avail_min : 1920 period_event : 0 start_threshold : 7680 stop_threshold : 7680 silence_threshold: 0 silence_size : 0 boundary : 2013265920 Hardware PCM card 1 AB13X USB Audio device 0 subdevice 0 Its setup is: stream : PLAYBACK access : MMAP_INTERLEAVED format : S16_LE subformat : STD channels : 2 rate : 48000 exact rate : 48000 (48000/1) msbits : 16 buffer_size : 7680 period_size : 1920 period_time : 40000 tstamp_mode : ENABLE tstamp_type : MONOTONIC period_step : 1 avail_min : 1920 period_event : 0 start_threshold : 1 stop_threshold : 2013265920 silence_threshold: 0 silence_size : 2013265920 boundary : 2013265920 appl_ptr : 0 hw_ptr : 06. 验证USB声卡的录制和播放音频正常后修改asound.conf的配置。例如pcm.!dmix { # 叹号!表明这个dmix配置会覆盖ALSA的默认dmix配置。 type dmix # dmix混音输出实现多个音频流的混合输出的一个pcm插件。 ipc_key 5678293 # 必须为整数形式的唯一ipc_key。 ipc_key_add_uid yes # UID值将添加到ipc_key设置中可避免同一IPC密钥与不同用户同时发生冲突。 slave { # slave是该dmix输出的PCM设备。 pcm hw:1,0 # 这里配置为声卡1的0号设备。 period_time 40000 buffer_time 160000 format S16_LE rate 48000 # 当前采样率这里配置为48KHz。 channels 2 # 当前通道数这里配置为双通道。 } } pcm.!dsnoop { # 叹号!表明这个dsnoop配置会覆盖ALSA的默认dsnoop配置。 type dsnoop # dsnoop录音分流实现输入音频流的分流。 ipc_key 5778293 # 必须为整数形式的唯一ipc_key。 ipc_key_add_uid yes # UID值将添加到ipc_key设置中可避免同一IPC密钥与不同用户同时发生冲突。 slave { # slave是该dsnoop输出的PCM设备。 pcm hw:1,0 # 这里配置为声卡1的0号设备。 period_time 40000 buffer_time 160000 format S16_LE rate 48000 # 当前采样率这里配置为48KHz。 channels 2 # 当前通道数这里配置为双通道。 } } pcm.asymed { type asym # asym插件能同时支持播放和录音。 playback.pcm dmix capture.pcm dsnoop } pcm.!default { # 叹号!表明把ALSA的默认PCM设备设置为asymed # 这样应用程序通过ALSA接口打开默认PCM设备时使用的就是asymed设备。 type plug slave.pcm asymed # 指明默认的PCM设备为asymed。 } ...7. 修改audio.json的配置。例如{ card1 : { playback : { /* 音频播放 */ card : 1, /* 配置为声卡1 */ device : 0, /* 配置为0号设备 */ rate : 48000, /* 当前采样率这里配置为48KHz。 */ format : 16, /* 这里配置位宽为16bit */ channels : 2, /* 这里配置为双通道 */ period_time : 32, period_count : 2 }, capture : { /* 音频录制 */ card : 1, /* 配置为声卡1 */ device : 0, /* 配置为0号设备 */ rate : 48000, /* 当前采样率这里配置为48KHz。 */ format : 16, /* 这里配置位宽为16bit */ channels : 2, /* 这里配置为双通道 */ period_time : 32, period_count : 2 }, ... } }8. 修改完配置后重新编译root并烧录固件后正常开机接入USB声卡可进行音视频录制和播放查看效果是否可以达到项目需求。总结USB声卡大部分是通过UAC协议通信的这是USB音频设备的通用标准。简单来说UACUSB Audio Class是USB规范中专门为音频设备定义的一套通信协议它确保了不同厂商的USB声卡能在各种操作系统如Windows、macOS、Linux下正常工作。无论是USB麦克风、USB声卡还是其他音频设备只要通过USB接口与电脑连接底层的大部分是基于UAC协议进行音频数据的传输和控制。UAC协议还分为多个版本比如UAC1.0、UAC2.0和UAC3.0虽然不同版本支持的功能和性能有所差异但核心通信机制是一致的。所以无论我们用的是哪种USB声卡背后都是UAC协议在发挥作用。