21,464
社区成员
发帖
与我相关
我的任务
分享
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
void Widget::stopRecording()
{
audio->stop();
outputFile.close();
delete audio;
cout <<"record end!" << endl;
}
void Widget::on_record_clicked() //recod
{
outputFile.setFileName("/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(10000, this, SLOT(stopRecording()));
audio->start(&outputFile);
// Records audio for 10000ms
cout <<"record begin!" << endl;
}
void Widget::on_play_clicked() //play
{
inputFile.setFileName("/test.wav");
inputFile.open(QIODevice::ReadOnly);
QAudioFormat format2;
// Set up the format, eg.
format2.setFrequency(8000);
format2.setChannels(1);
format2.setSampleSize(8);
format2.setCodec("audio/pcm");
format2.setByteOrder(QAudioFormat::LittleEndian);
format2.setSampleType(QAudioFormat::UnSignedInt);
QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
if (!info.isFormatSupported(format2)) {
qWarning()<<"raw audio format not supported by backend, cannot play audio.";
// return;
}
audioOutput = new QAudioOutput(format2, this);
connect(audioOutput,SIGNAL(stateChanged(QAudio::State)),SLOT(finishedPlaying(QAudio::State)));
audioOutput->start(&inputFile);
cout <<"play begin!" << endl;
}
void Widget::finishedPlaying(QAudio::State state) //finish playing
{
if(state == QAudio::IdleState) {
audioOutput->stop();
inputFile.close();
delete audioOutput;
}
cout << "play end!" << endl;
}
Widget::~Widget() //finish porgm
{
delete ui;
}
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QtGui>
#include <QAudioInput> //QT += multimedia?
#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 on_play_clicked();
void on_record_clicked();
void finishedPlaying(QAudio::State state);
void stopRecording();
//void on_pushButton_clicked();
private:
Ui::Widget *ui;
QFile outputFile; // class member.
QAudioInput* audio; // class member.
QAudioOutput* audioOutput;
QFile inputFile; // class member.
};
#endif // WIDGET_H
