一、系统环境
操作系统: ubuntu 18.04 64位
二、查看系统有哪些声卡可用(麦克风和扬声器)
当系统下存在多个麦克风或者扬声器的时候,配置默认的设备是很有必要的。
2.1 运行alsamixer命令,打开图形界面
wbyq@wbyq:~$ alsamixer
打开图形界面之后,按下F6,即可查看系统默认的声卡。在我的电脑上插了一个USB摄像头,带音频输入,在下图里就能看到两个声卡。退出图形界面按下Esc按键(键盘左上角)。
没有alsamixer命令,安装一个即可: sudo apt-get install alsa-utils
wbyq@wbyq:~$ sudo apt-get install alsa-utils [sudo] wbyq 的密码: 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 alsa-utils 已经是最新版 (1.1.3-1ubuntu1)。 alsa-utils 已设置为手动安装。 下列软件包是自动安装的并且现在不需要了: libavdevice57 libavfilter6 libavresample3 libdc1394-22 libflite1 libmysofa0 libnorm1 libpgm-5.2-0 librubberband2 libsdl2-2.0-0 libwayland-egl1-mesa libzmq5 使用'sudo apt autoremove'来卸载它(它们)。 升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 88 个软件包未被升级。
2.2 查看 /proc/asound目录查看声卡
wbyq@wbyq:~$ cd /proc/asound wbyq@wbyq:/proc/asound$ ls AudioPCI card0 card1 cards devices hwdep modules oss pcm seq timers U0x46d0x825 version
2.3 查看/proc/asound/cards文件查看声卡
wbyq@wbyq:/proc/asound$ cat /proc/asound/cards 0 [AudioPCI ]: ENS1371 - Ensoniq AudioPCI Ensoniq AudioPCI ENS1371 at 0x2040, irq 16 1 [U0x46d0x825 ]: USB-Audio - USB Device 0x46d:0x825 USB Device 0x46d:0x825 at usb-0000:03:00.0-2, high speed
2.4 通过arecord -l 命令查看系统的麦克风/音频输入设备 (扬声器不会出现)
wbyq@wbyq:/proc/asound$ arecord -l **** CAPTURE 硬體裝置清單 **** card 0: AudioPCI [Ensoniq AudioPCI], device 0: ES1371/1 [ES1371 DAC2/ADC] 子设备: 1/1 子设备 #0: subdevice #0 card 1: U0x46d0x825 [USB Device 0x46d:0x825], device 0: USB Audio [USB Audio] 子设备: 1/1 子设备 #0: subdevice #0
2.5 通过aplay -l 命令查看系统的扬声器音频输出设备
wbyq@wbyq:/proc/asound$ aplay -l **** PLAYBACK 硬體裝置清單 **** card 0: AudioPCI [Ensoniq AudioPCI], device 0: ES1371/1 [ES1371 DAC2/ADC] 子设备: 1/1 子设备 #0: subdevice #0 card 0: AudioPCI [Ensoniq AudioPCI], device 1: ES1371/2 [ES1371 DAC1] 子设备: 1/1 子设备 #0: subdevice #0
通过打印的列表可以看到里面没有USB的设备,因为我插入的USB摄像头只有音频输入功能,没有音频输出功能。
三、设置系统默认的音量
3.1. 使用 alsamixer 图形界面手动设置
打开图形界面之后,按下键盘上的方向键即可设置音量。
3.2 输入命令自动设置
wbyq@wbyq:~$ amixer set Master 100%
后面的100%是音频输出的百分比,100%就是最大声音。 可以在0~100之间调节。
四、测试声卡设备是否正常(录音和放音)
4.1 使用系统默认声卡录音和放音
wbyq@wbyq:~$ arecord -d 10 test.wav 正在录音 WAVE 'test.wav' : Unsigned 8 bit, 频率8000Hz, Mono wbyq@wbyq:~$ aplay test.wav 正在播放 WAVE 'test.wav' : Unsigned 8 bit, 频率8000Hz, Mono
第一条命令是录音命令,-d 10表示录制10秒声音,test.wav是保存的文件名称。
第二条命令是播放声音文件。
4.2 使用指定声卡录音和放音
wbyq@wbyq:~$ arecord -D hw:0 -d 3 test.wav 正在录音 WAVE 'test.wav' : Unsigned 8 bit, 频率8000Hz, Mono wbyq@wbyq:~$ aplay -D hw:0 test.wav 正在播放 WAVE 'test.wav' : Unsigned 8 bit, 频率8000Hz, Mono
其中-D hw:x 表示指定第几个声卡。 使用aplay -l和arecord -l命令可以查看系统的录音设备列表和扬声器设备列表。
为了测试当前我在电脑上插入了一个USB声卡设备。
这是一款USB免驱声卡,插入电脑后,再次查看声卡设备,即可看到,多了一个录音设备和一个扬声器设备。
wbyq@wbyq:~$ arecord -l **** CAPTURE 硬體裝置清單 **** card 0: AudioPCI [Ensoniq AudioPCI], device 0: ES1371/1 [ES1371 DAC2/ADC] 子设备: 1/1 子设备 #0: subdevice #0 card 1: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio] 子设备: 1/1 子设备 #0: subdevice #0 wbyq@wbyq:~$ aplay -l **** PLAYBACK 硬體裝置清單 **** card 0: AudioPCI [Ensoniq AudioPCI], device 0: ES1371/1 [ES1371 DAC2/ADC] 子设备: 1/1 子设备 #0: subdevice #0 card 0: AudioPCI [Ensoniq AudioPCI], device 1: ES1371/2 [ES1371 DAC1] 子设备: 1/1 子设备 #0: subdevice #0 card 1: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio] 子设备: 0/1 子设备 #0: subdevice #0
使用插入的USB声卡进行录音和放音:
wbyq@wbyq:~$ arecord -D hw:1 -f S16_LE -r 44100 -d 3 test.wav 正在录音 WAVE 'test.wav' : Signed 16 bit Little Endian, 频率44100Hz, Mono wbyq@wbyq:~$ aplay -D hw:1 test.wav 正在播放 WAVE 'test.wav' : Signed 16 bit Little Endian, 频率44100Hz, Mono
其中的-r 指定采样率,-f 指定每个采样点的位数--样本大小。
如果播放的是PCM文件可以这样设置:
aplay -t raw -c 1 -f S16_LE -r 8000 test.pcm -t: type raw表示是PCM -c: channel 1 -f S16_LE: Signed 16bit-width Little-Endian -r: sample rate 8000
4.3 指定默认声卡问题解决
注意: 直接-D hw:X指定声卡的话有些情况下,会因为采样率、各种问题导致无法播放,推荐使用下面方式指定声卡设备。
查看系统支持的声卡详细信息:
wbyq@wbyq:~$ aplay -L null Discard all samples (playback) or generate zero samples (capture) pulse PulseAudio Sound Server default Playback/recording through the PulseAudio sound server sysdefault:CARD=AudioPCI Ensoniq AudioPCI, ES1371 DAC2/ADC Default Audio Device front:CARD=AudioPCI,DEV=0 Ensoniq AudioPCI, ES1371 DAC2/ADC Front speakers rear:CARD=AudioPCI,DEV=0 Ensoniq AudioPCI, ES1371 DAC1 Rear speakers surround40:CARD=AudioPCI,DEV=0 Ensoniq AudioPCI, ES1371 DAC2/ADC 4.0 Surround output to Front and Rear speakers iec958:CARD=AudioPCI,DEV=0 Ensoniq AudioPCI, ES1371 DAC2/ADC IEC958 (S/PDIF) Digital Audio Output dmix:CARD=AudioPCI,DEV=0 Ensoniq AudioPCI, ES1371 DAC2/ADC Direct sample mixing device dmix:CARD=AudioPCI,DEV=1 Ensoniq AudioPCI, ES1371 DAC1 Direct sample mixing device dsnoop:CARD=AudioPCI,DEV=0 Ensoniq AudioPCI, ES1371 DAC2/ADC Direct sample snooping device dsnoop:CARD=AudioPCI,DEV=1 Ensoniq AudioPCI, ES1371 DAC1 Direct sample snooping device hw:CARD=AudioPCI,DEV=0 Ensoniq AudioPCI, ES1371 DAC2/ADC Direct hardware device without any conversions hw:CARD=AudioPCI,DEV=1 Ensoniq AudioPCI, ES1371 DAC1 Direct hardware device without any conversions plughw:CARD=AudioPCI,DEV=0 Ensoniq AudioPCI, ES1371 DAC2/ADC Hardware device with all software conversions plughw:CARD=AudioPCI,DEV=1 Ensoniq AudioPCI, ES1371 DAC1 Hardware device with all software conversions sysdefault:CARD=Device USB PnP Sound Device, USB Audio Default Audio Device front:CARD=Device,DEV=0 USB PnP Sound Device, USB Audio Front speakers surround21:CARD=Device,DEV=0 USB PnP Sound Device, USB Audio 2.1 Surround output to Front and Subwoofer speakers surround40:CARD=Device,DEV=0 USB PnP Sound Device, USB Audio 4.0 Surround output to Front and Rear speakers surround41:CARD=Device,DEV=0 USB PnP Sound Device, USB Audio 4.1 Surround output to Front, Rear and Subwoofer speakers surround50:CARD=Device,DEV=0 USB PnP Sound Device, USB Audio 5.0 Surround output to Front, Center and Rear speakers surround51:CARD=Device,DEV=0 USB PnP Sound Device, USB Audio 5.1 Surround output to Front, Center, Rear and Subwoofer speakers surround71:CARD=Device,DEV=0 USB PnP Sound Device, USB Audio 7.1 Surround output to Front, Center, Side, Rear and Woofer speakers iec958:CARD=Device,DEV=0 USB PnP Sound Device, USB Audio IEC958 (S/PDIF) Digital Audio Output dmix:CARD=Device,DEV=0 USB PnP Sound Device, USB Audio Direct sample mixing device dsnoop:CARD=Device,DEV=0 USB PnP Sound Device, USB Audio Direct sample snooping device hw:CARD=Device,DEV=0 USB PnP Sound Device, USB Audio Direct hardware device without any conversions plughw:CARD=Device,DEV=0 USB PnP Sound Device, USB Audio Hardware device with all software conversions wbyq@wbyq:~$
使用指定声卡播放音频文件:
wbyq@wbyq:~$ aplay -D plughw:CARD=Device,DEV=0 lu_xian_pian_li.wav
-D后面指定的声卡名称,要在列表里找到对应声卡 plughw: 字段 开头的进行使用。
五、设置系统默认的麦克风设备和扬声器设备
5.1 创建声卡配置文件
针对全局配置: 在/etc目录下创建文件asound.conf
针对指定用户配置: 在用户目录下创建文件.asoundrc
5.2 配置代码
在上面文件里写入下面配置代码即可生效,其中1表示表示使用的声卡编号。前面介绍了如何查看声卡编号。
defaults.ctl.card 1 defaults.pcm.card 1 defaults.timer.card 1
其中“pcm”选项决定用来播放音频的设备,而“ctl”选项决定那个声卡能够由控制工具(如 alsamixer)使用。
也可以直接指定声卡名称。
得到当前系统可用扬声器的设备名称:
wbyq@wbyq:~$ cat /proc/asound/cards 0 [AudioPCI ]: ENS1371 - Ensoniq AudioPCI Ensoniq AudioPCI ENS1371 at 0x2040, irq 16 1 [U0x46d0x825 ]: USB-Audio - USB Device 0x46d:0x825 USB Device 0x46d:0x825 at usb-0000:03:00.0-2, high speed 2 [Device ]: USB-Audio - USB PnP Sound Device C-Media Electronics Inc. USB PnP Sound Device at usb-0000:03:00.0-3.1, full spe wbyq@wbyq:~$ wbyq@wbyq:~$ aplay -l | awk -F \: '/,/{print $2}' | awk '{print $1}' | uniq AudioPCI Device
得到当前系统可用麦克风的设备名称:
wbyq@wbyq:~$ arecord -l **** CAPTURE 硬體裝置清單 **** card 0: AudioPCI [Ensoniq AudioPCI], device 0: ES1371/1 [ES1371 DAC2/ADC] 子设备: 1/1 子设备 #0: subdevice #0 card 1: U0x46d0x825 [USB Device 0x46d:0x825], device 0: USB Audio [USB Audio] 子设备: 1/1 子设备 #0: subdevice #0 card 2: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio] 子设备: 1/1 子设备 #0: subdevice #0 wbyq@wbyq:~$ arecord -l | awk -F \: '/,/{print $2}' | awk '{print $1}' | uniq AudioPCI U0x46d0x825 Device
指定设备的语法:
(针对全局配置: 在/etc目录下创建文件asound.conf 针对指定用户配置: 在用户目录下创建文件.asoundrc)
pcm.!default { type hw card 声卡名称 } ctl.!default { type hw card 声卡名称 }
配置文件参考链接:https://wiki.archlinux.org/index.php/PulseAudio#default.pa
使用查看声卡详细配置列表:得到麦克风和扬声器的名称
wbyq@wbyq:~$ pacmd list-cards 1 card(s) available. index: 0 name: <alsa_card.pci-0000_02_02.0> driver: <module-alsa-card.c> owner module: 7 properties: alsa.card = "0" alsa.card_name = "Ensoniq AudioPCI" alsa.long_card_name = "Ensoniq AudioPCI ENS1371 at 0x2040, irq 16" alsa.driver_name = "snd_ens1371" device.bus_path = "pci-0000:02:02.0" sysfs.path = "/devices/pci0000:00/0000:00:11.0/0000:02:02.0/sound/card0" device.bus = "pci" device.vendor.id = "1274" device.vendor.name = "Ensoniq" device.product.id = "1371" device.product.name = "ES1371/ES1373 / Creative Labs CT2518 (Audio PCI 64V/128/5200 / Creative CT4810/CT5803/CT5806 [Sound Blaster PCI])" device.string = "0" device.description = "ES1371/ES1373 / Creative Labs CT2518 (Audio PCI 64V/128/5200 / Creative CT4810/CT5803/CT5806 [Sound Blaster PCI])" module-udev-detect.discovered = "1" device.icon_name = "audio-card-pci" profiles: input:analog-mono: 模拟单声道 输入 (priority 2, available: unknown) input:analog-stereo: 模拟立体声 输入 (priority 60, available: unknown) output:analog-mono: 模拟单声道 输出 (priority 200, available: unknown) output:analog-mono+input:analog-mono: 模拟单声道双工 (priority 202, available: unknown) output:analog-mono+input:analog-stereo: 模拟单声道 输出 + 模拟立体声 输入 (priority 260, available: unknown) output:analog-stereo: 模拟立体声 输出 (priority 6000, available: unknown) output:analog-stereo+input:analog-mono: 模拟立体声 输出 + 模拟单声道 输入 (priority 6002, available: unknown) output:analog-stereo+input:analog-stereo: 模拟立体声双工 (priority 6060, available: unknown) off: 关 (priority 0, available: unknown) active profile: <output:analog-stereo+input:analog-stereo> sinks: alsa_output.pci-0000_02_02.0.analog-stereo/#0: ES1371/ES1373 / Creative Labs CT2518 (Audio PCI 64V/128/5200 / Creative CT4810/CT5803/CT5806 [Sound Blaster PCI]) 模拟立体声 sources: alsa_output.pci-0000_02_02.0.analog-stereo.monitor/#0: Monitor of ES1371/ES1373 / Creative Labs CT2518 (Audio PCI 64V/128/5200 / Creative CT4810/CT5803/CT5806 [Sound Blaster PCI]) 模拟立体声 alsa_input.pci-0000_02_02.0.analog-stereo/#1: ES1371/ES1373 / Creative Labs CT2518 (Audio PCI 64V/128/5200 / Creative CT4810/CT5803/CT5806 [Sound Blaster PCI]) 模拟立体声 ports: analog-input-mic: 话筒 (priority 8700, latency offset 0 usec, available: unknown) properties: device.icon_name = "audio-input-microphone" analog-input-linein: 输入插孔 (priority 8100, latency offset 0 usec, available: unknown) properties: analog-input-aux: 模拟输入 (priority 8000, latency offset 0 usec, available: unknown) properties: analog-input-video: 视频 (priority 7000, latency offset 0 usec, available: unknown) properties: analog-output: 模拟输出 (priority 9900, latency offset 0 usec, available: unknown) properties: wbyq@wbyq:~$
wbyq@wbyq:~$ gedit .asoundrc ctl.!default { type pulse sink "alsa_output.pci-0000_02_02.0.analog-stereo" source "alsa_input.pci-0000_02_02.0.analog-stereo" }
声卡的名称也可以通过QT的代码的获取:
foreach (const QAudioDeviceInfo &deviceInfo, QAudioDeviceInfo::availableDevices(QAudio::AudioOutput)) qDebug() << "当前系统可用的扬声器: " << deviceInfo.deviceName(); foreach (const QAudioDeviceInfo &deviceInfo, QAudioDeviceInfo::availableDevices(QAudio::AudioInput)) qDebug() << "当前系统可用的麦克风: " << deviceInfo.deviceName(); 当前系统可用的扬声器: "default" 当前系统可用的扬声器: "pulse" 当前系统可用的扬声器: "sysdefault:CARD=AudioPCI" 当前系统可用的扬声器: "front:CARD=AudioPCI,DEV=0" 当前系统可用的扬声器: "rear:CARD=AudioPCI,DEV=0" 当前系统可用的扬声器: "surround40:CARD=AudioPCI,DEV=0" 当前系统可用的扬声器: "iec958:CARD=AudioPCI,DEV=0" 当前系统可用的扬声器: "dmix:CARD=AudioPCI,DEV=0" 当前系统可用的扬声器: "dmix:CARD=AudioPCI,DEV=1" 当前系统可用的扬声器: "dsnoop:CARD=AudioPCI,DEV=0" 当前系统可用的扬声器: "dsnoop:CARD=AudioPCI,DEV=1" 当前系统可用的扬声器: "hw:CARD=AudioPCI,DEV=0" 当前系统可用的扬声器: "hw:CARD=AudioPCI,DEV=1" 当前系统可用的扬声器: "plughw:CARD=AudioPCI,DEV=0" 当前系统可用的扬声器: "plughw:CARD=AudioPCI,DEV=1" 当前系统可用的扬声器: "alsa_output.pci-0000_02_02.0.analog-stereo" 当前系统可用的麦克风: "default" 当前系统可用的麦克风: "pulse" 当前系统可用的麦克风: "sysdefault:CARD=AudioPCI" 当前系统可用的麦克风: "front:CARD=AudioPCI,DEV=0" 当前系统可用的麦克风: "iec958:CARD=AudioPCI,DEV=0" 当前系统可用的麦克风: "dmix:CARD=AudioPCI,DEV=0" 当前系统可用的麦克风: "dsnoop:CARD=AudioPCI,DEV=0" 当前系统可用的麦克风: "hw:CARD=AudioPCI,DEV=0" 当前系统可用的麦克风: "plughw:CARD=AudioPCI,DEV=0" 当前系统可用的麦克风: "alsa_input.pci-0000_02_02.0.analog-stereo" 当前系统可用的麦克风: "alsa_output.pci-0000_02_02.0.analog-stereo.monitor"