Qt集成的QAudio相关类可以很方便的进行音频采集,主要涉及到以下几个类:
#include <QAudioInput>
#include <QAudioDeviceInfo>
在.pro工程文件中增加:
QT += multimedia
这样才能找到这两个类
另外,保存文件使用到:
#include <QFile>
基本步骤:
1 获取音频输入列表
QList<QAudioDeviceInfo> audioDevice; // 可用音频设备列表
udioDevice = QAudioDeviceInfo::availableDevices(QAudio::AudioInput); // 找输入设备
2 使用指定设备和格式开始采集
// 设置采集格式
mFormatFile.setChannelCount(1);
mFormatFile.setSampleRate(48000); //
mFormatFile.setSampleSize(16); //
mFormatFile.setSampleType(QAudioFormat::SignedInt);
mFormatFile.setByteOrder(QAudioFormat::LittleEndian);
mFormatFile.setCodec("audio/pcm");
// 设置好路径后,打开要保存的音频文件
mpSampledData = new QFile();
mpSampledData->setFileName("./aaa.raw");
mpSampledData->open(QIODevice::WriteOnly | QIODevice::Truncate);
// 使用指定的设备及格式,开始采集,info 是选择的设备.
mpAudioInputFile = new QAudioInput(info, mFormatFile, this);
mpAudioInputFile->start(mpSampledData);
3 采集停止
mpAudioInputFile->stop(); // 关闭采样设备,
mpSampledData->close();// 关闭文件(已经保存到指定路径)
4 使用Windows下的Matlab软件播放
clear;
filename = "audio_000.raw";
fileID = fopen(filename,'r','l','UTF-8'); // 'r'是只读模式,'l'是Little-Endian,Linux默认是UTF-8,''
mm = fread(fileID,'short'); // 还是使用short格式读取
plot(mm);
sound(mm/32768,48000); //采集的是有符号16位整形,需要转化为-1~1之间,才能保证不失真.