UAC录音和播放*
1. linux 环境*
1.1 linux系统*
命令行使用 aplay | arecord 使用方法
查看设备
arecord -l
root@ubuntu:/disk3# arecord -l
List of CAPTURE Hardware Devices **
card 0: AudioPCI [Ensoniq AudioPCI], device 0: ES1371/1 [ES1371 DAC2/ADC]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: Dongle [NationalChip UAC Dongle], device 0: USB Audio [USB Audio]
Subdevices: 0/1
Subdevice #0: subdevice #0
-
可以看到, 8008 识别为了 usb 声卡, “NationalChip UAC Dongle”
-
录制: 根据上面的信息,发现 8008 是 card 1, device 0 因此,录制单声道,16K ,16bit 的 pcm 方式为
arecord -r 16000 -c 1 -f S16_LE -D hw:1,0 > 1.wav
- 播放 48K 16bit pcm 音频:
aplay -r 48000 -c 2 -f S16_LE -D hw:1,0 1.wav
1.2 android系统*
- 查看当前的声卡
rk3288:/ # cat /proc/asound/cards
0 [rkhdmianalogsnd]: rk-hdmi-analog- - rk-hmi-analog-snd
rk-hdmi-analog-snd 1 [Dongle ]: USB-Audio - NationalChip UAC Dongle (8008c声卡设备, 设备名字在代码⾥配置的)
NationalChip NationalChip UAC Dongle at usbff540000.usb-1.2, high speed
- 查看pcm设备列表
rk3288:/ # cat /proc/asound/pcm
00-00: HDMI-ANALOG multicodec-0 : : playback 1 : capture 1
01-00: USB Audio : USB Audio : playback 1 : capture 1
- 查看当前有哪些进程占⽤了pcm设备节点
lsof |grep pcm
- 查看有哪些⾳频设备节点
rk3288:/ # ls /dev/snd/
controlC0 controlC1 pcmC0D0c pcmC0D0p pcmC1D0c pcmC1D0p timer
- 由上述信息可以看出当前我们设备在安卓上是 card1device0
使⽤tinyalsa操作声卡
-
对应的⼯具如下,这些应⽤是遵循alsa的驱动规则的,录⾳需要跟底层的硬件相互联系的
-
tinymix: 查看配置混⾳器
-
tinypcminfo: 查看pcm通道相关信息
rk3288:/ # tinypcminfo -D 1 -d 0 Info for card 1, device 0: PCM out: Access: 0x000009 Format[0]: 0x000004 Format[1]: 00000000 Format Name: S16_LE Subformat: 0x000001 Rate: min=48000Hz max=48000Hz Channels: min=2 max=2 Sample bits: min=16 max=16 Period size: min=48 max=131072 Period count: min=2 max=1024 PCM in: Access: 0x000009 Format[0]: 0x000004 Format[1]: 00000000 Format Name: S16_LE Subformat: 0x000001 Rate: min=16000Hz max=16000Hz Channels: min=4 max=4 Sample bits: min=16 max=16 Period size: min=16 max=65536 Period count: min=2 max=1024
-
tinycap: 录⾳
tinycap data/cap.wav -D 1 -d 0 -c 4 -r 16000 -b 16
-D 声卡选择
-c 声道 4代表4声道
-r 采样率
-b 采样位数
- tinyplay: 播放⾳频
tinyplay data/cap.wav -D 1 -d
1.3 ubuntu界面工具*
- 安装audacity录音软件
sudo apt-get install audacity
- 确认usb 声卡设备被正确识别
-
打开audicity软件,进行设置
-
设备选择 Nationalchip UAC Dongle
-
采样率16000
-
声道数根据实际需求烧录的UAC固件
-
保存音频,有需要可以保存音频为wav格式,在编辑-偏好设置里面选择自定义混音,这样可以保存4通道的原始音数据
注意
以上操作不要在linxu虚拟机上验证,可能会出现录音异常
2. windows 环境*
GX8008 只支持 UAC2.0
GX8008C 支持 UAC1.0 和 UAC2.0
相关的固件支持的UAC协议,可以先和FAE沟通清楚
win10以前的系统,免驱支持 UAC1.0。win10 比较新的系统支持 UAC1.0 和 UAC2.0
- 支持 UAC2.0 的 win10 版本
Starting with Windows 10, release 1703, a USB Audio 2.0 driver is shipped with Windows. It is designed to support the USB Audio 2.0 device class. The driver is a WaveRT audio port class miniport. For more information about the USB Audio 2.0 device class,
-
直接用 audacity 进行录音,同样用**audacity**录音,方法和linux下一样,不过存在下面两个问题
-
录制多于两个通道数据时,可能需要切换 audacity 的录音框架
-
修改录音的配置时,会出现新的配置无法录音的问题
-
出现以上问题时按照以下方法操作:
-
可以看到当前声卡无法检测麦克风的音量强度(声卡设备是:Source/Sink)
-
从设备管理器中将该设备卸载
-
确认卸载
-
卸载成功了
-
重新扫描一下硬件,会重新扫描到咱们的 UAC 声卡
-
可以看到声卡已经可以检测到音量输出了
-
最后,使用 audacity 录制 4 通道数据时(能录制几通道和最终固件有关,本文提供的4通道仅仅是个示例),录音框架只能选择 WASAPI,这个框架才能看到 4 个通道