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

MediaRecorder媒体录音机

权限:

<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
RECORD_AUDIO  录音
WRITE_EXTERNAL_STORAGE  不加无法写入
READ_EXTERNAL_STORAGE  不加录不全 

代码:

MediaRecorder mediaRecorder=new MediaRecorder();  //创建MediaRecorder
mediaRecorder.reset();  //重置MediaRecorder参数
mediaRecorder.setAudioSource( MediaRecorder.AudioSource.MIC );  //设置音频来源,MediaRecorder.AudioSource.MIC表示麦克风 
mediaRecorder.setOutputFile( file );  //设置输出文件
mediaRecorder.setOutputFormat( MediaRecorder.OutputFormat.RAW_AMR );  //设置输出格式,MediaRecorder.OutputFormat.RAW_AMR表示 .arm文件格式
mediaRecorder.setAudioEncoder( MediaRecorder.AudioEncoder.AMR_NB );  //设置音频编码(方式),MediaRecorder.AudioEncoder.AMR_NB表示 .arm编码器
mediaRecorder.prepare();  //媒体录音机进入准备状态mediaRecorder.start();  //开始录音
mediaRecorder.pause();  //暂停
mediaRecorder.resume();  //继续
mediaRecorder.stop();  //中止录音,此时生成文件完成
mediaRecorder.release();  //释放资源,防止占用内存

注意:

1. 要在各项参数设置前重置MediaRecorder(参数)  .reset()

2. 不设置音频来源会导致生成的文件无音轨  .setAudioSource()

参数使用MediaRecorder.AudioSource.MIC表示麦克风输入

3. 不设置输出文件将无法生成文件  .setOutputFile( ~ )

4. 设置输出格式用于设置文件类型  .setOutputFormat( ~ )

参数使用MediaRecorder.OutputFormat.RAW_ARM表示 .arm文件格式     

5. 需要设置音频编码(方式) .setAudioEncoder( ~ )

参数使用MediaRecorder.AudioEncoder.ARM_NB表示 .arm编码器

6. 要在各项参数设置后使媒体录音机进入准备状态 .prepare()

7. MediaRecorder的使用

开始录音.start()   

暂停.pause()     

继续.resume()   

中止录音.stop()此时文件生成完成     

释放资源.release()防止占用资源

8. 权限三项都要

RECORD_AUDIO 录音
WRITE_EXTERNAL_STORAGE 不加无法写入文件
READ_EXTERNAL_STORAGE 不加录音只会有一小段(几秒),因录音机是不断在之前文件添加新音频并覆盖,无读取权限则只会进行覆盖

常见问题:

 1.  Android媒体录音机MediaRecorder录制出的文件只有几秒甚至几毫秒,原因可能是未添加文件读取权限(READ_EXTERNAL_STORAGE)。录音机录制时,每几毫秒会录制一次,新录制到的音频会添加至之前的音频文件末端,然后覆盖旧音频文件;如果没有文件读取权限,每次录制到的新音频只会覆盖旧音频文件回车。

http://www.lryc.cn/news/192471.html

相关文章:

  • 短视频如何批量添加水印
  • RT-Thread MQTT(学习)
  • Vue_Bug VUE-ELEMENT-ADMIN默认是英文模式
  • Spark中的Driver、Executor、Stage、TaskSet、DAGScheduler等介绍
  • docker的资源限制参数设置错误,导致的clickhouse性能瓶颈
  • Vue路由守卫有哪些,怎么设置,有哪些使用场景?
  • 云原生网关可观测性综合实践
  • vue-element-admin—登录页面添加自定义背景
  • 软设上午题-错题知识点一
  • 微信小程序(小程序入门)
  • 虹科分享 | 想买车无忧?AR为您带来全新体验!
  • easyUI重新渲染
  • html和css基础练习
  • Linux信号 signal()编程
  • 【LeetCode】16.最接近的三数之和
  • 嵌入式开发学习之STM32F407点亮LED及J-Link下载(二)
  • 智能呼叫中心系统的未来发展趋势:为企业开启全新服务模式
  • UE5中实现沿样条线创建网格体2-SplineMesh版本
  • 实现Element Select选择器滚动加载
  • C++ 之 Vector 和 List
  • 力扣-448.找到所有数组中消失的数字
  • 常用gdb调试命令
  • 【动手学深度学习-Pytorch版】BERT预测系列——用于预测的BERT数据集
  • 【数据结构-字符串 三】【栈的应用】字符串解码
  • Stm32_标准库_10_TIM_显示时间日期
  • 10-SRCNN-使用CNN实现超分辨成像
  • cmd/bat 输出符,控制台日志输出到文件
  • ODrive移植keil(七)—— 插值算法和偏置校准
  • 【肌电信号】OpenSignals使用方法 --- 肌电信号采集及导入matlab
  • STM32 多功能按键中断