qt linux 实时录音放音,用Qt实现录音以及放音

环境: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

#include

#include

#include

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()<

format = info.nearestFormat(format);

}

audio = new QAudioInput(format, this);

QTimer::singleShot(3000, this, SLOT(stopRecording()));

audio->start(&outputFile);

// Records audio for 3000ms

cout <

}

void Widget::stopRecording()

{

audio->stop();

outputFile.close();

delete audio;

cout <

}

Widget::~Widget()

{

delete ui;

}

test_play_ver0工程:

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_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

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()<

return;

}

audio = new QAudioOutput(format, this);

connect(audio,SIGNAL(stateChanged(QAudio::State)),SLOT(finishedPlaying(QAudio::State)));

audio->start(&inputFile);

cout <

}

void Widget::finishedPlaying(QAudio::State state)

{

if(state == QAudio::IdleState) {

audio->stop();

inputFile.close();

delete audio;

}

cout << "play end!" << endl;

}

Widget::~Widget()

{

delete ui;

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值