Ubuntu下用Qt实现录音以及放音


环境:Ubuntu 10.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:

  1. #ifndef WIDGET_H   
  2. #define WIDGET_H   
  3. #include <QWidget>   
  4. #include <QtGui>   
  5. #include <QAudioInput>   
  6. #include <iostream>   
  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  

widget.cpp:

  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. }  
  • 1
  • 2
  • 下一页

相关内容