Android MediaRecorder录音录像 暂停 继续录音 播放 ARM格式(音频一)

https://blog.csdn.net/WHB20081815/article/details/88778605

Android 录音机小米商业项目开源代码 AudioRecord录音暂停 播放 Wav格式(音频二)

https://blog.csdn.net/WHB20081815/article/details/88778623

Android 录音机小米商业项目开源代码 pcm转AAC硬编码 录音暂停 播放 (音频三)

https://blog.csdn.net/WHB20081815/article/details/88778634

Android 录音机商业项目开源代码 pcm转AAC软编码 录音暂停 播放 (音频四)

https://blog.csdn.net/WHB20081815/article/details/88778641

Android 高仿唱吧 咔拉ok 商业项目开源代码 K歌合成 伴奏录音合成MP3(音频五)

https://blog.csdn.net/WHB20081815/article/details/88778652

音频基础知识

声道数(通道数)

即声音的通道的数目。很好理解,有单声道和立体声之分,单声道的声音只能使用一个喇叭发声(有的也处理成两个喇叭输出同一个声道的声音),立体声的PCM可以使两个喇叭都发声(一般左右声道有分工) ,更能感受到空间效果。

采样位数

即 采样值或取样值(就是将采样样本幅度量化)。它是用来衡量声音波动变化的一个参数,也可以说是声卡的分辨率。它的数值越大,分辨率也就越高,所发出声音的能力越强。

在计算机中采样位数一般有8位和16位之分,但有一点请大家注意,8位不是说把纵坐标分成8份,而是分成2的8次方即256份; 同理16位是把纵坐标分成2的16次方65536份。

采样频率

即取样频率,指 每秒钟取得声音样本的次数。采样频率越高,声音的质量也就越好,声音的还原也就越真实,但同时它占的资源比较多。由于人耳的分辨率很有限,太高的频率并不能分辨出来。在16位声卡中有22KHz、44KHz等几级,其中,22KHz相当于普通FM广播的音质,44KHz已相当于CD音质了,目前的常用采样频率都不超过48KHz。

既然知道了以上三个概念,就可以由下边的公式得出PCM文件所占容量:

存储量= (采样频率 * 采样位数 * 声道 * 时间)/8 (单位:字节数)。

PCM 介绍

目前我们在计算机上进行音频播放都需要依赖于音频文件,音频文件的生成过程是将声音信息采样、量化和编码产生的数字信号的过程,人耳所能听到的声音,最低的频率是从20Hz起一直到最高频率20KHZ,因此音频文件格式的最大带宽是20KHZ。根据奈奎斯特的理论,只有采样频率高于声音信号最高频率的两倍时,才能把数字信号表示的声音还原成为原来的声音,所以音频文件的采样率一般在40~50KHZ,比如最常见的CD音质采样率44.1KHZ。

对声音进行采样、量化过程被称为脉冲编码调制(Pulse Code Modulation),简称PCM。PCM数据是最原始的音频数据完全无损,所以PCM数据虽然音质优秀但体积庞大,为了解决这个问题先后诞生了一系列的音频格式,这些音频格式运用不同的方法对音频数据进行压缩,其中有无损压缩(ALAC、APE、FLAC)和有损压缩(MP3、AAC、OGG、WMA)两种。

WAV

Waveform Audio File Format(WAVE,又或者是因为扩展名而被大众所知的WAV),是微软与IBM公司所开发在个人电脑存储音频流的编码格式,在Windows平台的应用软件受到广泛的支持,地位上类似于麦金塔电脑里的AIFF。 此格式属于资源交换档案格式(RIFF)的应用之一,通常会将采用脉冲编码调制的音频资存储在区块中。也是其音乐发烧友中常用的指定规格之一。由于此音频格式未经过压缩,所以在音质方面不会出现失真的情况,但档案的体积因而在众多音频格式中较为大。

所有的WAV都有一个文件头,这个文件头音频流的编码参数。WAV对音频流的编码没有硬性规定,除了PCM之外,还有几乎所有支持ACM规范的编码都可以为WAV的音频流进行编码。WAV也可以使用多种音频编码来压缩其音频流,不过我们常见的都是音频流被PCM编码处理的WAV,但这不表示WAV只能使用PCM编码,MP3编码同样也可以运用在WAV中,和AVI一样,只要安装好了相应的Decode,就可以欣赏这些WAV了。

在Windows平台下,基于PCM编码的WAV是被支持得最好的音频格式,所有音频软件都能完美支持,由于本身可以达到较高的音质的要求,因此,WAV也是音乐编辑创作的首选格式,适合保存音乐素材。因此,基于PCM编码的WAV被作为了一种中介的格式,常常使用在其他编码的相互转换之中,例如MP3转换成WMA。

wav文件格式

在文件的前44字节放置标头(header),使播放器或编辑器能够简单掌握文件的基本信息,其内容以区块(chunk)为最小单位,每一区块长度为4字节。

