使用ffmpeg或者java录制音频总结
系统环境
Ubuntu,MacOS
几种方式
- 使用FFMPEG
- 使用JDK
- 使用JavaCV
下面详细介绍几种方式,再不同操作系统下的用法
FFMPEG
前提已经安装了ffmpeg
参见官方文档,或者自行“必应”,使用说明网上很多,不多介绍,只介绍录制音频的用法
-
工具准备
用于查看系统中,可用的录音设备信息- Ubuntu
需要安装alsa-utils工具包, linux下需要使用alsa工具进行音频录制
apt-get install alsa-utils
- MacOS上不需要安装工具,直接使用ffmpeg查看设备
- Ubuntu
-
使用方法
- Ubuntu
- 列出所有音频设备
root@guest-TianYi510Pro-18ICB:~# arecord -l **** CAPTURE 硬體裝置清單 **** xcb_connection_has_error() 返回真 card 0: PCH [HDA Intel PCH], device 0: ALC233 Analog [ALC233 Analog] 子设备: 1/1 子设备 #0: subdevice #0 card 0: PCH [HDA Intel PCH], device 1: ALC233 Analog 子设备: 1/1 子设备 #0: subdevice #0 card 2: Device [USB Audio Device], device 0: USB Audio [USB Audio] 子设备: 1/1 子设备 #0: subdevice #0
- 列出设备后,使用
card 2
进行录音,命令如下:
ffmpeg -f alsa -i hw:2 -y test.wav
如果想使用
card 0
device 1
,命令如下:ffmpeg -f alsa -i hw:0,1 -y test.wav
- MacOS
Mac下命令与Linux下不同
- 列出所有音频设备
Mac-mini:myan$ ffmpeg -f avfoundation -list_devices true -i "" ...... [AVFoundation input device @ 0x7fbabf106bc0] AVFoundation video devices: [AVFoundation input device @ 0x7fbabf106bc0] AVFoundation audio devices: [AVFoundation input device @ 0x7fbabf106bc0] [0] (LCS) USB Audio Device ......
- 列出设备后,使用video_device_index为[0]的设备录音,命令如下:
ffmpeg -f avfoundation -i :0 -y test.mp3
注意:在mac mini上测试时,远程通过ssh登陆到此机器执行录音命令会报错,得到
Abort trap: 6
错误,在本机执行没问题
具体内容可以参考官方文档
https://trac.ffmpeg.org/wiki/Capture/ALSA
https://trac.ffmpeg.org/wiki/Capture/Webcam
使用JDK
-
步骤如下:
- 初始化TargetDataLine
- 从DataLine中读取数据
-
实现方法:
此方法循环录制音频文件,仅仅使用于测试功能
@Test
public void testAduio() throws LineUnavailableException, IOException {
TargetDataLine line;
//定义声音格式,具体需要根据录音设备支持程度来定义
//我使用的设备
AudioFormat audioFormat = new AudioFormat(16000, 16,