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

harmony OS NEXT-音频录制与播放模块

HarmonyOS 音频录制与播放模块

1.模块功能概览

  • 麦克风权限动态检测与申请
  • 音频录制功能(支持参数配置)
  • 音频波形实时可视化(暂时未完善,先凑合看,后续会完善)
  • 录音文件播放功能

2.权限检测流程

1.代码实现

async checkPermission() {
  const manager = abilityAccessCtrl.createAtManager();
  
  // 首次权限申请
  const result = await manager.requestPermissionsFromUser(
    getContext(), ["ohos.permission.MICROPHONE"]
  );

  // 检查所有权限是否通过
  const isPass = result.authResults.every(
    res => res === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED
  );

  if (!isPass) {
    // 二次弹窗引导设置
    const confirm = await promptAction.showDialog({...});
    
    if (confirm.index === 1) {
      // 跳转系统设置
      const finalResult = await manager.requestPermissionOnSetting(
        getContext(), ["ohos.permission.MICROPHONE"]
      );
    }
  }
}

2.2. 权限状态处理

状态处理方式
第一次授权成功直接启用录音功能
第一次授权失败弹窗提示前往系统设置
系统设置二次授权失败返回上级页面

3. 录音功能核心实现

1.录音机配置
// 创建文件描述符
const file = fileIo.openSync(filePath, 
  fileIo.OpenMode.CREATE | fileIo.OpenMode.READ_WRITE);

// AVRecorder 参数配置
const config = {
  audioSourceType: media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC,
  url: `fd://${file.fd}`,
  profile: {
    audioBitrate: 100000,
    audioChannels: 2,
    audioSampleRate: 48000,
    audioCodec: media.CodecMimeType.AUDIO_AAC,
    fileFormat: media.ContainerFormatType.CFT_MPEG_4A
  }
};

2.录音操作控制

方法功能描述
startRecord()创建文件句柄/配置参数/启动录音
stopRecord()停止录音/释放资源/关闭文件

3.音频播放实现

async playRecord() {
  const avPlayer = await media.createAVPlayer();
  avPlayer.url = `fd://${file.fd}`;
  
  avPlayer.on('stateChange', (state) => {
    if (state === 'initialized') {
      avPlayer.prepare();
    } else if (state === 'prepared') {
      avPlayer.play(); // 自动播放
    }
  });
}

4.效果展示

img

相关文章:

  • 自动同步多服务器下SQL脚本3.0
  • Redis--List类型
  • C/C++中对字符处理的常用函数
  • AutoGen智能体代码解读
  • [Ai 力扣题单] 数组基本操作篇 27/704/344
  • 4.Kettle调度oracle任务设置邮件预警功能
  • 解决ElementPlus对话框el-dialog中关闭事件重复触发问题
  • Android Retrofit 请求执行模块执行原理深入源码分析(三)
  • 力扣hot100二刷——链表
  • Pac-Man(吃豆人) 游戏
  • Redis 缓存数据库
  • Node.js:快速启动你的第一个Web服务器
  • 考研数学非数竞赛复习之Stolz定理求解数列极限
  • IP 地址
  • 跳表数据结构
  • 大数据学习(63)- Zookeeper详解
  • 索引-最左匹配
  • 【项目设计】基于AMQP协议实现的简单消息队列
  • android okhttp几种日志拦截级别区别
  • 数据可视化图表库LightningChart JS 全新发布v7.0——提高视觉质量
  • 赛力斯拟赴港上市:去年扭亏为盈净利59亿元,三年内实现百万销量目标
  • 最近这75年,谁建造了上海?
  • 加拿大今日大选:房价、印度移民和特朗普,年轻人在焦虑什么?
  • CSR周刊:李宁打造世界地球日特别活动,珀莱雅发布2024年度可持续发展报告
  • 又一名90后干部被查,已有多人倒在乡镇领导岗位上
  • 俄罗斯称已收复库尔斯克州,普京发表讲话