录音的原理:

开始录音的时候,一个 AudioRecord 需要初始化一个相关联的声音buffer,这个 buffer 主要是用来保存新的声音数据。这个 buffer 的大小,我们可以在对象构造期间去指定。它表明一个 AudioRecord 对象还没有被读取(同步)声音数据前能录多长的音(即一次可以录制的声音容量)。声音数据从音频硬件中被读出,数据大小不超过整个录音数据的大小(可以分多次读出),即每次读取初始化 buffer 容量的数据。

采集工作很简单,我们只需要构造一个AudioRecord对象,然后传入各种不同配置的参数即可。一般情况下录音实现的简单流程如下:

  1. 音频源:我们可以使用麦克风作为采集音频的数据源。

  2. 采样率:一秒钟对声音数据的采样次数,采样率越高,音质越好。

  3. 音频通道:单声道,双声道等,

  4. 音频格式:一般选用PCM格式,即原始的音频样本。

  5. 缓冲区大小:音频数据写入缓冲区的总数,可以通过AudioRecord.getMinBufferSize获取最小的缓冲区。(将音频采集到缓冲区中然后再从缓冲区中读取)。

image

摘自维基百科

起始位址 区块名称 区块大小 端序 区块内容 备注

0 区块编号 4 大 “RIFF”

4 总区块大小 4 小 = N+36 N:音频数据的总字节数;36:从下一个地址开始到头文件尾的总字节数

8 档案格式 4 大 “WAVE”

12 子区块1标识 4 大 “fmt ” (最后有一个空格)

16 子区块1大小 4 小 16

20 音频格式 2 小 1(PCM)

22 声道数量 2 小 1(单声道)2(立体声)

24 取样频率(采用频率) 4 小 取样点/秒(Hz)

28 位元(组)率 4 小 = 取样频率 * 位元深度 / 8 Byte率 = 采样频率 *音频通道数 *每次采样得到的样本位数 / 8

32 区块对齐 2 小 4

36 子区块2标识 4 大 “data”

40 子区块2大小 4 小 N(=位元(组)*秒数 *声道数量) 音频数据的大小

44 音频数据 =N 小 <音频数据从此开始>

端序,即字节顺序

---------------------

Android 中MediaRecorder和AudioRecord 与 MediaPlayer和 AudioTrack 的介绍

官方提供两种API用于音频开发,分别为 MediaRecorder和 AudioRecord 用与音频的采集, MediaPlayer和 AudioTrack 用于音频 的播放

image

小知识点:

1. 在用MediaRecorder进行录制音视频时,最终还是会创建AudioRecord用来与AudioFlinger进行交互。

2. MediaPlayer在framework层还是会创建AudioTrack,把解码后的PCM数流传递给AudioTrack,AudioTrack再传递给AudioFlinger进行混音,然后才传递给硬件播放。所以是MediaPlayer包含了AudioTRack。

使用AudioRecord录制pcm音频

PCM转WAV
只要加上wav头文件即可。

使用AudioTrack播放pcm音频
AudioTrack 类为java程序实现了控制和播放简单的音频。它允许将 PCM音频流传输到音频接收器进行播放。这是通过将音频数据推给 AudioTrack对象实现的,可以使用 write(byte[], int, int) , write(short[], int, int) 或 write(float[], int, int, int) 方法。

AudioTrack可以在两种模式下运行:static 或 streaming。
在Streaming模式下,应用程序使用其中一种write()方法将连续的数据流写入AudioTrack 。当数据从Java层传输到native层并排队等待播放时,它们会阻塞并返回。在播放音频数据块时,流模式非常有用,例如:

    由于声音播放的持续时间太长而不能装入内存,由于音频数据的特性(高采样率,每个样本的位数……)而不能装入内存在先前排队的音频正在播放时接收或生成。

在处理能够装入内存的短音时,应选择静态模式,并且需要尽可能以最小的延迟播放。因此,对于经常播放的UI和游戏声音而言,静态模式将是优选的,并且可能具有最小的开销。

一旦创建,AudioTrack对象将初始化其关联的音频缓冲区。在构建过程中指定的这个缓冲区的大小决定了AudioTrack在耗尽数据之前可以播放多长时间。

对于使用静态模式的AudioTrack,此大小是可以从中播放的最大声音大小。

对于流模式,数据将以小于或等于总缓冲区大小的块形式写入音频接收器。AudioTrack不是 final,因此允许使用子类,但不建议使用这种类型的子类。

录音代码的片段:

