Qt實現麥克風音頻輸入保存wav文件

一.本文目的

實現在Qt中接收麥克風數據并保存為WAV文件,使用QAudioInput來錄音,并使用QFile來保存數據到WAV文件。

開發環境:QT5.12

????本文用極簡代碼實現,核心代碼只需不到100行。

????完整工程代碼文末鏈接可以直接下載。

???

二.代碼實現

(1)main.cpp

#include "audiorecorder.h"

#include <QtWidgets>

int main(int argc, char *argv[])

{

????QApplication app(argc, argv);

????AudioRecorder recorder;

????recorder.show();

????return app.exec();

}

2.audiorecorder.h

#ifndef AUDIORECORDER_H

#define AUDIORECORDER_H

#include <QMainWindow>

#include <QMediaRecorder>

#include <QUrl>

QT_BEGIN_NAMESPACE

namespace Ui { class AudioRecorder; }

class QAudioRecorder;

class QAudioProbe;

QT_END_NAMESPACE

class AudioRecorder : public QMainWindow

{

????Q_OBJECT

public:

????AudioRecorder();

private slots:

????void on_outputButton_clicked();

????void on_recordButton_clicked();

????void updateProgress(qint64 pos);

private:

????Ui::AudioRecorder *ui = nullptr;

????QAudioRecorder *m_audioRecorder = nullptr;

????QAudioProbe *m_probe = nullptr;

};

#endif // AUDIORECORDER_H

3.audiorecorder.cpp

#include "audiorecorder.h"

#include "ui_audiorecorder.h"

#include <QAudioProbe>

#include <QAudioRecorder>

#include <QDir>

#include <QFileDialog>

#include <QMediaRecorder>

#include <QStandardPaths>

AudioRecorder::AudioRecorder()

????: ui(new Ui::AudioRecorder)

{

????ui->setupUi(this);

????m_audioRecorder = new QAudioRecorder(this);

????m_probe = new QAudioProbe(this);

????m_probe->setSource(m_audioRecorder);

????//audio devices

????ui->audioDeviceBox->addItem(tr("Default"), QVariant(QString()));

????for (auto &device: m_audioRecorder->audioInputs()) {

????????ui->audioDeviceBox->addItem(device, QVariant(device));

????????qDebug()<<"device:"<<device;

????}

????QAudioEncoderSettings settings;

????settings.setCodec(""); ?

????settings.setSampleRate(44100);

????settings.setChannelCount(1); ?//單通道

????settings.setQuality(QMultimedia::NormalQuality); ?

????m_audioRecorder->setEncodingSettings(settings, QVideoEncoderSettings(), "audio/x-wav");

????connect(m_audioRecorder, &QAudioRecorder::durationChanged, this, &AudioRecorder::updateProgress);

}

void AudioRecorder::on_outputButton_clicked()

{

????QString fileName = QFileDialog::getSaveFileName();

????m_audioRecorder->setOutputLocation(QUrl::fromLocalFile(fileName));

}

void AudioRecorder::on_recordButton_clicked()

{

????if(ui->recordButton->text() == "Record")

????{

????????m_audioRecorder->record();

????????ui->recordButton->setText("Pause");

????}

????else if(ui->recordButton->text() == "Pause")

????{

????????m_audioRecorder->stop();

????????ui->recordButton->setText("Record");

????}

}

void AudioRecorder::updateProgress(qint64 duration)

{

????if (m_audioRecorder->error() != QMediaRecorder::NoError || duration < 1000)

????????return;

????ui->statusbar->showMessage(tr("Recorded %1 sec").arg(duration / 1000));

}

三.工程代碼下載

https://download.csdn.net/download/xieliru/89398205

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/24255.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/24255.shtml
英文地址,請注明出處:http://en.pswp.cn/web/24255.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

51單片機STC89C52RC——創建Keil項目

一&#xff0c;打開Keil5 菜單---project--New uVision Project... 二&#xff0c;新建項目文件夾 彈出選擇文件夾對話框后&#xff0c;可以右鍵新建一個項目文件夾【文件夾名字可以隨便取&#xff0c;自己看得懂就行&#xff0c;建議不要有特殊字符】&#xff0c;這樣該項目…

