Android音频处理之通过AudioRecord去保存PCM文件进行录制,播放,停止,删除功能

本文介绍了Android中使用AudioRecord进行音频录制、播放和删除的实现方法,包括设置PCM文件、开始录音、停止录音、播放音频以及删除音频文件的详细步骤。此外,还提到了AudioRecord和MediaRecorder的区别以及使用AudioTrack播放PCM文件的注意事项。
摘要由CSDN通过智能技术生成


投稿:mrr 字体:[增加 减小] 类型:转载 时间:2016-11-08 我要评论

这篇文章主要介绍了Android音频处理之通过AudioRecord去保存PCM文件进行录制,播放,停止,删除功能的相关资料,需要的朋友可以参考下 音频这方面很博大精深,我这里肯定讲不了什么高级的东西,最多也只是一些基础类知识,首先,我们要介绍一下Android他提供的录音类,实际上他有两个,一个是MediaRecorder,还有一个就是我们今天要用到的AudioRecord,那他们有什么区别呢?

一.区别

MediaRecorder和AudioRecord都可以录制音频,区别是MediaRecorder录制的音频文件是经过压缩后的,需要设置编码器。并且录制的音频文件可以用系统自带的Music播放器播放。

而AudioRecord录制的是PCM格式的音频文件,需要用AudioTrack来播放,AudioTrack更接近底层。

PCM可能更加可以理解为音频的源文件

二.优缺点

AudioRecord

主要是实现边录边播以及对音频的实时处理,这个特性让他更适合在语音方面有优势

优点:语音的实时处理,可以用代码实现各种音频的封装

缺点:输出是PCM格式文件,如果保存成音频文件,是不能够被播放器播放的,所以必须先写代码实现数据编码以及压缩

MediaRecorder

已经集成了录音、编码、压缩等,支持少量的录音音频格式,大概有,aac,amr,3gp等

优点:集成,直接调用相关接口即可,代码量小

缺点:无法实时处理音频;输出的音频格式不是很多,例如没有输出mp3格式文件

三.准备工作

我们要实现的是一个实时的去录音,播放,停止等功能的测试案例,那我们肯定要准备点什么,比如说,我这里先创建一个项目——PCMSample

然后写个布局

layout_main.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?xml version= "1.0" encoding= "utf-8" ?>
<LinearLayout
android:layout_width= "match_parent"
android:layout_height= "match_parent"
android:orientation= "vertical"
android:padding= "10dp" >
<Button
android:id= "@+id/startAudio"
android:layout_width= "match_parent"
android:layout_height= "wrap_content"
android:background= "@drawable/button_bg"
android:text= "开始录音"
android:textColor= "@android:color/white" />
<Button
android:id= "@+id/stopAudio"
android:layout_width= "match_parent"
android:layout_height= "wrap_content"
android:layout_marginBottom= "10dp"
android:layout_marginTop= "5dp"
android:background= "@drawable/button_bg"
android:enabled= "false"
android:text= "停止录音"
android:textColor= "@android:color/white" />
<Button
android:id= "@+id/playAudio"
android:layout_width= "match_parent"
android:layout_height= "wrap_content"
android:background= "@drawable/button_bg"
android:enabled= "false"
android:text= "播放音频"
android:textColor= "@android:color/white" />
<Button
android:id= "@+id/deleteAudio"
android:layout_width= "match_parent"
android:layout_height= "wrap_content"
android:layout_marginTop= "5dp"
android:background= "@drawable/button_bg"
android:text= "删除PCM"
android:textColor= "@android:color/white" />
<ScrollView
android:id= "@+id/mScrollView"
android:layout_width= "match_parent"
android:layout_height= "0dp"
android:layout_marginTop= "5dp"
android:layout_weight= "1" >
<TextView
android:id= "@+id/tv_audio_succeess"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:text= "初始化完成...."
android:textColor= "@color/colorAccent" />
</ScrollView>
</LinearLayout>

可以预览一下

这里写图片描述

这里我给按钮加了一个扁平的效果,实际上写了一个xml,很简单

button_bg.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version= "1.0" encoding= "utf-8" ?>
<selector xmlns:android= "http://schemas.android.com/apk/res/android" >
<item android:state_pressed= "true" >
<shape>
<corners android:radius= "30dp" />
<solid android:color= "@color/colorPrimary" />
</shape>
</item>
<item android:state_pressed= "false" >
<shape>
<corners android:radius= "30dp" />
<solid android:color= "@color/colorPrimaryDark" />
</shape>
</item>
</selector>

好的,回到正题,我们这里有四个按钮,分别是开始。停止,播放,和删除,我们就是要实现这四个功能,在此之前,我们还需要做的事情就是添加权限,因为我们要录音和写内存卡文件,所有需要这两个权限即可

?
1
2
3
4
<!--录音-->
<uses-permission android:name= "android.permission.RECORD_AUDIO" />
<!--读取SD卡-->
<uses-permission android:name= "android.permission.WRITE_EXTERNAL_STORAGE" />

这里初始化什么的就不说了,我们直接进入正题

四.开始录音

开始录音的话,这里,我们定义一个变量isRecording去控制,这样就比较好结束了,而且要注意的是,录音是不能放在UI线程的,你懂的,所以我们可以写一个开始录音的方法

?
1
2
3
4
5
6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值