audioRecord.startRecording();
isRecording = true;new Thread(new Runnable() {@Override public void run() {FileOutputStream os = null;try {os = new FileOutputStream(file);} catch (FileNotFoundException e) {e.printStackTrace();}if (null != os) {while (isRecording) {int read = audioRecord.read(data, 0, minBufferSize);// 如果读取音频数据没有出现错误,就将数据写入到文件if (AudioRecord.ERROR_INVALID_OPERATION != read) {try {os.write(data);} catch (IOException e) {e.printStackTrace();}}}try {Log.i(TAG, "run: close file output stream !");os.close();} catch (IOException e) {e.printStackTrace();}}}
}).start();

来源: https://www.jianshu.com/p/a14787fc4b6b

demo地址:
https://github.com/Xiaoben336/AudioDemo.git

Android 录音机小米商业项目开源代码 AudioRecord录音暂停 播放 Wav格式(音频二)相关推荐

  1. Android 高仿唱吧 咔拉ok 商业项目开源代码 K歌合成 伴奏录音合成MP3(音频五)

    Android MediaRecorder录音录像 暂停 继续录音 播放 ARM格式(音频一) https://blog.csdn.net/WHB20081815/article/details/88 ...

  2. AudioRecord 录音和播放的Demo

    #AudioRecord 录音和播放的Demo 本文介绍一个AudioRecord的简单录音和播放的示例程序. 录音是需要动态获取权限的! ##主要代码 ###1.AudioRecord录音代码 // ...

  3. c#winform演练 ktv项目 MediaPlay控件的暂停播放与停止

    c#winform演练 ktv项目 MediaPlay控件的暂停播放与停止 用法 媒体控件.Ctlcontrols.操作名() 关于操作名: play,播放 stop,停止 pause,暂停 例子

  4. android app 的后台代码,包括后台的Android美食APP项目开源代码

    项目简介 小食光定位为一款集美食,社交,LBS服务于一体的美食推荐APP.为你发现周边美食的同时提供一个吃货分享的平台. APP截图 功能模块 美食推荐 :提供基础的美食信息查询: 商家推荐 : 基于 ...

  5. 商业项目中代码质量是否重要?

    这是一篇比较老的 文章,但是文中的这些问题在现在仍然普遍存在.代码质量的高低与商业产品的优劣是否有直接的影响?开发者Frank Sommers在文中给出了他的看法.文章内容如下. 在大多数商业项目中, ...

  6. android 手机管理软件 发布开源代码

    今天android 开源代码发布. 并在随后的博文里会对部分代码进行解析. 关于android manager 软件博文地址为:http://blog.csdn.net/acanoe/article/ ...

  7. Android12 Native C++ 层AudioRecord录音AudioTrack播放

    一.背景: 发现网上能搜到的都是几年前的例子,现在Android版本都出到12了,几年前的例子以及不适用新版本了.于是就自己研究了下AudioRecord.java是如何调用到jni和C++层的Aud ...

  8. Android开发笔记(五十七)录像录音与播放

    媒体录制MediaRecorder MediaRecorder是Android自带的录制工具,通过操纵摄像头和麦克风完成媒体录制,既可录制视频,也可单独录制音频.其中对摄像头Camera的介绍参见&l ...

  9. Android 手机录制wav格式音频文件实现

    上一篇文章已经实现了在Android手机上使用MediaRecorder录音,但是后期在处理这些音频文件的时候发现3gp格式的音频不大方便处理,使用wav格式的音频处理起来更方便一些! 这里需要用到A ...

最新文章

  1. JAVA的嵌入式脚本开发(中)
  2. ES6语法的学习与实践
  3. 解决vuex中store保存数据,刷新页面会清空得问题
  4. Linux常用命令(第二版) --权限管理命令
  5. vue实现点击高亮效果_vue结合Echarts实现点击高亮效果的示例
  6. 悦读上品 得乎益友
  7. Centos-Nginx-Docker 入门(一)
  8. 【Python】高级函数
  9. python装饰器详解
  10. springboot 配置 P6spy
  11. win7设置视力保护色
  12. Web 2.0概念地图-from Tim Oreilly
  13. 六十、基础框架(十八)辞典物件
  14. 如何判断您是否需要新的iPhone电池
  15. office2016安装记录
  16. 3.4 项目经理的胜任力
  17. 如何制作翻页的电子书?
  18. 高级转录组分析和R数据可视化
  19. 模电笔记4 场效应管(单极型晶体管) 结型场效应管 绝缘栅型场效应管
  20. 关于MySQL什么时候使用索引 什么情况下应不建或少建索引

热门文章

  1. CentOS 升级git
  2. 年终奖发放前离职的员工是否有权获得年终奖
  3. 乐视超级电视荣获IFA中国展最佳工业设计大奖
  4. 相互保如何升级为相互宝?
  5. 2016数学建模美赛总结反思
  6. 数据库系统概论 第二章 关系数据库
  7. 关于智能家居布线 这些你都知道吗
  8. 命令行与shell编程系列之什么是命令行
  9. mybatis拦截器开发-分表插件
  10. 推荐一些适合新手练手的C/C++项目