main.cpp
#include <QCoreApplication>
#include <QAudioInput> //在multimedia库中
#include <QAudioFormat>
#include <QFile>
#include <QTimer>
#include <QAudioDeviceInfo>
#include <QDebug>
int main(int argc, char* argv[])
{
QCoreApplication app(argc, argv);
// record audio
//保存音频的文件
QString audioFileName = "d:\\qt-record.raw";
QFile audioFile(audioFileName);
audioFile.open(QFile::ReadWrite);
// 设置 QAudioFormat
QAudioFormat format;
format.setSampleRate(8000);
format.setChannelCount(1); //音道数量
format.setSampleSize(8);
format.setCodec("codec/pcm"); //编解码
format.setByteOrder(QAudioFormat::LittleEndian); //大端 小端
//创建QAudioDeviceInfo 麦克风什么的
QAudioDeviceInfo device = QAudioDeviceInfo::defaultInputDevice();
if(!device.isFormatSupported(format))
{
format = device.nearestFormat(format); //没有就找最近的拿过来用
qDebug() << format.sampleRate(); //打印format 数据
qDebug() << format.sampleSize();
qDebug() << format.sampleType();
qDebug() << format.codec();
qDebug() << format.byteOrder();
qDebug() << format.channelCount();
}
//创建QAudioInput 用QAudioFormat
QAudioInput* audio = new QAudioInput(format);
// audio->start(&audioFile); one way;
QIODevice* audioData = audio->start(); //two way
audio->setNotifyInterval(200); //控制一秒有多少帧
app.connect(audio, &QAudioInput::notify, [](){
int bytesReady = audio->bytesReady();
QByteArray ba(bytesReady, 0); //好处是在网络上可以作为帧广播出去
audioData->read(ba.data, bytesReady);
audioFile.write(ba);
});
//
QTimer* timer = new QTimer;
timer->setInterval(5000);
timer->start();
QObject::connect(timer, &QTimer::timeout, [&](){
audio->stop();
audio->deleteLater();
audioFile.close();
app.quit();
});
return app.exec();
}