使用Qt录制音频

本片文章简单介绍一下使用Qt录制音频数据。
使用到的类为QAudioInput,使用这个类录制音频非常简单,基本步骤如下:

  1. 设置录制音频的采样率、大小和通道等信息,创建QAudioInput类的对象。
  2. 调用QAudioInput类的成员函数 start() 开始录制音频。
  3. 调用QAudioInput类的成员函数 bytesReady() 获取当前从设备中录制的字节大小。

下面是一个简单的代码示例:

// [1] 创建QAudioInput对象
QAudioFormat format;
format.setSampleRate(44100);
format.setChannelCount(2);
format.setSampleSize(16);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::UnSignedInt);

QAudioInput *m_AudioInput = new QAudioInput(format, this);

// Init Timer
m_Timer = new QTimer(this);
m_Timer->setInterval(100);
QObject::connect(m_Timer, SIGNAL(timeout()), this, SLOT(onTimeout()));
m_AudioRecordByte.clear();
m_Timer->start();

// [2] 开始录制
m_AudioRecord = m_AudioInput->start();

下面是在定时器中不断的获取音频数据的代码:

void AudioUI::readRecordDevice(void)
{
    // [3] 获取录制字节数
    int byteSize = m_AudioInput->bytesReady();
    int len = byteSize;
    while (len)
    {
        int readSize = qMax(1024, byteSize);
        char *pData = new char[readSize];
        
        // [4] 获取录制的音频数据
        len = m_AudioRecord->read(pData, readSize);

        // 保存数据
        m_AudioRecordByte.append(pData, len);

        delete[] pData;
    }
}

完整代码可参照:
https://github.com/douzhongqiang/CreateAudio

不会飞的纸飞机
扫一扫二维码,了解我的更多动态。

下一篇文章:使用FFMpeg将音频PCM数据生成WAV和MP3文件