Android MediaRecorder 手机 录音的几种方法Word文件下载.docx

上传人:b****2 文档编号:3096183 上传时间:2023-05-01 格式:DOCX 页数:73 大小:60.41KB
下载 相关 举报
Android MediaRecorder 手机 录音的几种方法Word文件下载.docx_第1页
第1页 / 共73页
Android MediaRecorder 手机 录音的几种方法Word文件下载.docx_第2页
第2页 / 共73页
Android MediaRecorder 手机 录音的几种方法Word文件下载.docx_第3页
第3页 / 共73页
Android MediaRecorder 手机 录音的几种方法Word文件下载.docx_第4页
第4页 / 共73页
Android MediaRecorder 手机 录音的几种方法Word文件下载.docx_第5页
第5页 / 共73页
Android MediaRecorder 手机 录音的几种方法Word文件下载.docx_第6页
第6页 / 共73页
Android MediaRecorder 手机 录音的几种方法Word文件下载.docx_第7页
第7页 / 共73页
Android MediaRecorder 手机 录音的几种方法Word文件下载.docx_第8页
第8页 / 共73页
Android MediaRecorder 手机 录音的几种方法Word文件下载.docx_第9页
第9页 / 共73页
Android MediaRecorder 手机 录音的几种方法Word文件下载.docx_第10页
第10页 / 共73页
Android MediaRecorder 手机 录音的几种方法Word文件下载.docx_第11页
第11页 / 共73页
Android MediaRecorder 手机 录音的几种方法Word文件下载.docx_第12页
第12页 / 共73页
Android MediaRecorder 手机 录音的几种方法Word文件下载.docx_第13页
第13页 / 共73页
Android MediaRecorder 手机 录音的几种方法Word文件下载.docx_第14页
第14页 / 共73页
Android MediaRecorder 手机 录音的几种方法Word文件下载.docx_第15页
第15页 / 共73页
Android MediaRecorder 手机 录音的几种方法Word文件下载.docx_第16页
第16页 / 共73页
Android MediaRecorder 手机 录音的几种方法Word文件下载.docx_第17页
第17页 / 共73页
Android MediaRecorder 手机 录音的几种方法Word文件下载.docx_第18页
第18页 / 共73页
Android MediaRecorder 手机 录音的几种方法Word文件下载.docx_第19页
第19页 / 共73页
Android MediaRecorder 手机 录音的几种方法Word文件下载.docx_第20页
第20页 / 共73页
亲,该文档总共73页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Android MediaRecorder 手机 录音的几种方法Word文件下载.docx

《Android MediaRecorder 手机 录音的几种方法Word文件下载.docx》由会员分享,可在线阅读,更多相关《Android MediaRecorder 手机 录音的几种方法Word文件下载.docx(73页珍藏版)》请在冰点文库上搜索。

Android MediaRecorder 手机 录音的几种方法Word文件下载.docx

*设置录音之后,保存音频文件的位置

mediaRecorder.setOutputFile("

file:

///sdcard/myvido/a.3pg"

);

*调用start开始录音之前,一定要调用prepare方法。

