资源简介
整个程序实现了一个录音机功能,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
相关资源
- 酒店管理系统基于Qt Creator5)
- vtk QT做的三维地质可视化系统2of2
- Qt局域网聊天软件
- Qt Creator opengl实现四元数鼠标控制轨迹
- QT局域网聊天系统(基于QT5.修改过)
- qt-电子点菜系统
- C 餐厅叫号系统(QT平)
- QT 实现文件下载
- qt图像处理
- QT,JPEG解码源代码(已完成)
- Qt 播放音频文件
- Qt 读取16进制的data文件
- MQTT+串口(usart)透传
- 易语言QQTEA算法源码
- VC工程转Qt工程文件的工具
- MQTT推送Demo
- 基于Linux、QT的视频监控系统的设计与
- Qt 百度地图 定位
- QT酷炫界面开发指南《QmlBook》
- Ubuntu下操作Excel,qt代码
- Qt图片浏览器 --基于Qt的Graphics View f
- qtnribbon2破解
- Qt软件开发 完整项目代码
- MQTT_3.1protocol_Specific中文版
- 在QT中使用RTP进行视频的采集和传输
- Mini6410 Qt4和Qtopia编程开发指南
- Qt实现Code39条形码
- qt_ffmpeg_mp4_export_and_import.zip
- QT5.5入门与项目实战
- Huffman Compress 霍夫曼编码 压缩 解压缩
评论
共有 条评论