uniapp實現H5頁面麥克風權限獲取與錄音功能

1.權限配置

在uni-app開發H5頁面時,需要在manifest.json文件中添加錄音權限的配置。具體如下:

{"h5": {"permissions": {"scope.record": {"desc": "請授權使用錄音功能"}}}
}

這段配置代碼是用于向用戶請求麥克風權限,確保應用在運行時可以訪問設備的音頻輸入。

編寫獲取權限代碼

在獲取了麥克風權限后,我們可以利用navigator.mediaDevices.getUserMedia接口獲取音頻流,然后通過MediaRecorder接口進行錄音。接下來,我們將實現一個簡單的錄音功能。

首先,我們在頁面中添加錄音按鈕和錄音狀態顯示的HTML結構:

<template><view><button @click="startRecording">開始錄音</button><button @click="stopRecording" :disabled="!isRecording">停止錄音</button><text>錄音狀態:{{ isRecording ? '錄音中' : '未錄音' }}</text></view>
</template>

這個部分用于在頁面上展示錄音的控制按鈕和狀態信息。接下來,我們編寫JavaScript代碼,分別實現將音頻流轉換為Blob文件并上傳、將音頻流轉換為Base64字符串上傳,以及將音頻文件下載到本地的功能。

js代碼(將音頻文件轉換為Blob上傳)

