用Qt实现录音以及放音
2011-03-06 01:18
302 查看
本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.
环境:Ubuntu10.04,Qt Creator 2.0.1,Qt 4.7.0
参考Qt帮助文档,对QAudioInput类以及QAudioOutput类进行操作,实现录音以及放音.
工作流程:test_record_ver0工程录音3S,将声音文件保存在/root/qt_code/test.raw中,test_play_ver0工程打开test.raw文件,并输出声音.
源代码:
test_record_ver0工程:
widget.h:
widget.cpp:
[b]test_play_ver0工程:[/b]
[b]widget.h:[/b]
[b]
wideget.cpp:
环境:Ubuntu10.04,Qt Creator 2.0.1,Qt 4.7.0
参考Qt帮助文档,对QAudioInput类以及QAudioOutput类进行操作,实现录音以及放音.
工作流程:test_record_ver0工程录音3S,将声音文件保存在/root/qt_code/test.raw中,test_play_ver0工程打开test.raw文件,并输出声音.
源代码:
test_record_ver0工程:
widget.h:
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QtGui> #include <QAudioInput> #include <iostream> using namespace std; namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); private slots: void stopRecording(); private: Ui::Widget *ui; QFile outputFile; // class member. QAudioInput* audio; // class member. }; #endif // WIDGET_H
widget.cpp:
#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); outputFile.setFileName("/root/qt_code/test.raw"); outputFile.open( QIODevice::WriteOnly | QIODevice::Truncate ); QAudioFormat format; // set up the format you want, eg. format.setFrequency(8000); format.setChannels(1); format.setSampleSize(8); format.setCodec("audio/pcm"); format.setByteOrder(QAudioFormat::LittleEndian); format.setSampleType(QAudioFormat::UnSignedInt); QAudioDeviceInfo info = QAudioDeviceInfo::defaultInputDevice(); if (!info.isFormatSupported(format)) { qWarning()<<"default format not supported try to use nearest"; format = info.nearestFormat(format); } audio = new QAudioInput(format, this); QTimer::singleShot(3000, this, SLOT(stopRecording())); audio->start(&outputFile); // Records audio for 3000ms cout <<"record begin!" << endl; } void Widget::stopRecording() { audio->stop(); outputFile.close(); delete audio; cout <<"record end!" << endl; } Widget::~Widget() { delete ui; }
[b]test_play_ver0工程:[/b]
[b]widget.h:[/b]
[b]
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QtGui> #include <QAudioInput> #include <QAudioOutput> #include <iostream> using namespace std; namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); private slots: void finishedPlaying(QAudio::State state); private: Ui::Widget *ui; QFile inputFile; // class member. QAudioOutput* audio; // class member. }; #endif // WIDGET_H[/b]
wideget.cpp:
#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); inputFile.setFileName("/root/qt_code/test.raw"); //inputFile.setFileName("/root/share/wav.wav"); inputFile.open(QIODevice::ReadOnly); QAudioFormat format; // Set up the format, eg. format.setFrequency(8000); format.setChannels(1); format.setSampleSize(8); format.setCodec("audio/pcm"); format.setByteOrder(QAudioFormat::LittleEndian); format.setSampleType(QAudioFormat::UnSignedInt); QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice()); if (!info.isFormatSupported(format)) { qWarning()<<"raw audio format not supported by backend, cannot play audio."; return; } audio = new QAudioOutput(format, this); connect(audio,SIGNAL(stateChanged(QAudio::State)),SLOT(finishedPlaying(QAudio::State))); audio->start(&inputFile); cout <<"play begin!" << endl; } void Widget::finishedPlaying(QAudio::State state) { if(state == QAudio::IdleState) { audio->stop(); inputFile.close(); delete audio; } cout << "play end!" << endl; } Widget::~Widget() { delete ui; }
相关文章推荐
- 用Qt实现录音以及放音(QAudioInput)
- Qt Graphics入门小例以及实现场景中相关项拖拽功能总结.
- Qt中Ui名字空间以及setupUi函数的原理和实现
- C#控制语音卡实现呼叫、录音以及来电弹屏
- 【C/C++学院】0817-递归汉诺塔 双层递归 /CPP结构体 /面向过程与面向对象的编程模式/类的常识共用体实现一个类的特征/QT应用于类以及类的常识
- QT +openCV 实现摄像头采集以及拍照功能
- C#控制语音卡实现呼叫、录音以及来电弹屏
- qt button以及label实现不规则图形(五种方法:使用QSS,设置Mask图片,自己画)
- Qt+OpenGL实现正方体旋转平移放大缩小,以及六个面贴不同图片
- Qt中Ui名字空间以及setupUi函数的原理和实现
- Qt + SDL实现的实时录音并播放的程序,类似KTV唱歌
- Qt4.8.2 QPushButton按钮贴图以及实现按钮的几种常用状态
- Qt的国际化示例程序以及步骤--实现Qt程序的动态切换语言功能
- Qt中Ui名字空间以及setupUi函数的原理和实现
- 微信录音接口的调用以及amr文件转码MP3文件的实现
- Android 使用AudioRecord而实现录音暂停以及wav文件转mp3文件
- 基于Qt的组态监控软件实现以及分析(转)
- Qt实现16进制unicode转utf-8以及国际音标编码问题
- QT +openCV 实现摄像头采集以及拍照功能
- qt实现录音功能