MATLAB算法實戰應用案例精講-【數模應用】因子分析(附MATLAB和python代碼實現)

目錄 前言 算法原理 SPSS因子分析 操作步驟 結果分析 SPSSAU 因子分析案例 1、背景 2、理論 3、操作 4、SPSSAU輸出結果 5、文字分析 6、剖析 疑難解惑 同源方差或共同方法變異偏差,Harman單因子檢驗? 提示出現奇異矩陣? 因子得分和綜合得分? 因子分析計…

品牌策劃:不只是工作,是一場創意與學習的旅程

你是否認為只有那些經驗豐富、手握無數成功案例的高手才能在品牌策劃界嶄露頭角&#xff1f; 今天&#xff0c;我要悄悄告訴你一個行業內的秘密&#xff1a;在品牌策劃的世界里&#xff0c;經驗雖重要&#xff0c;但絕非唯一。 1?、無止境的學習欲望 品牌策劃&#xff0c;這…

rtl8723DU移植 android4.4 4418 (第二部分藍牙部分)

使用的代碼&#xff1a; HMI &#xff08;8723bu&#xff09;源碼 567_RTL8723DU_WiFi_linux_v5.6.5.3_35502_COEX20181130-2e2e.20191025.zip 由于之前寫的所有筆記沒有保存&#xff0c;這里只能是部分。 0、 前置知識 1 、kernel 的移植 2、hardwire的移植 將 驅動中的 h…

流水線報錯:[Error: ENOENT: no such file or directory, stat ‘/application/bin‘]

報錯信息&#xff1a; #18 10.37 > Build error occurred #18 10.38 [Error: ENOENT: no such file or directory, stat /application/bin] { #18 10.38 errno: -2, #18 10.38 code: ENOENT, #18 10.38 syscall: stat, #18 10.38 path: /application/bin #18 10.38 } #18 12…

騰訊開源人像照片生成視頻模型V-Express

網址 https://github.com/tencent-ailab/V-Express 下面是github里的翻譯&#xff1a; 在人像視頻生成領域&#xff0c;使用單張圖像生成人像視頻變得越來越普遍。一種常見的方法是利用生成模型來增強受控發電的適配器。 但是&#xff0c;控制信號的強度可能會有所不同&…

系統思考—啤酒游戲沙盤

10個智商120的?組人?成?團的?隊&#xff0c;大?的家?集體智?是商?多少&#xff1f; 在?期長?輔?各導?種?業企?的?程過?中&#xff0c;我?經們?常?察觀?到&#xff0c;雖?每然?個?門部?都?力努?解決?己自?的問題&#xff0c;但?司公?整體的?收應…

Rust 標記一個屬性或函數為廢棄

如題&#xff0c;演示Rust 標記一個屬性或函數為廢棄的基本使用方法&#xff1a; 示例&#xff1a; use serde::{Deserialize, Serialize};#[derive(Clone, Debug, Serialize, Deserialize, Default)] pub struct GrpcOptions {pub addr: String,pub max_recv_message_size: u…

conntrack如何限制您的k8s網關

1.1 conntrack 介紹 對于那些不熟悉的人來說,conntrack簡單來說是Linux內核的一個子系統,它跟蹤所有進入、出去或通過系統的網絡連接,允許它監控和管理每個連接的狀態,這對于諸如NAT(網絡地址轉換)、防火墻和保持會話連續性等任務至關重要。它作為Netfilter的一部分運行,…

解決福昕風騰PDF套裝無法打印在線電子簽章的方法

使用福昕風騰PDF套裝打印在線電子簽章文件時發現&#xff0c;在線蓋的電子印章和簽名卻打印不出來&#xff0c;后現發現&#xff0c;按圖中選項選擇“文檔”&#xff0c;即可完整打印文件內容及電子簽章。留印。

