赵工的个人空间


专业技术部分转网页计算转业余爱好部分


 手持终端

首页 > 专业技术 > 手持终端 > Android的多媒体功能
Android的多媒体功能

Android系统提供了丰富的多媒体表现形式,包括音乐播放、视频播放和录音等。Android系统提供了MediaPlayer类来完成多媒体播放、VideoView类来完成视频播放和MediaRecorder来来完成录音。Android对常用的多媒体格式提供了支持,如3GP、MP3、MP4和WAV等音视频格式。Android对多媒体操作进行了全面的封装,通过简单的代码可以完成常见的多媒体展示,同时还可以播放网络上的多媒体文件。

1.MediaPlayer类:多媒体播放

在Android系统中,MediaPlayer类包含了Audio和Video的播放功能,用于播放音频、视频以及网络上的流媒体。MediaPayer中提供了播放、暂停、停止和重复播放等常用的多媒体播放功能,并且能够设置播放本地多媒体文件,还是网络上的多媒体文件。
1)create方法:创建多媒体
该方法用于创建一个要播放的多媒体,可以通过指定源文件中的多媒体文件来实现,也可以通过指定Uri链接来播放互联网上的多媒体文件。这是一种创建MediaPlayer的静态方法。语法格式有几种:
public static MediaPlayer create(Context context,int resid)
public static MediaPlayer create(Context context,Uri uri)
其中,参数context为上下文,可以通过getApplicationContext()方法获取;参数resid为多媒体文件的资源Id;参数uri为多媒体文件的Uri地址。create方法仅是创建了一个MediaPlayer实例。
2)start方法:开始播放
该方法用于开始播放一个多媒体对象,这是播放多媒体文件的主要方法。如果在播放之前执行了pause方法暂停播放,则再次执行start方法时将从暂停点继续播放。语法格式:
public void start()
示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
MediaPlayer mp=MediaPlayer.create(getApplicationContext(),R.raw.m1);
mp.start();
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
String path="http://mp3.baidu.com/2017/m12345678.mp3";
Uri uri=Uri.parse(path);
MediaPlayer mp=MediaPlayer.create(getApplicationContext(),uri);
mp.start();
}
});
}
}
为了播放本地文件R.raw.m1,需要将m1.mp3文件放置到项目的/res/raw/目录下。互联网文件可替换为网上有效的网址。
3)stop方法:停止播放
该方法用于停止播放多媒体文件。使用该方法后,多媒体对象将停止播放。如果再次调用start方法,则从头开始播放。语法格式:
public void stop()
4)pause方法:暂停播放
该方法用于暂停播放多媒体文件。使用该方法后,多媒体对象将暂停播放。如果再次调用start方法,则从暂停的地方继续播放。语法格式:
public void pause()
5)reset方法:复位多媒体
该方法用于复位多媒体实例。执行该方法后,将使MediaPlayer对象变为未初始化的状态。多媒体复位后,必须重新设置数据源并执行prepare()方法,方可继续播放。该方法还可以使播放器从Error状态中恢复过来。语法格式:
public void reset()
6)setDataSource方法:设置数据源
该方法用于为一个MediaPlayer对象设置播放的数据源。使用该方法可以在程序中动态更改播放的音乐文件,经常用于音乐播放软件设计中。语法格式有几种:
public void serDataSource(FileDescriptor fd)
public void serDataSource(Stringf path)
public void serDataSource(Context context,Uri uri)
其中,参数fd为数据源文件的描述;path为数据源文件的路径,字符串形式;context为上下文,可以通过getApplicationContext()方法获取;uri为多媒体文件的Uri地址。
7)prepare方法:准备播放
该方法用于执行播放之前的准备工作,这是一种同步的调用方法。如果需要使用异步方式播放,可以使用prepareAsync方法。如果MediaPlayer实例是由create方法创建的,那么第一次启动播放前不需要再调用prepare方法了,因为create方法已经调用过了。语法格式:
public void prepare()
示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
Button btn3=(Button)findViewById(R.id.button3);
final MediaPlayer mp=new MediaPlayer();
final String path="/sdcard/m1.mp3";
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
try{
mp.reset();
mp.setDataSource(path);
mp.prepare();
}catch(IllegalArgumentException e){
e.printStackTrace();
}catch(IllegalStateException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
mp.start();
Toast.makeText(getApplicationContext(),"开始播放",
Toast.LENGTH_LONG).show();
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
mp.stop();
Toast.makeText(getApplicationContext(),"停止播放",
Toast.LENGTH_LONG).show();
}
});
btn3.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
mp.pause();
Toast.makeText(getApplicationContext(),"暂停播放",
Toast.LENGTH_LONG).show();
}
});
}
}
8)seekTo方法:指定播放位置
该方法用于指定播放的位置。在默认情况下,都是从0时刻开始播放的。使用该方法,可以指定从哪一时刻开始播放,以毫秒为单位。该方法主要用于用户手动选择播放位置的场合。语法格式:
public void seekTo(int msec)
其中,参数msec为指定的开始播放时间,以毫秒为单位。示例:
int seekpos=10000;
mp.seekTo(seekpos);
mp.start();
9)getDuration方法:获取文件播放时间
该方法用于获取多媒体文件的播放时长,也就是总的播放时间,以毫秒为单位。这是获取音乐文件播放时间的主要方法,常用于获取音乐文件信息的场合。语法格式:
public int getDuration()
示例:
int n=mp.getDuration();
10)setVolume方法:设置音量
该方法用于设置播放多媒体文件时的音量,可以分别设置左声道和右声道的音量大小。使用该方法设置的仅是当前播放对象的音量,而不是系统播放音量。语法格式:
public void setVolume(float leftVolume,float rightVolume)
其中,参数leftVolume为左声道的音量,取值范围0~1;rightVolume为右声道的音量,取值范围为0~1。示例:
btn4.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
leftVolume=leftVolume+0.1f;;
rightVolume=rightVolume+0.1f;
mp.setVolume(leftVolume,rightVolume);
Toast.makeText(getApplicationContext(),"当前音量为"+leftVolume,
Toast.LENGTH_LONG).show();
}
});
btn5.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
leftVolume=leftVolume-0.1f;;
rightVolume=rightVolume-0.1f;
mp.setVolume(leftVolume,rightVolume);
Toast.makeText(getApplicationContext(),"当前音量为"+leftVolume,
Toast.LENGTH_LONG).show();
}
});
11)setLooping方法:设置循环播放
该方法用于设置是否循环播放多媒体文件。当设置为true时表示循环播放,false表示仅播放一次。该方法是设置循环播放模式的主要方法。语法格式:
public void setLooping(boolean looping)
其中,参数looping表示是否循环播放,true表示循环播放,false表示仅仅播放一次。示例:
btn4.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
if(looping){
looping=false;
btn4.setText("当前为非循环播放");
}else{
looping=true;
btn4.setText("当前为循环播放"):
}
mp.setLooping(looping);
}
});
12)getCurrentPosition方法:获取当前播放位置
该方法用于获取MediaPlayer对象播放的位置,返回值以毫秒为单位。通过该方法并结合进度条,可以实现实时显示播放进度的功能。语法格式:
public int getCurrentPosition()
13)isLooping方法:获取是否循环播放
该方法用于获取MediaPlayer对象是否处于循环播放模式。如果返回值为true则表示处于循环播放模式,如果返回值为false则表示为单曲播放模式。语法格式:
public boolean isLooping()
14)isPlaying方法:获取是否播放
该方法用于获取MediaPlayer对象是否正在播放。如果返回值为true则表示正在播放,如果返回值为false则表示当前没有播放。语法格式:
public boolean isPlaying()
15)setOnCompletionListener方法:设置播放完成监听器
该方法用于设置播放完成监听器。当MediaPlayer对象播放完毕时,将触发该监听器。通过重载onCompletion方法就可以完成一系列用户功能。该方法常常用于播放列表功能的场合,当一个音乐文件完毕时,自动播放下一个音乐文件。语法格式:
public void setOnCompletionListener(MediaPlayer.OnCompletionListener listener)
其中,参数listener为监听器对象。示例:
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){
@Override
public void  onCompletion(MediaPlayer mp){
Toast.makeText(getApplicationContext(),"此曲播放结束",
Toast.LENGTH_LONG).show();
}
});
16)setOnSeekCompleteListener方法:设置寻址完成监听器
该方法用于设置寻址完成监听器。当MediaPlayer对象通过seekTo方法寻址完毕的时候,将触发该监听器。通过重载onSeekComplete方法就可以完成一系列用户功能。该方法常常用于像A-B复读这样的功能的场合。语法格式:
public void setOnSeekCompleteListener(MediaPlayer.OnSeekCompleteListener listener)
其中,参数listener为监听器对象。示例:
mp.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener(){
@Override
public void  onSeekComplete(MediaPlayer mp){
Toast.makeText(getApplicationContext(),"已寻址到指定播放位置",
Toast.LENGTH_LONG).show();
}
});
17)setOnPreparedListener方法:设置准备完毕监听器
该方法用于设置准备完毕监听器。当MediaPlayer对象通过prepare方法准备完毕时,将触发该监听器。通过重载onPrepared方法就可以完成一系列用户功能。语法格式:
public void setOnPreparedListener(MediaPlayer.OnPreparedListener listener)
其中,参数listener为监听器对象。
18)setOnErrorListener方法:设置错误监听器
该方法用于设置播放错误监听器。当MediaPlayer对象播放多媒体文件发生错误时,将触发该监听器。通过重载onError方法就可以完成一系列用户功能,主要是给出一些错误提示信息。语法格式:
public void setOnErrorListener(MediaPlayer.OnErrorListener listener)
其中,参数listener为监听器对象。
19)setOnBufferingUpdateListener方法:设置缓冲监听器
该方法用于设置网络流媒体的缓冲监听器。当MediaPlayer对象播放网络上的多媒体文件并发生缓冲时,将触发该监听器。通过重载onBufferingUpdate方法就可以完成一系列用户功能,这样当缓冲播放的时候可以给使用者提示信息等。语法格式:
public void setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener)
其中,参数listener为监听器对象。
20)release方法:释放多媒体
该方法用于释放MediaPlayer多媒体对象。当一个MediaPlayer对象播放完毕不再使用时,需要调用该方法来释放其占用的系统资源。语法格式:
public void release()

