0
点赞
收藏
分享

微信扫一扫

Qt5如何使用麦克风


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


举报

相关推荐

0 条评论