(DEMO代码)项目名称:myAudio
myAudio.pro
QT += multimedia
myaudiodialog.h
#ifndef MYAUDIODIALOG_H
#define MYAUDIODIALOG_H
#include <QDialog>
#include <QLabel>
#include <QPushButton>
#include <QAudio>
#include <QMultimedia>
#include <QFile>
#include <QDebug>
#include <QAudioDeviceInfo>
#include <QAudioFormat>
#include <QAudioInput>
#include <QAudioOutput>
#include <QTimer>
class myAudioDialog : public QDialog
{
Q_OBJECT
public:
myAudioDialog(QWidget *parent = 0);
~myAudioDialog();
private slots:
void startBtnResponded();
void playBtnResponded();
private:
typedef enum{RECORD_START, RECORD_FINISH} RecordFlag;
RecordFlag flag;
QPushButton *startBtn; // start or finish
QPushButton *playBtn;
QLabel *messageLabel;
QFile *file;
QAudioFormat format;
QAudioDeviceInfo info;
QAudioInput *input;
QAudioOutput *output;
};
#endif // MYAUDIODIALOG_H
myaudiodialog.cpp
#include "myaudiodialog.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
myAudioDialog::myAudioDialog(QWidget *parent)
: QDialog(parent)
{
this->setFixedSize(300, 100);
startBtn = new QPushButton(tr("Start"), this); // start or finish
playBtn = new QPushButton(tr("Play"), this);
messageLabel = new QLabel(this);
QHBoxLayout *bottomLayout = new QHBoxLayout;
bottomLayout->addStretch();
bottomLayout->addWidget(startBtn);
bottomLayout->addWidget(playBtn);
bottomLayout->addStretch();
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(messageLabel);
mainLayout->addLayout(bottomLayout);
format.setSampleRate(8000);
format.setChannelCount(1);
format.setSampleSize(8);
format.setCodec("audio/wav");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::UnSignedInt);
info = QAudioDeviceInfo::defaultInputDevice();
if(!info.isFormatSupported(format))
{
format = info.nearestFormat(format);
}
input = new QAudioInput(format, this);
output = new QAudioOutput(format, this);
file = new QFile;
file->setFileName("D:/workspace/Qt_Project/test/audio/hello.wav");
flag = RECORD_START;
connect(startBtn, SIGNAL(clicked()), this, SLOT(startBtnResponded()));
connect(playBtn, SIGNAL(clicked()), this, SLOT(playBtnResponded()));
this->setLayout(mainLayout);
this->setWindowTitle(info.deviceName());
}
myAudioDialog::~myAudioDialog()
{
}
void myAudioDialog::startBtnResponded()
{
if(flag == RECORD_START)
{
bool isOpen = file->open(QIODevice::WriteOnly | QIODevice::Truncate);
if(!isOpen)
{
qDebug() << "打开文件失败";
exit(1);
}
QString str = info.deviceName();
qDebug() << "使用的录音设备是:" << str;
messageLabel->setText(tr("录音开始......"));
input->start(file);
flag = RECORD_FINISH;
startBtn->setText(tr("Finish"));
}
else if(flag == RECORD_FINISH)
{
input->stop();
file->close();
messageLabel->setText(tr("录音结束......"));
flag = RECORD_START;
startBtn->setText(tr("Start"));
}
}
void myAudioDialog::playBtnResponded()
{
file->open(QIODevice::ReadOnly);
output->start(file);
}