2.VideoView类:视频播放

在Android系统中,VideoView类用于VideoView控件的显示和控制。VideoView控件可以用于视频播放的显示控制,提供了视频播放的开始、暂停等功能。通过VideoView类可以播放本地的视频文件,也可以用来播放网络上的视频文件。
Android系统支持MP4的H.264、3GP和WMV视频的解析,由于模拟器性能的限制,在模拟器上能正常播放的视频分辨率和码率都比较低。为了达到比较好的效果,能够在Android手机上进行调试会更方便。
1)setMediaController方法:设置播放控制器
该方法由于设置VideoView的播放控制器模式(播放进度条)。这是使用VideoView播放视频前必须调用的方法,一般不单独使用。语法格式:
public void setMediaController(MediaController controller)
其中,参数controller为MediaController对象。
2)setVideoPath方法:设置视频源路径
该方法由于设置VideoView的播放视频源路径,也就是指定播放文件。这是使用VideoView播放视频前必须调用的方法。语法格式:
public void setVideoPath(String path)
其中,path为视频文件的路径信息。
3)start方法:开始播放
该方法用于开始播放一个视频对象,这是播放视频文件的主要方法。如果在播放前执行了pause方法暂停播放,则再次执行start方法时将从暂停点继续播放。语法格式:
public void start()
示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1=(Button)findViewById(R.id.button1);
final VideoView video=(VideoView)findViewById(R.id.videoView1);
MediaController mediaController=new MediaController(this);
mediaController.setAnchorView(video);
video.setMediaController(mediaController);
video.setVideoPath("/sdcard/test.mp4");
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
video.start();
}
});
}
}
为了能正常播放本地SD卡中的视频文件,首先要将视频文件放到SD卡的根目录中。
4)pause方法:暂停播放
该方法用于暂停播放视频文件。使用该方法后,视频对象将暂停播放,如果再次调用start方法,则将从暂停的地方继续播放。语法格式:
public void pause()
示例:
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
video.pause();
}
});
5)setVideoURI方法:设置视频源地址
该方法用于设置VideoView的播放视频源地址,也就是指定播放文件。这里的源地址可以是本地文件,也可以是网络上的视频文件地址。该方法与setVideoPath方法类似,是使用VideoView播放视频前经常调用的方法。语法格式:
public void setVideoURI(Uri uri)
其中,uri为视频文件的地址信息,可以是本地视频文件的地址,也可以是网络上的视频地址。示例:
Uri uri=Uri.parse("/sdcard/test.mp4");
video.serVideoURI(uri);
6)setVisibility方法:设置是否可见
该方法用于设置VideoView的播放视频源地址,也就是指定播放文件。这里的源地址可以是本地文件,也可以是网络上的视频文件地址。该方法与setVideoPath方法类似,是使用VideoView播放视频前经常调用的方法。语法格式:
public void setVisibility(int visibility)
其中,visibility为VideoView对象是否可见,可以取如下几种值:
·VISIBLE:可见状态
·INVISIBLE:不可见状态
·GONE:不可见状态,并且控件从布局中消失
示例:
btn3.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
video.setVisibility(VideoView.GONE);
}
});
7)getDuration方法:获取视频播放时间
该方法用于获取视频文件的播放时长,也就是总的播放时间,以毫秒为单位。这是获取视频文件播放时间的主要方法。语法格式:
public int getDuration()
示例:
int duration=video.getDuration();
8)setOnCompletionListener方法:视频播放完成监听器
该方法用于设置视频播放完成监听器。当视频对象播放完毕时,将触发该监听器。通过重载onCompletion方法就可以完成一系列用户功能。该方法常用于播放列表功能的场合,当一个视频文件播放完毕时,自动播放下一个视频文件。语法格式:
public void setOnCompletionListener(MediaPlayer.OnCompletionListener listener)
其中,参数listener为监听器对象。示例:
video.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){
@Override
public void  onCompletion(MediaPlayer mp){
Toast.makeText(getApplicationContext(),"视频播放结束!",
Toast.LENGTH_LONG).show();
}
});
9)setOnPreparedListener方法:视频准备完毕监听器
该方法用于设置视频准备完毕监听器。当视频对象加载完毕并且可以播放时,将触发该监听器。通过重载onPrepared方法就可以完成一系列用户功能。语法格式:
public void setOnPreparedListener(MediaPlayer.OnPreparedListener listener)
其中,参数listener为监听器对象。
10)setOnErrorListener方法:视频播放错误监听器
该方法用于设置视频播放错误监听器。当视频对象播放视频文件发生错误时,将触发该监听器。通过重载onError方法就可以完成一系列用户功能,常用于给出一些错误提示信息。语法格式:
public void setOnErrorListener(MediaPlayer.OnErrorListener listener)
其中,参数listener为监听器对象。
11)seekTo方法:指定视频播放位置
该方法用于指定视频播放的位置。默认情况下,都是从0时刻开始播放视频的。使用该方法,可以指定从哪个时刻开始播放,以毫秒为单位,主要用于手动选择视频播放位置的场合。语法格式:
public void seekTo(int msec)
其中,参数msec为指定的视频开始播放时间,以毫秒为单位。示例:
btn3.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
int seekpos=20000;
video.seekTo(seekpos);
video.start();
Toast.makeText(getApplicationContext(),"从"+seekpos+"毫秒开始播放",
Toast.LENGTH_LONG).show();
}
});
12)getCurrentPosition方法:获取当前视频播放位置
该方法用于获取VideoView对象播放的当前位置,返回值以毫秒为单位。通过该方法并结合进度条,可以实现实时显示视频播放进度功能。语法格式:
public int getCurrentPosition()
示例:
int pos=video.getCurrentPosition();
13)getBufferPercentage方法:获取缓冲百分比
该方法用于获取VideoView对象播放视频时的缓冲百分比,经常用于播放网络上的视频文件的场合。如果网速比较慢,则可以使用该方法获取缓冲的大小。语法格式:
public int getBufferPercentage()
14)stopPlayback方法:停止回放视频
该方法用于停止回放视频的操作。语法格式:
public void stopPlayback()
15)isPlaying方法:获取是否播放
该方法用于获取VideoView对象是否正在播放视频。如果返回值为true则表示正在播放,如果返回值为false则表示当前没有播放。语法格式:
public boolean isPlaying()
16)canPause方法:获取是否可以暂停
该方法用于获取VideoView对象能否暂停播放视频。如果返回值为true则表示可以暂停播放视频,如果返回值为false则表示不能暂停播放视频。语法格式:
public boolean canPause()
17)canSeekBackward方法:获取是否可以倒退
该方法用于获取VideoView对象能否倒退视频。如果返回值为true则表示可以倒退视频,如果返回值为false则表示不能倒退视频。语法格式:
public boolean canSeekBackward()
18)canSeekForward方法:获取是否可以快进
该方法用于获取VideoView对象能否快进视频。如果返回值为true则表示可以快进视频,如果返回值为false则表示不能快进视频。语法格式:
public boolean canSeekForward()
19)suspend方法:挂起视频播放
该方法用于挂起VideoView对象的视频播放。视频播放被挂起后,将停止播放。该方法经常与resume方法一起使用,用于在播放视频时处理其他重要事件的场合,如播放视频时突然有电话打来。语法格式:
public void suspend()
20)resume方法:恢复视频播放
该方法用于恢复被挂起的VideoView对象的视频播放,恢复之后将从挂起点进行播放。该方法常与suspend方法一起使用,用于在播放视频时处理其他重要事件的场合,如突然有电话打来,此时将调用suspend方法来挂起视频,电话结束后调用resume方法恢复视频播放。语法格式:
public void resume()
示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
Button btn3=(Button)findViewById(R.id.button3);
Button btn4=(Button)findViewById(R.id.button4);
final VideoView video=(VideoView)findViewById(R.id.videoView1);
MediaController mediaController=new MediaController(this);
mediaController.setAnchorView(video);
video.setMediaController(mediaController);
Uri uri=Uri.parse("/sdcard/test.mp4");
video.setVideoURI(uri);
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
video.start();
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
video.pause();
}
});
btn3.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
video.suspend();
Toast.makeText(getApplicationContext(),"当前视频播放被挂起!",
Toast.LENGTH_LONG).show();
}
});
btn4.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
video.resume();
Toast.makeText(getApplicationContext(),"当前视频播放恢复!",
Toast.LENGTH_LONG).show();
}
});
}
}

