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

android音频录音,(一)MediaRecorder简介

1.MediaRecorder概述

Android 多媒体框架支持捕获和编码各种常见的音频和视频格式,简要介绍音频录音。

2.MediaRecorder

源码路径:
frameworks/base/media/java/android/media/MediaRecorder.java

源码接口:

setAudioSource(MediaRecorder.AudioSource.MIC) 用于设置音频源,如:MediaRecorder.AudioSource.MIC,此MIC一般为设备主MIC:
源码函数:
public native void setAudioSource(@Source int audioSource)throws IllegalStateException;

setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP)设置输出文件格式,如:MediaRecorder.OutputFormat.THREE_GPP,THREE_GPP表示录音保存文件为3gp:
源码函数:
public native void setOutputFormat(int output_format)throws IllegalStateException;

setOutputFile()设置输出文件名,如" sdcard/audiorecordtest.3gp":
源码函数:
public void setOutputFile(File file)
     {
          mPath = null;
          mFd = null;
          mFile = file;
     }

setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB)设置音频编码器,MediaRecorder.AudioEncoder.AMR_NB,AMR_NB为编码格式:
源码函数:
public native void setAudioEncoder(int audio_encoder)throws IllegalStateException;

prepare()各参数设置完成后,启动初始化:
源码函数:
public void prepare() throws IllegalStateException, IOException
{
  if (mPath != null) {
      RandomAccessFile file = new RandomAccessFile(mPath, "rw");
      try {
          _setOutputFile(file.getFD());
      } finally {
          file.close();
      }
  } else if (mFd != null) {
      _setOutputFile(mFd);
  } else if (mFile != null) {
      RandomAccessFile file = new RandomAccessFile(mFile, "rw");
      try {
          _setOutputFile(file.getFD());
      } finally {
          file.close();
      }
  } else {
      throw new IOException("No valid output file");
  }
  _prepare();
}

start() 执行录音启动:
源码函数:
public native void start() throws IllegalStateException;

stop()停止录音:
源码函数:
public native void stop() throws IllegalStateException;

3 权限申请:

使用录音功能,APK必须告知用户它将访问设备的音频输入。从 Android 6.0(API 级别 23)开始,APK录音运行时,必须请求用户批准。APK 需要请求如下权限。
<uses-permission android:name="android.permission.RECORD_AUDIO" />

以上,MediaRecorder录取模式简要说明,可以参照源码进行查看。

不同参数类型: https://mp.csdn.net/mp_blog/creation/editor/140903503

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

相关文章:

  • autoX.js
  • 日本软文发稿:日本主流发稿媒体有哪些?
  • 翰德恩赋能中国邮政信息科技产品创新系列培训
  • 分享一个基于SpringBoot的英语学习平台Java英语学习任务打卡系统(源码、调试、LW、开题、PPT)
  • Golang学习笔记
  • 详解【多线程与并发】之线程
  • Linux安全与高级应用(四)深入探索MySQL数据库:安装、管理与安全实践
  • 「iOS」自定义Modal转场——抽屉视图的实现
  • 【数据结构】顺序结构实现:特殊完全二叉树(堆)+堆排序
  • 【c++学习技术栈】
  • swift 自定义DatePacker
  • MySQL事务,锁,MVCC总结
  • 24/8/7 算法笔记 支持向量机回归问题天猫双十一
  • win7系统利用定时启动+脚本实现MySQL文件自动备份
  • 基于Java多线程处理数据
  • 日常知识点之遇到问题结构体按位构造协议时和期望不一致,研究记录一下
  • spring mvc 文件下载
  • Qt WebEngine基于WebEngineScript注入js脚本
  • 案例分享-国外UI设计界面赏析
  • 用PyTorch 从零开始构建 BitNet 1.58bit
  • 信创安全 | 新一代内网安全方案—零信任沙盒
  • Redis的回收策略(淘汰策略)
  • Electron-builder 打包
  • 笔试练习day3
  • 企业想要将大模型技术应用到企业管理中需具备什么条件?
  • go 事件机制(观察者设计模式)
  • RISC-V竞赛|第二届 RISC-V 软件移植及优化锦标赛报名正式开始!
  • 【VTK】ubuntu手动编译VTK9.3 Generating qmltypes file 失败
  • 学习java的日子 Day64 学生管理系统 web2.0 web版本
  • 【第14章】Spring Cloud之Gateway路由断言(IP黑名单)