• 大小: 4KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: 其他
  • 标签: Qt  raw转wav  

资源简介

整个程序实现了一个录音机功能,QAudioInput生成的raw文件不能直接用播放器播放,这里将生成的.raw文件转成wav格式的音频文件。这样既可用QAudioOutput来播放,又可以用播放器来播放,详情见 http://blog.csdn.net/goforwardtostep/article/details/52776240

资源截图

代码片段和文件信息

#include “myaudioinput.h“
#include 
#include 
#include 

#define RAW_RECORD_FILENAME “F:/audio/test.raw“ // 录音文件名;
#define WAV_RECORD_FILENAME “F:/audio/test.wav“ // 录音文件转wav格式文件名;

const qint64 TIME_TRANSFORM = 1000 * 1000; // 微妙转秒;

MyAudioInput::MyAudioInput(QWidget *parent)
: QWidget(parent)
 m_isRecord(false)
 m_isPlay(false)
 m_RecordTimerId(0)
 m_RecordTime(0)
{
ui.setupUi(this);
// 录音,播放 等按钮 信号槽;
connect(ui.pButtonRecord SIGNAL(clicked()) this SLOT(onstartRecord()));
connect(ui.pButtonstopRecord SIGNAL(clicked()) this SLOT(onstopRecording()));
connect(ui.pButtonPlay SIGNAL(clicked()) this SLOT(onPlay()));
connect(ui.pButtonstopPlay SIGNAL(clicked()) this SLOT(onstopPlay()));

// 输出当前设备支持的音频编码格式;
QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
qDebug()<< “AudioDevice supportedCodecs : “ << info.supportedCodecs();
}

MyAudioInput::~MyAudioInput()
{

}

void MyAudioInput::onstartRecord()
{
// 如果正在播放则停止播放;
if (m_isPlay)
{
onstopPlay();
}
// 如果当前没有开始录音则允许录音;
if (!m_isRecord)
{
// 判断本地设备是否支持该格式
QAudioDeviceInfo audioDeviceInfo = QAudioDeviceInfo::defaultInputDevice();
// 判断本地是否有录音设备;
if (!audioDeviceInfo.isNull())
{
m_isRecord = true;
destinationFile.setFileName(RAW_RECORD_FILENAME);
destinationFile.open(QIODevice::WriteOnly | QIODevice::Truncate);

// 设置音频文件格式;
QAudioFormat format;
// 设置采样频率;
format.setSampleRate(8000);
// 设置通道数;
format.setChannelCount(1);
// 设置每次采样得到的样本数据位值;
format.setSampleSize(16);
// 设置编码方法;
format.setCodec(“audio/pcm“);
// 设置采样字节存储顺序;
format.setByteOrder(QAudioFormat::LittleEndian);
// 设置采样类型;
format.setSampleType(QAudioFormat::UnSignedInt);

// 判断当前设备设置是否支持该音频格式;
if (!audioDeviceInfo.isFormatSupported(format))
{
qDebug() << “Default format not supported trying to use the nearest.“;
format = audioDeviceInfo.nearestFormat(format);
}
// 开始录音;
m_audioInput = new QAudioInput(format this);
m_audioInput->start(&destinationFile);

// 开启时钟,用于更新当前录音时间;
if (m_RecordTimerId == 0)
{
m_RecordTimerId = startTimer(100);
}
}
else
{
// 没有录音设备;
QMessageBox::information(NULL tr(“Record“) tr(“Current No Record Device“));
}
}
else
{
// 当前正在录音;
QMessageBox::information(NULL tr(“Record“) tr(“Current is Recording“));
}
}

void MyAudioInput::onstopRecording()
{
// 当前正在录音时,停止录音;
if (m_isRecord)
{
// 关闭时钟,并初始化数据;
killTimer(m_RecordTimerId);
m_RecordTime = 0;
m_RecordTimerId = 0;
m_isRecord = false;
ui.labelTime->setText(QString(“Idle : %1/S“).arg(m_RecordTime));

if (m_audioInput != NULL)
{
m_audioInput->stop();
destinationFile.close();
delete m_audioInput;
m_audioInput = NULL;
}

// 将生成的.raw文件转成.wav格式文件;
if (addWavHeader(RAW_RECORD_FILENAME WAV_RECORD_FILENAM

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       7150  2016-10-10 19:52  RecordAudio\myaudioinput.cpp

     文件       1311  2016-10-10 19:53  RecordAudio\myaudioinput.h

     文件       1860  2016-10-10 19:36  RecordAudio\myaudioinput.ui

     目录          0  2016-10-10 19:53  RecordAudio

----------- ---------  ---------- -----  ----

                10321                    4


评论

共有 条评论