当前位置: 首页 > news >正文

【ArkTS】使用AVRecorder录制音频 --内附录音机开发详细代码

系列文章目录

【ArkTS】关于ForEach的第三个参数键值
【ArkTS】“一篇带你读懂ForEach和LazyForEach” 【小白拓展】
【ArkTS】“一篇带你掌握TaskPool与Worker两种多线程并发方案”
【ArkTS】 一篇带你掌握“语音转文字技术” --内附详细代码
【ArkTS】技能提高–“用户授权”跳转设置页的两种方式详解


文章目录

  • 系列文章目录
  • 一、录音授权
  • 二、使用 AvRecorder 录音
    • 1.创建一个文件, 准备用来存储音频数据
    • 2.参考官网, cv配置
    • 3.创建录音实例对象
    • 4.开始准备状态 💥💥 注意些await
    • 5.整合开始录制代码
    • 6.停止录制代码
  • 总结


一、录音授权

目标:使用权限请求工具,在录音页面实现请求权限,无权限不可进入
录音授权有在别的文章里详解过,大家可以点下面两个链接看一下。我们这里就直接放封装好的代码。
【鸿蒙开发】超全面解读 带你充分掌握—“向用户申请授权”

import { promptAction, router } from '@kit.ArkUI'
import { abilityAccessCtrl, Permissions } from '@kit.AbilityKit'class permission{confirmConfig: promptAction.ShowDialogOptions = {title: "温馨提示",message: "未授权使用麦克风将无法使用该面试录音功能,是否前往设置进行授权?",buttons: [{ text: '离开', color: '#ffaeabab' },{ text: '去授权', color: '#000000' }]}/** 请求权限 */async getPermission(permissions:Permissions[]) {//   . requestPermissionsFromUser()const mgr = abilityAccessCtrl.createAtManager()const ctx = getContext(this)const res = await mgr.requestPermissionsFromUser(ctx, permissions)if (res.authResults[0] === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {return}// 第一次没有授权const res2 = await promptAction.showDialog(this.confirmConfig)// 用户选了离开, 没有选二次授权if (res2.index === 0) {router.back()return}//拉起授权页const res3 = await mgr.requestPermissionOnSetting(ctx, permissions)if (res3[0] === abilityAccessCtrl.GrantStatus.PERMISSION_DENIED) {router.back()}}
}export const Permission=new permission()

效果示例图:
在这里插入图片描述

二、使用 AvRecorder 录音

目标:使用 AvRecorder 实现音频录制存储到应用沙箱

在这里插入图片描述

实现步骤:

在这里插入图片描述

1.创建一个文件, 准备用来存储音频数据

 // 1. 创建一个文件, 准备用来存储音频数据const context = getContext(this)const filePath = `${context.filesDir}/${Date.now()}.m4a`this.file = fileIo.openSync(filePath, fileIo.OpenMode.CREATE | fileIo.OpenMode.READ_WRITE)

2.参考官网, cv配置

开发步骤及注意事项

let avProfile: media.AVRecorderProfile = {audioBitrate: 100000, // 音频比特率audioChannels: 2, // 音频声道数audioCodec: media.CodecMimeType.AUDIO_AAC, // 音频编码格式,当前支持ACC,MP3,G711MUaudioSampleRate: 48000, // 音频采样率fileFormat: media.ContainerFormatType.CFT_MPEG_4A, // 封装格式,当前支持MP4,M4A,MP3,WAV}let avConfig: media.AVRecorderConfig = {audioSourceType: media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC, // 音频输入源,这里设置为麦克风profile: avProfile,//改为自己的文件url: 'fd://' + this.file.fd, // 参考应用文件访问与管理中的开发示例获取创建的音频文件fd填入此处}

3.创建录音实例对象

this.record = await media.createAVRecorder()

4.开始准备状态 💥💥 注意些await

 	await this.record.prepare(avConfig)this.record.start()

5.整合开始录制代码

async startRecord() {// 1. 创建一个文件, 准备用来存储音频数据const context = getContext(this)const filePath = `${context.filesDir}/${Date.now()}.m4a`this.file = fileIo.openSync(filePath, fileIo.OpenMode.CREATE | fileIo.OpenMode.READ_WRITE)// 2. 参考官网,  cv配置let avProfile: media.AVRecorderProfile = {audioBitrate: 100000, // 音频比特率audioChannels: 2, // 音频声道数audioCodec: media.CodecMimeType.AUDIO_AAC, // 音频编码格式,当前支持ACC,MP3,G711MUaudioSampleRate: 48000, // 音频采样率fileFormat: media.ContainerFormatType.CFT_MPEG_4A, // 封装格式,当前支持MP4,M4A,MP3,WAV}let avConfig: media.AVRecorderConfig = {audioSourceType: media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC, // 音频输入源,这里设置为麦克风profile: avProfile,// 3. 改为自己的文件url: 'fd://' + this.file.fd, // 参考应用文件访问与管理中的开发示例获取创建的音频文件fd填入此处}// 4. 创建录音实例对象this.record = await media.createAVRecorder()// 5. 开始准备状态  💥💥 注意些awaitawait this.record.prepare(avConfig)this.record.start()}

6.停止录制代码

 async stopRecord() {await this.record?.stop()// 销毁实例await this.record?.release();fileIo.closeSync(this.file?.fd)promptAction.showToast({ message: '音频录制成功' })}

总结

以上就是录音机部分代码,明日更新完整版

相关文章:

【ArkTS】使用AVRecorder录制音频 --内附录音机开发详细代码

系列文章目录 【ArkTS】关于ForEach的第三个参数键值 【ArkTS】“一篇带你读懂ForEach和LazyForEach” 【小白拓展】 【ArkTS】“一篇带你掌握TaskPool与Worker两种多线程并发方案” 【ArkTS】 一篇带你掌握“语音转文字技术” --内附详细代码 【ArkTS】技能提高–“用户授权”…...

Selenium3+Python如何操作键盘

selenium操作键盘,需要导入Keys类:“from selenium.webdriver.common.keys import Keys” 调用键盘操作的快捷键的方法 : 单键值:直接传入对应的键值“element.send_keys”(快捷键的键值) 组合键:键值之间由逗号分隔…...

PLC协议

PLC协议通常指的是可编程逻辑控制器(Programmable Logic Controller, PLC)与其他设备之间通信时所使用的协议。PLC广泛应用于工业自动化领域,用于控制和监控设备。不同厂商和应用场景可能使用不同的通信协议。 常见的PLC通信协议 1. Modbus …...

C_字符串的一些函数

1.字符串输入函数 scanf("%s",数组名)&#xff1b; gets(数组名)&#xff1b; 区别&#xff1a; scanf(“%s”,数组名); 把空格识别为输入结束 #include <stdio.h>int main() {char a[10];printf("输入&#xff1a;");scanf("%s",a)…...

使用Native AOT发布C# dll 提供给C++调用

Native AOT&#xff0c;即提前本地编译&#xff08;Ahead-Of-Time Compilation&#xff09;&#xff0c;是一种将托管代码&#xff08;如 C#&#xff09;编译为本机可执行文件的技术&#xff0c;无需在运行时进行任何代码生成。 &#xff08;Native AOT 优缺点截图摘自张善友博…...

Git 提交代码日志信息

前言 在项目中经常用到git提交代码&#xff0c;每次提交时需要添加日志信息&#xff0c;那么一套规范的日志信息会让整个git仓库看起来赏心悦目&#xff01; 以下是Git 提交代码日志信息的建议&#xff1a; 一、格式规范 标题&#xff08;Subject&#xff09; 标题是日志信息中…...

Request method ‘POST‘ not supported(500)

前端路径检查 查看前端的请求路径地址、请求类型、方法名是否正确&#xff0c;结果没问题 后端服务检查 查看后端的传参uri、传参类型、方法名&#xff0c;结果没问题 nacos服务名检查 检查注册的服务是否对应&#xff08;我这里是后端的服务名是‘ydlh-gatway’,服务列表走…...

终端环境下关闭显示器

终端环境下关闭显示器 使用vbetool vbetool 使用 lrmi 来运行视频 BIOS 中的代码。目前&#xff0c;它能够更改 DPMS 状态、保存/恢复视频卡状态并尝试从头开始初始化视频卡。 vbetool dpms off...

常见排序算法总结 (三) - 归并排序与归并分治

归并排序 算法思想 将数组元素不断地拆分&#xff0c;直到每一组中只包含一个元素&#xff0c;单个元素天然有序。之后用归并的方式收集跨组的元素&#xff0c;最终形成整个区间上有序的序列。 稳定性分析 归并排序是稳定的&#xff0c;拆分数组时会自然地将元素分成有先后…...

【后端开发】Go语言编程实践,Goroutines和Channels,基于共享变量的并发,反射与底层编程

【后端开发】Go语言编程实践&#xff0c;Goroutines和Channels&#xff0c;基于共享变量的并发&#xff0c;反射与底层编程 【后端开发】Go语言高级编程&#xff0c;CGO、Go汇编语言、RPC实现、Web框架实现、分布式系统 文章目录 1、并发基础, Goroutines和Channels2、基于共享…...

PyTorch 2.5.1: Bugs修复版发布

一&#xff0c;前言 在深度学习框架的不断迭代中&#xff0c;PyTorch 社区始终致力于提供更稳定、更高效的工具。最近&#xff0c;PyTorch 2.5.1 版本正式发布&#xff0c;这个版本主要针对 2.5.0 中发现的问题进行了修复&#xff0c;以提升用户体验。 二&#xff0c;PyTorch 2…...

【Android】组件化嘻嘻嘻gradle耶耶耶

文章目录 Gradle基础总结&#xff1a;gradle-wrapper项目根目录下的 build.gradlesetting.gradle模块中的 build.gradlelocal.properties 和 gradle.properties 组件化&#xff1a;项目下新建一个Gradle文件定义一个ext扩展区域config.gradle全局基础配置&#xff08;使用在项目…...

vulnhub靶场【哈利波特】三部曲之Aragog

前言 使用virtual box虚拟机 靶机&#xff1a;Aragog : 192.168.1.101 攻击&#xff1a;kali : 192.168.1.16 主机发现 使用arp-scan -l扫描&#xff0c;在同一虚拟网卡下 信息收集 使用nmap扫描 发现22端口SSH服务&#xff0c;openssh 80端口HTTP服务&#xff0c;Apach…...

HarmonyOS开发中,如何高效定位并分析内存泄露相关问题

HarmonyOS开发中&#xff0c;如何高效定位并分析内存泄露相关问题 (1)Allocation的应用调试方式Memory泳道Native Allocation泳道 (2)Snapshot(3)ASan的应用使用约束配置参数使能ASan方式一方式二 启用ASanASan检测异常码 (4)HWASan的应用功能介绍约束条件使能HWASan方式一方式…...

java调用ai模型:使用国产通义千问完成基于知识库的问答

整体介绍&#xff1a; 基于RAG&#xff08;Retrieval-Augmented Generation&#xff09;技术&#xff0c;可以实现一个高效的Java智能问答客服机器人。核心思路是将预先准备的问答QA文档&#xff08;例如Word格式文件&#xff09;导入系统&#xff0c;通过数据清洗、向量化处理…...

2023年第十四届蓝桥杯Scratch国赛真题—推箱子

推箱子 程序演示及其源码解析&#xff0c;可前往&#xff1a; https://www.hixinao.com/scratch/creation/show-188.html 若需在线编程&#xff0c;在线测评模考&#xff0c;助力赛事可自行前往题库中心&#xff0c;按需查找&#xff1a; https://www.hixinao.com/ 题库涵盖…...

银河麒麟V10-SP1设置redis开机自启

前言&#xff1a; redis安装请看&#xff1a;银河麒麟V10-SP1离线安装redis5.0.1_银河麒麟v10 redis5.0-CSDN博客 一、编辑自启文件 vim /etc/systemd/system/redis.service [Unit] DescriptionRedis In-Memory Data Store Afternetwork.target [Service] Typeforking ExecS…...

释放超凡性能,打造鸿蒙原生游戏卓越体验

11月26日在华为Mate品牌盛典上&#xff0c;全新Mate70系列及多款全场景新品正式亮相。在游戏领域&#xff0c;HarmonyOS NEXT加持下游戏的性能得到充分释放。HarmonyOS SDK为开发者提供了软硬协同的系统级图形加速解决方案——Graphics Accelerate Kit&#xff08;图形加速服务…...

Node.js 实战: 爬取百度新闻并序列化 - 完整教程

很多时候我们需要爬取一些公开的网页内容来做一些数据分析和统计。而多数时候&#xff0c;大家会用到python &#xff0c;因为实现起来很方便。但是其实Node.js 用来爬取网络内容&#xff0c;也是非常强大的。 今天我向大家介绍一下我自己写的一个百度新闻的爬虫&#xff0c;可…...

106.【C语言】数据结构之二叉树的三种递归遍历方式

目录 1.知识回顾 2.分析二叉树的三种遍历方式 1.总览 2.前序遍历 3.中序遍历 4.后序遍历 5.层序遍历 3.代码实现 1.准备工作 2.前序遍历函数PreOrder 测试结果 3.中序遍历函数InOrder 测试结果 4.后序遍历函数PostOrder 测试结果 4.底层分析 1.知识回顾 在99.…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...