<script>
export default {data() {return {isRecording: false,mediaRecorder: null,audioChunks: []};},methods: {async startRecording() {try {const stream = await navigator.mediaDevices.getUserMedia({ audio: true });this.mediaRecorder = new MediaRecorder(stream);this.mediaRecorder.ondataavailable = (event) => {this.audioChunks.push(event.data);};this.mediaRecorder.onstop = () => {const audioBlob = new Blob(this.audioChunks, { type: 'audio/wav' });this.uploadAudio(audioBlob);};this.mediaRecorder.start();this.isRecording = true;} catch (error) {console.error('獲取麥克風權限失敗:', error);}},stopRecording() {if (this.mediaRecorder) {this.mediaRecorder.stop();this.isRecording = false;}},uploadAudio(audioBlob) {const formData = new FormData();formData.append('audio', audioBlob, 'recorded_audio.wav');uni.uploadFile({url: 'https://xxx.com/upload', // 替換為你的后端接口地址filePath: URL.createObjectURL(audioBlob),name: 'audio',formData: formData,success: (res) => {console.log('上傳成功:', res);},fail: (err) => {console.error('上傳失敗:', err);}});}}
};
</script>

js代碼(將音頻文件轉換為base64類型上傳)

<script>
export default {data() {return {isRecording: false,mediaRecorder: null,audioChunks: []};},methods: {async startRecording() {try {const stream = await navigator.mediaDevices.getUserMedia({ audio: true });this.mediaRecorder = new MediaRecorder(stream);this.mediaRecorder.ondataavailable = (event) => {this.audioChunks.push(event.data);};this.mediaRecorder.onstop = () => {const audioBlob = new Blob(this.audioChunks, { type: 'audio/wav' });this.convertToBase64(audioBlob);};this.mediaRecorder.start();this.isRecording = true;} catch (error) {console.error('獲取麥克風權限失敗:', error);}},stopRecording() {if (this.mediaRecorder) {this.mediaRecorder.stop();this.isRecording = false;}},convertToBase64(audioBlob) {const reader = new FileReader();reader.readAsDataURL(audioBlob);reader.onloadend = () => {const base64Audio = reader.result;this.sendAudioToBackend(base64Audio);};},sendAudioToBackend(base64Audio) {uni.request({url: 'https://xxx.com/upload', // 替換為你的后端接口地址method: 'POST',data: {audio: base64Audio},success: (res) => {console.log('上傳成功:', res);},fail: (err) => {console.error('上傳失敗:', err);}});}}
};
</script>

JS代碼(下載錄制好的音頻)

downloadAudio(audioBlob) {const url = URL.createObjectURL(audioBlob);const a = document.createElement('a');a.style.display = 'none';a.href = url;a.download = 'recorded_audio.wav';document.body.appendChild(a);a.click();window.URL.revokeObjectURL(url);
}

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

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

相關文章

功能豐富的PDF處理免費軟件推薦

軟件介紹 今天給大家介紹一款超棒的PDF工具箱&#xff0c;它處理PDF文檔的能力超強&#xff0c;而且是完全免費使用的&#xff0c;沒有任何限制。 TinyTools&#xff08;PC&#xff09;這款軟件&#xff0c;下載完成后即可直接打開使用。在使用過程中&#xff0c;操作完畢后&a…

鴻蒙開發-ArkUi控件使用

2.0控件-按鈕 2.1.控件-文本框 Text(this.message).fontSize(40) // 設置文本的文字大小.fontWeight(FontWeight.Bolder) // 設置文本的粗細.fontColor(Color.Red) // 設置文本的顏色------------------------------------------------------------------------- //設置邊框Tex…

深入理解 ResponseBodyAdvice 及其應用

ResponseBodyAdvice 是 Spring MVC 提供的一個強大接口&#xff0c;允許你在響應體被寫入 HTTP 響應之前對其進行全局處理。 下面我將全面介紹它的工作原理、使用場景和最佳實踐。 基本概念 接口定義 public interface ResponseBodyAdvice<T> {boolean supports(Metho…

深度解析Redis過期字段清理機制:從源碼到集群化實踐 (一)

深度解析Redis過期字段清理機制&#xff1a;從源碼到集群化實踐 一、問題本質與架構設計 1.1 過期數據管理的核心挑戰 Redis連接池時序圖技術方案 ??設計規范&#xff1a;? #mermaid-svg-Yr9fBwszePgHNnEQ {font-family:"trebuchet ms",verdana,arial,sans-se…

數據庫ocm有什么用

專業能力的權威象征 。技術水平的高度認可&#xff1a;OCM 是 Oracle 認證體系中的最高級別&#xff0c;代表著持證人在 Oracle 數據庫領域具備深厚的專業知識和卓越的實踐技能。它證明持證人能夠熟練掌握數據庫的安裝、配置、管理、優化、備份恢復等核心技術&#xff0c;并且能…

無人船 | 圖解基于視線引導(LOS)的無人艇制導算法

目錄 1 視線引導法介紹2 LOS制導原理推導3 Lyapunov穩定性分析4 LOS制導效果 1 視線引導法介紹 視線引導法&#xff08;Line of Sight, LOS&#xff09;作為無人水面艇&#xff08;USV&#xff09;自主導航領域的核心技術&#xff0c;通過幾何制導與動態控制深度融合的機制&am…

Swift觀察機制新突破:如何用AsyncSequence實現原子化數據監聽?

網羅開發 &#xff08;小紅書、快手、視頻號同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企業從事人工智能項目研發管理工作&#xff0c;平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

【KWDB創作者計劃】_KWDB部署與使用詳細版本

KWDB發展歷程 介紹KWDB前&#xff0c;先介紹下KaiwuDB&#xff0c; KaiwuDB 是浪潮控股的數據庫企業&#xff0c;該企業提供的KaiwuDB數據庫是一款分布式多模數據庫產品&#xff0c;主要面向工業物聯網、數字能源、車聯網、智慧產業等行業領域。 在2024年7月&#xff0c; Kai…

Go:接口

接口既約定 Go 語言中接口是抽象類型 &#xff0c;與具體類型不同 &#xff0c;不暴露數據布局、內部結構及基本操作 &#xff0c;僅提供一些方法 &#xff0c;拿到接口類型的值 &#xff0c;只能知道它能做什么 &#xff0c;即提供了哪些方法 。 func Fprintf(w io.Writer, …

一、Appium環境安裝

找了一圈操作手機的工具或軟件&#xff0c;踩了好多坑&#xff0c;最后決定用這個工具(影刀RPA手機用的也是這個)&#xff0c;目前最新的版本是v2.17.1&#xff0c;是基于nodejs環境的&#xff0c;有兩種方式&#xff0c;我只試了第一種方式&#xff0c;第二種方式應該是比較簡…

【玩轉全棧】—— Django 連接 vue3 保姆級教程,前后端分離式項目2025年4月最新!!!

本文基于之前的一個旅游網站&#xff0c;實現 Django 連接 vue3&#xff0c;使 vue3 能攜帶 CSRF Token 發送 axios 請求給后端&#xff0c;后端再響應數據給前端。想要源碼直接滑倒底部。 目錄 實現效果 解決跨域 獲取 csrf-token 什么是 csrf-token &#xff1f; CSRF攻擊的…

dify部署,ollama部署,拉取模型,創建ai聊天應用

dify下載安裝 dify1.0.1 windos安裝包百度云盤地址 通過網盤分享的文件&#xff1a;dify-1.0.1.zip 鏈接: 百度網盤 請輸入提取碼 提取碼: 1234 dify安裝包 linux安裝包百度云盤地址 通過網盤分享的文件&#xff1a;dify-1.0.1.tar.gz 鏈接: 百度網盤 請輸入提取碼 提取碼…

docx文檔轉為pdf文件響應前端

1、轉換文件&#xff08;docx~pdf&#xff09; 1.引入pom依賴 <dependency><groupId>com.aspose</groupId><artifactId>aspose-words</artifactId><version>20.12.0</version> </dependency>2.讀取docx文檔數據-轉換 // 初…

網絡安全中信息收集需要收集哪些信息了?匯總

目錄 1. 域名信息 2. IP地址與網絡信息 3. 備案與注冊信息 4. Web應用與中間件信息 5. 操作系統與服務器信息 6. 敏感文件與配置文件 7. 社交工程信息 8. 證書與加密信息 9. API與接口信息 10. 外部威脅情報 11. 歷史數據與緩存 常用工具與技術&#xff1a; 在網絡…

【鋰電池SOH預測】PSO-BP鋰電池健康狀態預測,鋰電池SOH預測(Matlab完整源碼和數據)

預測效果 基于PSO-BP算法的鋰電池健康狀態預測研究 一、引言 1.1 研究背景與意義 在當今社會&#xff0c;鋰電池憑借其高能量密度、長壽命及環境友好等特性&#xff0c;在現代能源系統中占據著舉足輕重的地位。從消費電子領域如智能手機、筆記本電腦&#xff0c;到動力領域中…

智能車攝像頭開源—9 動態權、模糊PID、速度決策、路徑優化

目錄 一、前言 二、動態權 1.概述 2.偏差值加動態權 三、模糊PID 四、速度決策 1.曲率計算 2.速度擬合 3.速度控制 五、路徑 六、國賽視頻 一、前言 在前中期通過識別直道、彎道等元素可進行加減速操作實現速度的控制&#xff0c;可進一步縮減一圈的運行速度&#xff…

過往記錄系列 篇五:市場黑天鵝事件歷史梳理

文章目錄 系列文章文章地址文章摘要文章預覽系列文章 過往記錄系列 篇一:牛市板塊輪動順序梳理 過往記錄系列 篇二:新年1月份(至春節前)行情歷史梳理 過往記錄系列 篇三:春節行情歷史梳理 過往記錄系列 篇四:年報月行情歷史梳理 文章地址 原文審核不通過(理由:“違反…

Mysql--基礎知識點--85.1--Innodb自適應哈希索引

1. 自適應哈希索引的用途 InnoDB 的自適應哈希索引&#xff08;Adaptive Hash Index, AHI&#xff09;是 MySQL 數據庫引擎中一項智能優化查詢性能的功能。其核心作用如下&#xff1a; 加速等值查詢 哈希索引通過哈希函數將鍵映射到固定位置&#xff0c;實現 O(1) 時間復雜度的…

SQL優化技術分享:從 321 秒到 0.2 秒的性能飛躍 —— 基于 PawSQL 的 TPCH 查詢優化實戰

在數據庫性能優化領域&#xff0c;TPC-H 測試集是一個經典的基準測試工具&#xff0c;常用于評估數據庫系統的查詢性能。本文將基于 TPCH 測試集中的第 20個查詢&#xff0c;結合 PawSQL 自動化優化工具&#xff0c;詳細分析如何通過 SQL 重寫和索引設計&#xff0c;將查詢性能…

SpringBoot3-web開發筆記(下)

內容協商 實現&#xff1a;一套系統適配多端數據返回 多端內容適配&#xff1a; 1. 默認規則 SpringBoot 多端內容適配。 基于請求頭內容協商&#xff1a;&#xff08;默認開啟&#xff09; 客戶端向服務端發送請求&#xff0c;攜帶HTTP標準的Accept請求頭。 Accept: applica…