(求一個整數各位數的和)編寫程序,讀取一個在0和1000之間的整數,并將該整數的各位數字相加。例如:整數是 932,各位數字之和為14。

(求一個整數各位數的和)編寫程序&#xff0c;讀取一個在0和1000之間的整數&#xff0c;并將該整數 的各位數字相加。例如:整數是 932&#xff0c;各位數字之和為14。 提示:利用操作符%分解數字,然后使用操作符/去掉分解出來的數字。例如: 932%10-2 932/10-93。下面是一個運行示…

nginx-變量

變量也是nginx的一大亮點&#xff0c;這也使得nginx更加靈活了&#xff0c;變量的語法格式為 $XXX 或 ${xxxx} 首先說下變量的分類&#xff0c;變量分為內置和自定義&#xff0c;網絡不少對變量的描述都不太準確&#xff0c;他們認為但凡不是nginx原生的變量都是屬于自定義&am…

iOS中常用的一些宏以及用法

目錄 1.NS_UNAVAILABLE 2.__kindof 前言 這里博客主要介紹iOS中常用的一些宏以及用法。 1.NS_UNAVAILABLE NS_UNAVAILABLE是一個宏&#xff0c;通常用于指示某個方法不可用&#xff0c;無法被調用。 當一個方法被標記為NS_UNAVAILABLE時&…

【uniapp】帶圓角漸變邊框實現

1. 效果圖 2. 代碼實現 <image class"item-left-img" :src"url" mode"aspectFill" />.item-left-img {width: 240rpx;height: 320rpx;border: 6rpx solid transparent;background-clip: padding-box, border-box;background-origin: padd…

校驗參數個數工具類

項目中有個需求&#xff1a;前后端參數一致性校驗&#xff0c;在某業務場景下后端代碼需要校驗參數個數&#xff0c;因此設計了1個工具類方便大伙使用&#xff0c;特此簡單記錄下。 校驗參數個數工具類 一、校驗工具類CheckNumInsideParamters二、單元測試ParameterSizeTest三…

數據挖掘--挖掘頻繁模式、關聯和相關性:基本概念和方法

頻繁項集、閉項集和關聯規則 頻繁項集&#xff1a;出現的次數超過最小支持度計數閾值 閉頻繁項集&#xff1a;一個集合他的超集(包含這個集合的集合)在數據庫里面的數量和這個集合在這個數據庫里面的數量不一樣,這個集合就是閉項集 如果這個集合還是頻繁的,那么他就是極大頻…

關于json文件的保存

在nodejs中&#xff0c;通常用fs.writeFileSync(filepath,JSON.stringify(jsonvar))這樣的調用&#xff0c;將json或者json數組轉換成字符串寫入到文件中&#xff0c;這時json的數據是緊湊的&#xff0c;沒有空格、制表符和換行來分隔&#xff0c;優點是可以省存儲空間&#xf…

SpringCache和SpringTask

SpringCache 在啟動類上加EnableCaching注解 我們只要在Controller上寫一個SpringCache相應的注解 我們就能實現緩存了 簡化緩存操作代碼&#xff0c;提高我們的效率 我們默認是我們的spring做緩存 但我們還可以替換我們的緩存技術 例如 EhCache Google Redis 來作為…

MAVEN:自定義模板Archetype的創建

目錄 一、簡介 二、具體步驟 三、 vscode通過模板創建項目 四、通過IDEA創建 一、簡介 有時候MAVEN自帶的模板庫并不能滿足我們創建項目的需求&#xff0c;為了能夠快速創建項目&#xff0c;免去每次復雜的配置&#xff0c;所以我們需要自定義模板庫&#xff0c;本次操作基于…

Linux 性能優化基礎

文章目錄 常見指標分類&#xff08;USE法&#xff09;常見性能工具CPU性能工具內存性能工具文件系統和磁盤I/O性能工具網絡性能工具 根據指標找工具CPU性能內存性能文件系統和磁盤I/O網絡性能 根據工具找指標CPU性能內存性能文件系統和磁盤I/O網絡性能 CPU性能分析一般步驟內存…