3.MediaRecorder类:录音

在Android系统中,MediaRecorder类用于进行媒体采样,可以完成音频和视频的采集,提供了录音、停止等基本功能。录音机就是一个典型的使用MediaRecorder类的例子,可以设置音频源、编码格式、输出格式、编码比特率和采样比特率。
Android模拟器默认情况下不能录音,如果需要在模拟器上进行调试,需要对其进行设置,以便通过计算机的麦克风来进行录音。打开Android SDK and AVD Manager对话框,在Virtual devices中选中需要设置的模拟器,单击Edit按钮,打开Edit Android Virtual Device(AVD)对话框,在Hardware区域单击New按钮,在打开的对话框中选择Audio recording support,单击确定按钮,返回Edit Android Virtual Device(AVD)对话框,这时Android模拟器已经添加了录音支持。
录音设备需要用到Android系统的录音权限和SD卡的写入操作,需要在AndroidManifest.xml中加入权限:
<uses-permission android:name="android.peimission.RECORD_AUDIO" />
<uses-permission android:name="android.peimission.WRITE_EXTERNAL_STORAGE" />
1)setAudioSource方法:设置音频源
该方法用于设置录音设备的音频源,也就是需要录制音频的对象。Android支持多种音频源,例如麦克风、电话、VoIP等。在进行音频录制时,该方法必须被调用进行设置。语法格式:
public void setAudioSource(int audio_source)
其中,参数audio_source为Android系统支持的录音音频源,可以有如下几种:
·CAMCORDER:如果照相机可用,则使用与相机同方向的麦克风音频源,否则主要设备是麦克风
·DEFAULT:默认设备。这与Android内核有关,一般是麦克风音频源。
·MIC:麦克风音频源。
·VOICE_CALL:语音呼叫上行和下行音源。
·VOICE_COMMUNICATION:经过调整的麦克风音源,如VoIP语音通信。
·VOICE_DOWNLINK:语音呼叫下行(接收)的音频源。
·VOICE_RECOGNITION:经过音源识别调整的麦克风音源,否则行为类似于FEFAULT
·VOICE_UPLINK:语音通话上行(发送)音频信号源。
setAudioSource方法往往需要与其他几个方法结合才能构成录音的基本功能。
2)setOutputFormat方法:设置输出文件格式
该方法用于设置录音设备的输出文件格式,也就是采用什么类型的音频文件。Android系统支持多种音频文件输出格式,如AMR、MPEG4、3GPP等。在进行音频录制时,该方法必须被调用进行设置,且必须在prepare方法之前,而在setAudioSource方法或setVideoSource方法之后,否则将抛出IllegalStateException错误。语法格式:
public void setOutputFormat(int output_format)
其中,参数output_format为Android系统支持的输出文件格式,可以有如下几种:
·AMR_NB:AMR NB文件格式
·AMR_WB:AMR WB文件格式
·DEFAULT:默认输出格式,与Android内核有关
·MPEG_4:MPEG4媒体文件格式
·RAW_AMR:AMR NB文件格式
·THREE_GPP:3GPP的媒体文件格式
setOutputFormat方法往往需要与其他几个方法结合才能构成录音的基本功能。
3)setAudioEncoder方法:设置音频编码
该方法用于设置录音设备的音频编码方式,也就是录制什么类型的音频文件。Android系统支持多种音频编码方式,如ACC、窄带AMR、宽带AMR等。在进行音频录制时,该方法必须被调用进行设置,但必须在prepare方法之前,而在setOutputFormat方法之后,否则将抛出IllegalStateException错误。语法格式:
public void setAudioEncode(int audio_encoder)
其中,参数audio_encoder为Android系统支持的音频编码方式,可以有如下几种:
·AAC:AAC音频编解码器
·AMR_NB:AMR窄带音频编解码器
·AMR_WB:AMR宽带音频编解码器
·DEFAULT:默认音频编码,这与Android内核有关
setAudioEncoder方法往往需要与其他几个方法结合才能构成录音的基本功能。
4)setOutputFile方法:设置输出文件
该方法用于设置录音设备的输出文件,也就是录制保存的文件名称和路径。在进行音频录制的时候,该方法必须被调用进行设置,但必须在prepare方法之前,而在setOutputFormat方法之后,否则将抛出IllegalStateException错误。语法格式有几种:
public void setOutputFile(String path)
public void setOutputFile(FileDescriptor fd)
其中,参数path为字符串形式的输出文件路径;fd为FileDescriptor形式的输出文件。
setOutputFile方法往往需要与其他几个方法结合才能构成录音的基本功能。
5)prepare方法:准备录制
该方法用于执行录制之前的准备工作。在进行录制时,该方法必须被调用进行设置,且必须在start之前,setOutputFormat方法之后,否则将抛出IllegalStateException错误。如果该方法调用失败,则抛出IOException错误。语法格式:
public void prepare()
prepare方法往往需要与其他几个方法结合才能构成录音的基本功能。
6)start方法:开始录制
该方法用于开始执行音频录制,并将捕获的数据编码到指定的文件中。start必须在prepare方法之后调用,否则将抛出IllegalStateException错误。语法格式:
public void start()
start方法往往需要与其他几个方法结合才能构成录音的基本功能。
7)stop方法:停止录音
该方法用于停止音频录音,在调用start方法和stop方法之间是全部录音时间。stop方法必须在start方法之后调用,否则将抛出IllegalStateException错误。语法格式:
public void stop()
有了前面的几个方法,就可以完成最基本的音频录制功能,示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
final MediaRecorder recorder=new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile("/sdcard/r1.amr");
try{
recorder.prepare();
}catch(IllegalStateException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
recorder.start();
Toast.makeText(getApplicationContext(),"正在录音!",
Toast.LENGTH_LONG).show();
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
recorder.stop();
Toast.makeText(getApplicationContext(),"录音已结束!",
Toast.LENGTH_LONG).show();
}
});
}
}
8)release方法:释放录音
该方法用于释放MediaRecorder对象及其所占用的资源。一般来说,在不需要使用MediaRecorder对象的时候,往往需要调用release方法来释放其占用的系统资源。语法格式:
public void release()
示例:简单录音机
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
recorder=new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile("/sdcard/r1.amr");
try{
recorder.prepare();
}catch(IllegalStateException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
recorder.start();
Toast.makeText(getApplicationContext(),"正在录音!",
Toast.LENGTH_LONG).show();
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
recorder.stop();
recorder.release();
Toast.makeText(getApplicationContext(),"录音已结束!",
Toast.LENGTH_LONG).show();
}
});
}
}
9)reset方法:复位对象
该方法用于复位MediaRecorder对象,使其恢复到空闲状态。调用reset方法之后,用户还可以继续使用MediaRecorder对象,但必须对其重新进行设置,包括音频源、输出文件格式、音频编码和输出文件等。语法格式:
public void reset()
10)setMaxFileSize方法:设置文件的最大大小
该方法设置MediaRecorder对象录音文件的最大大小,以字节为单位。当达到预设的文件大小时,将触发setOnInfoListener监听器,停止录音过程,并传递MEDIA_RECORDER_INFO
_MAX_FILESIZE_REACHED参数。该方法必须在setOutFormat方法之后和prepare方法之前调用。语法格式:
public void setMaxFileSize(long max_filesize_bytes)
其中,参数max_filesize_bytes为录音文件的最大大小,单位为字节byte。示例:
recorder.setMaxFileSize(2048);
11)setMaxDuration方法:设置最大录制时间
该方法用于设置MediaRecorder对象录音的最大时间,以毫秒为单位。当达到预设的录音时间时,将触发setOnInfoListener监听器,停止录音过程,并传递MEDIA_RECORDER_INFO _MAX_DURATION_REACHED参数。该方法必须在setOutFormat方法之后和prepare方法之前调用。语法格式:
public void setMaxDuration(long max_duration_ms)
其中,参数max_duration_ms为录音的最长时间,单位为字节ms。示例:
recorder.setMaxDuration(10000);
12)setOnInfoListener方法:设置信息监听器
该方法用于设置MediaRecorder对象信息监听器,使用时需要重载其中的onInfo方法。当MediaRecorder对象在录制过程中达到某些条件时,将触发该监听器,例如达到预设的文件大小、达到预设的录制时间等。语法格式:
public void setOnInfoListener(MediaRecorder.OnInfoListener listener)
其中,参数listener为监听器对象。
recorder.setOnInfoListenter(new MediaRecorder.OnInfoListener(){
@Override
public void onInfo(MediaRecorder mr,int what,int extra){
if(what==MediaRecorder.MEDIA_RECORDER_INFO_MAX_
FILESIZE_REACHED){
Toast.makeText(getApplicationContext(),"已达到预设文件大小,
录音已结束!",Toast.LENGTH_LONG).show();
}
});
13)setOnErrorListener方法:设置错误监听器
该方法用于设置MediaRecorder对象的错误监听器,使用时需要重载其中的onError方法。当在录制中方式错误时,将触发监听器,用户可以在这里进行错误信息的显示和处理。语法格式:
public void setOnErrorListener(MediaRecorder.OnErrorListener listener)
其中,参数listener为监听器对象。
14)setAudioChannels方法:设置声道数量
该方法用于设置录制的声道数量,一般来说,声道数量可以为1或2.该方法必须在prepare方法之前调用,因为prepare方法将会对所设置的声道数进行检查,以确保能用。语法格式:
public void setAudioChannels(int numChannels)
其中,参数numChannels为声道数量。
15)setAudioEncodingBitRate方法:设置编码比特率
该方法用于设置录音编码比特率,必须在prepare方法之前调用,因为prepare方法将会对所设置的编码比特率进行检查,以确保能用。语法格式:
public void setAudioEncodingBitRate(int bitRate)
其中,参数bitRate为编码比特率。
16)setAudioSamplingRate方法:设置采样比特率
该方法用于设置录音采样比特率,必须在prepare方法之前调用,因为prepare方法将会对所设置的采样比特率进行检查,以确保能用。采样比特率往往与编码格式有关,如AAC格式的采样比特率可以为8~96kHz,AMR NB格式的采样比特率为8kHz,AMR WB格式的采样比特率为16kHz。语法格式:
public void setAudioSamplingRate(int samplingRate)
其中,参数samplingRate为采样比特率。

Copyright@dwenzhao.cn All Rights Reserved   备案号:粤ICP备15026949号
联系邮箱:dwenzhao@163.com  QQ:1608288659