一起看代码来玩玩QT之23 audioRecord

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();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值