用Qt实现录音以及放音

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

本文博客链接: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:

[cpp] view plain copy print ?
  1. #ifndef WIDGET_H  
  2. #define WIDGET_H  
  3. #include   
  4. #include   
  5. #include   
  6. #include   
  7. using namespace std;  
  8. namespace Ui {  
  9.     class Widget;  
  10. }  
  11. class Widget : public QWidget  
  12. {  
  13.     Q_OBJECT  
  14. public:  
  15.     explicit Widget(QWidget *parent = 0);  
  16.     ~Widget();  
  17. private slots:  
  18.     void stopRecording();  
  19. private:  
  20.     Ui::Widget *ui;  
  21.     QFile outputFile;   // class member.  
  22.     QAudioInput* audio; // class member.  
  23. };  
  24. #endif // WIDGET_H  
#ifndef WIDGET_H#define WIDGET_H#include #include #include #include using namespace std;namespace Ui {    class Widget;}class Widget : public QWidget{    Q_OBJECTpublic:    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:

[cpp] view plain copy print ?
  1. #include "widget.h"  
  2. #include "ui_widget.h"  
  3. Widget::Widget(QWidget *parent) :  
  4.     QWidget(parent),  
  5.     ui(new Ui::Widget)  
  6. {  
  7.     ui->setupUi(this);  
  8.     outputFile.setFileName("/root/qt_code/test.raw");  
  9.     outputFile.open( QIODevice::WriteOnly | QIODevice::Truncate );  
  10.     QAudioFormat format;  
  11.     // set up the format you want, eg.  
  12.     format.setFrequency(8000);  
  13.     format.setChannels(1);  
  14.     format.setSampleSize(8);  
  15.     format.setCodec("audio/pcm");  
  16.     format.setByteOrder(QAudioFormat::LittleEndian);  
  17.     format.setSampleType(QAudioFormat::UnSignedInt);  
  18.     QAudioDeviceInfo info = QAudioDeviceInfo::defaultInputDevice();  
  19.     if (!info.isFormatSupported(format)) {  
  20.        qWarning()<<"default format not supported try to use nearest";  
  21.        format = info.nearestFormat(format);  
  22.     }  
  23.     audio = new QAudioInput(format, this);  
  24.     QTimer::singleShot(3000, this, SLOT(stopRecording()));  
  25.     audio->start(&outputFile);  
  26.     // Records audio for 3000ms  
  27.      cout <<"record begin!" << endl;  
  28. }  
  29. void Widget::stopRecording()  
  30.  {  
  31.    audio->stop();  
  32.    outputFile.close();  
  33.    delete audio;  
  34.    cout <<"record end!" << endl;  
  35.  }  
  36. Widget::~Widget()  
  37. {  
  38.     delete ui;  
  39. }  
#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;} 

 

test_play_ver0工程:

widget.h:

[cpp] view plain copy print ?
  1. #ifndef WIDGET_H  
  2. #define WIDGET_H  
  3. #include   
  4. #include   
  5. #include   
  6. #include   
  7. #include   
  8. using namespace std;  
  9. namespace Ui {  
  10.     class Widget;  
  11. }  
  12. class Widget : public QWidget  
  13. {  
  14.     Q_OBJECT  
  15. public:  
  16.     explicit Widget(QWidget *parent = 0);  
  17.     ~Widget();  
  18. private slots:  
  19.     void finishedPlaying(QAudio::State state);  
  20. private:  
  21.     Ui::Widget *ui;  
  22.     QFile inputFile;   // class member.  
  23.     QAudioOutput* audio; // class member.  
  24. };  
  25. #endif // WIDGET_H  
#ifndef WIDGET_H#define WIDGET_H#include #include #include #include #include using namespace std;namespace Ui {    class Widget;}class Widget : public QWidget{    Q_OBJECTpublic:    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 

 

wideget.cpp:

[cpp] view plain copy print ?
  1. #include "widget.h"  
  2. #include "ui_widget.h"  
  3. Widget::Widget(QWidget *parent) :  
  4.     QWidget(parent),  
  5.     ui(new Ui::Widget)  
  6. {  
  7.     ui->setupUi(this);  
  8.     inputFile.setFileName("/root/qt_code/test.raw");  
  9.     //inputFile.setFileName("/root/share/wav.wav");  
  10.     inputFile.open(QIODevice::ReadOnly);  
  11.     QAudioFormat format;  
  12.     // Set up the format, eg.  
  13.     format.setFrequency(8000);  
  14.     format.setChannels(1);  
  15.     format.setSampleSize(8);  
  16.     format.setCodec("audio/pcm");  
  17.     format.setByteOrder(QAudioFormat::LittleEndian);  
  18.     format.setSampleType(QAudioFormat::UnSignedInt);  
  19.     QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());  
  20.     if (!info.isFormatSupported(format)) {  
  21.      qWarning()<<"raw audio format not supported by backend, cannot play audio.";  
  22.      return;  
  23.     }  
  24.     audio = new QAudioOutput(format, this);  
  25.     connect(audio,SIGNAL(stateChanged(QAudio::State)),SLOT(finishedPlaying(QAudio::State)));  
  26.     audio->start(&inputFile);  
  27.     cout <<"play begin!" << endl;  
  28. }  
  29. void Widget::finishedPlaying(QAudio::State state)  
  30.  {  
  31.    if(state == QAudio::IdleState) {  
  32.      audio->stop();  
  33.      inputFile.close();  
  34.      delete audio;  
  35.    }  
  36.    cout << "play end!" << endl;  
  37.  }  
  38. Widget::~Widget()  
  39. {  
  40.     delete ui;  
  41. }  
#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;} 

 



 

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

你可能感兴趣的:(用Qt实现录音以及放音)