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之间,才能保证不失真.

 

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