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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿基米东

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值