try{

mediaRecorder.prepare();

mediaRecorder.start();

catch(IllegalStateExceptione){

e.printStackTrace();

catch(IOExceptione){

/***

*此外,还有和MediaRecorder有关的几个参数与方法,我们一起来看一下:

*sampleRateInHz:

音频的采样频率,每秒钟能够采样的次数,采样率越高,音质越高。

*给出的实例是44100、22050、11025但不限于这几个参数。

例如要采集低质量的音频就可以使用4000、8000等低采样率

*

*channelConfig:

声道设置:

android支持双声道立体声和单声道。

MONO单声道,STEREO立体声

*recorder.stop();

停止录音

*recorder.reset();

重置录音,会重置到setAudioSource这一步

*recorder.release();

解除对录音资源的占用

}

android中AudioRecord采集音频的参数说明

在android中采集音频的api是android.media.AudioRecord类

其中构造器的几个参数就是标准的声音采集参数

以下是参数的含义解释

publicAudioRecord(intaudioSource,intsampleRateInHz,intchannelConfig,intaudioFormat,intbufferSizeInBytes)

Since:

APILevel3

Classconstructor.

Parameters

audioSource

therecordingsource.SeeMediaRecorder.AudioSourceforrecordingsourcedefinitions.

音频源:

指的是从哪里采集音频。

这里我们当然是从麦克风采集音频,所以此参数的值为MIC

sampleRateInHz

thesamplerateexpressedinHertz.Examplesofratesare(butnotlimitedto)44100,22050and11025.

采样率:

给出的实例是44100、22050、11025但不限于这几个参数。

例如要采集低质量的音频就可以使用4000、8000等低采样率。

channelConfig

describestheconfigurationoftheaudiochannels.SeeCHANNEL_IN_MONOandCHANNEL_IN_STEREO

audioFormat

theformatinwhichtheaudiodataisrepresented.SeeENCODING_PCM_16BITandENCODING_PCM_8BIT

编码制式和采样大小:

采集来的数据当然使用PCM编码(脉冲代码调制编码,即PCM编码。

PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。

)android支持的采样大小16bit或者8bit。

当然采样大小越大,那么信息量越多,音质也越高,现在主流的采样大小都是16bit,在低质量的语音传输的时候8bit足够了。

bufferSizeInBytes

thetotalsize(inbytes)ofthebufferwhereaudiodataiswrittentoduringtherecording.Newaudiodatacanbereadfromthisbufferinsmallerchunksthanthissize.SeegetMinBufferSize(int,int,int)todeterminetheminimumrequiredbuffersizeforthesuccessfulcreationofanAudioRecordinstance.UsingvaluessmallerthangetMinBufferSize()willresultinaninitializationfailure.

采集数据需要的缓冲区的大小,如果不知道最小需要的大小可以在getMinBufferSize()查看。

采集到的数据保存在一个byteBuffer中,可以使用流将其读出。

亦可保存成为文件的形式

Android使用AudioRecord录音相关和音频文件的封装

分类:

Android流媒体学习

在Android中录音可以用MediaRecord录音,操作比较简单。

但是不够专业,就是不能对音频进行处理。

如果要进行音频的实时的处理或者音频的一些封装

就可以用AudioRecord来进行录音了。

这里给出一段代码。

实现了AudioRecord的录音和WAV格式音频的封装。

用AudioTrack和AudioTrack类可以进行边录边播,可以参考:

我们这里的代码没有播放。

但是有封装和详解,如下:

[java]viewplaincopy

1packagecom.ppmeet;

2

3importjava.io.File;

4importjava.io.FileInputStream;

5importjava.io.FileNotFoundException;

6importjava.io.FileOutputStream;

7importjava.io.IOException;

8importandroid.app.Activity;

9importandroid.graphics.PixelFormat;

10importandroid.media.AudioFormat;

11importandroid.media.AudioRecord;

12importandroid.media.MediaRecorder;

13importandroid.os.Bundle;

14importandroid.view.View;

15importandroid.view.View.OnClickListener;

16importandroid.view.Window;

17importandroid.view.WindowManager;

18importandroid.widget.Button;

19

20/**

21*classname:

TestAudioRecord<

BR>

22*classdescription:

用AudioRecord来进行录音<

23*PS:

<

24*

25*@version1.002011/09/21

26*@authorCODYY)peijiangping

27*/

28publicclassTestAudioRecordextendsActivity{

29//音频获取源

30privateintaudioSource=MediaRecorder.AudioSource.MIC;

31//设置音频采样率,44100是目前的标准,但是某些设备仍然支持22050,16000,11025

32privatestaticintsampleRateInHz=44100;

33//设置音频的录制的声道CHANNEL_IN_STEREO为双声道,CHANNEL_CONFIGURATION_MONO为单声道

34privatestaticintchannelConfig=AudioFormat.CHANNEL_IN_STEREO;

35//音频数据格式:

PCM16位每个样本。

保证设备支持。

PCM8位每个样本。

不一定能得到设备支持。

36privatestaticintaudioFormat=AudioFormat.ENCODING_PCM_16BIT;

37//缓冲区字节大小

38privateintbufferSizeInBytes=0;

39privateButtonStart;

40privateButtonStop;

41privateAudioRecordaudioRecord;

42privatebooleanisRecord=false;

//设置正在录制的状态

43//AudioName裸音频数据文件

44privatestaticfinalStringAudioName="

/sdcard/love.raw"

;

45//NewAudioName可播放的音频文件

46privatestaticfinalStringNewAudioName="

/sdcard/new.wav"

47

48publicvoidonCreate(BundlesavedInstanceState){

49super.onCreate(savedInstanceState);

50getWindow().setFormat(PixelFormat.TRANSLUCENT);

//让界面横屏

51requestWindowFeature(Window.FEATURE_NO_TITLE);

//去掉界面标题

52getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

53WindowManager.LayoutParams.FLAG_FULLSCREEN);

54//重新设置界面大小

55setContentView(R.layout.main);

56init();

57}

58

59privatevoidinit(){

60Start=(Button)this.findViewById(R.id.start);

61Stop=(Button)this.findViewById(R.id.stop);

62Start.setOnClickListener(newTestAudioListener());

63Stop.setOnClickListener(newTestAudioListener());

64creatAudioRecord();

65}

66

67privatevoidcreatAudioRecord(){

68//获得缓冲区字节大小

69bufferSizeInBytes=AudioRecord.getMinBufferSize(sampleRateInHz,

70channelConfig,audioFormat);

71//创建AudioRecord对象

72audioRecord=newAudioRecord(audioSource,sampleRateInHz,

73channelConfig,audioFormat,bufferSizeInBytes);

74}

75

76classTestAudioListenerimplementsOnClickListener{

77

78@Override

79publicvoidonClick(Viewv){

80if(v==Start){

81startRecord();

82}

83if(v==Stop){

84stopRecord();

85}

86

87}

88

89}

90

91privatevoidstartRecord(){

92audioRecord.startRecording();

93//让录制状态为true

94isRecord=true;

95//开启音频文件写入线程

96newThread(newAudioRecordThread()).start();

97}

98

99privatevoidstopRecord(){

100close();

101}

102

103privatevoidclose(){

104if(audioRecord!

=null){

105System.out.println("

stopRecord"

106isRecord=false;

//停止文件写入

107audioRecord.stop();

108audioRecord.release();

//释放资源

109audioRecord=null;

110}

111}

112

113classAudioRecordThreadimplementsRunnable{

114@Override

115publicvoidrun(){

116writeDateTOFile();

//往文件中写入裸数据

117copyWaveFile(AudioName,NewAudioName);

//给裸数据加上头文件

118}

119}

120

121/**

122*这里将数据写入文件,但是并不能播放,因为AudioRecord获得的音频是原始的裸音频,

123*如果需要播放就必须加入一些格式或者编码的头信息。

但是这样的好处就是你可以对音频的裸数据进行处理,比如你要做一个爱说话的TOM

124*猫在这里就进行音频的处理,然后重新封装所以说这样得到的音频比较容易做一些音频的处理。

125*/

126privatevoidwriteDateTOFile(){

127//new一个byte数组用来存一些字节数据,大小为缓冲区大小

128byte[]audiodata=newbyte[bufferSizeInBytes];

129FileOutputStreamfos=null;

130intreadsize=0;

131try{

132Filefile=newFile(AudioName);

133if(file.exists()){

134file.delete();

135}

136fos=newFileOutputStream(file);

//建立一个可存取字节的文件

137}catch(Exceptione){

138e.printStackTrace();

139}

140while(isRecord==true){

141readsize=audioRecord.read(audiodata,0,bufferSizeInBytes);

142if(AudioRecord.ERROR_INVALID_OPERATION!

=readsize){

143try{

144fos.write(audiodata);

145}catch(IOExceptione){

146e.printStackTrace();

147}

148}

149}

150try{

151fos.close();

//关闭写入流

152}catch(IOExceptione){

153e.printStackTrace();

154}

155}

156

157//这里得到可播放的音频文件

158privatevoidcopyWaveFile(StringinFilename,StringoutFilename){

159FileInputStreamin=null;

160FileOutputStreamout=null;

161longtotalAudioLen=0;

162longtotalDataLen=totalAudioLen+36;

163longlongSampleRate=sampleRateInHz;

164intchannels=2;

165longbyteRate=16*sampleRateInHz*channels/8;

166byte[]data=newbyte[bufferSizeInBytes];

167try{

168in=newFileInputStream(inFilename);

169out=newFileOutputStream(outFilename);

170totalAudioLen=in.getChannel().size();

171totalDataLen=totalAudioLen+36;

172WriteWaveFileHeader(out,totalAudioLen,totalDataLen,

173longSampleRate,channels,byteRate);

174while(in.read(data)!

=-1){

175out.write(data);

176}

177in.close();

178out.close();

179}catch(FileNotFoundExceptione){

180e.printStackTrace();

181}catch(IOExceptione){

182e.printStackTrace();

183}

184}

185

186/**

187*这里提供一个头信息。

插入这些信息就可以得到可以播放的文件。

188*为我为啥插入这44个字节,这个还真没深入研究,不过你随便打开一个wav

189*音频的文件,可以发现前面的头文件可以说基本一样哦。

每种格式的文件都有

190*自己特有的头文件。

191*/

192privatevoidWriteWaveFileHeader(FileOutputStreamout,longtotalAudioLen,

193longtotalDataLen,longlongSampleRate,intchannels,longbyteRate)

194throwsIOException{

195byt

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2