Ubuntu下用Qt实现录音以及放音
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:
- #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;
- }
|
评论暂时关闭