跳转至

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 个通道