Android平台对一些常见的媒体格式内置了编解码器。并且应用可以非常简单地访问平台的多媒体功能――you do so using the same intents and activities mechanism that the rest of Android uses.

Android可以让你播放多种音频和视频类型的数据源。你可以播放存放在应用程序raw资源中的多媒体文件,或是放在文件系统中的多媒体文件,或是从网络上读取的数据流。使用MediaPlayer类来播放音频和视频媒体。

在被硬件支持的情况下,Android也可以让你录制音频和视频。录制需要使用MediaRecorder类。注意在模拟器上无法录制。

对于Android提供内置支持的媒体格式,请参阅Android的媒体格式附录。


1. 播放音频和视频

多媒体数据可以从任何地方被播放:播放raw资源中的多媒体资源,也可以播放文件系统中的多媒体文件,还可以通过指定URL播放存放在网络中的多媒体数据。

您可以只向标准输出设备播放音频数据;目前;目前是指移动设备扬声器或蓝牙耳机。你不能在通话中播放音频声音文件。You cannot play sound files in the conversation audio.

1.1 播放raw资源中的多媒体文件

最常见的情况可能是在你自己的应用中播放媒体文件(特别是音频),这样做非常容易:

1.1.1 将多媒体资源文件放到项目的res/raw目录中,然后eclipse plugin(或aapt)会自动在R类中生成一个代表这个媒体资源文件的索引值。

1.1.2 将代表那个媒体资源文件的索引值传入MediaPlayer.create(Context context, int resid)方法中,得到一个MediaPlayer的实例,然后调用这个MediaPlayer实例的start()方法:

MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1); mp.start();

调用MediaPlayer.stop()方法来停止播放。若你希望隔一会载重新播放那个多媒体资源,那么你必须保证在调用MediaPlayer.start()方法之前,调用MediaPlayer.reset()方法和MediaPlayer.Prepare()方法。(MediaPlayer.create()方法内部会调用MediaPlayer.Prepare()方法)。

要暂停播放,调用MediaPlayer.pause()方法,再次调用MediaPlayer.start()方法会从暂停的位置恢复播放。


1.2 播放文件或者流

你也可以播放文件系统中的媒体文件或是一个网络URL代表的媒体流:

1.2.1 利用new操作符创建一个MediaPlayer的实例。

1.2.2 调用MediaPlayer.setDataSource()方法,并传入媒体文件的路径(本地文件系统或者是网络URL)。

1.2.3 调用MediaPlayer.prepare(),然后调用MediaPlayer.start()方法开始播放:

MediaPlayer mp = new MediaPlayer(); mp.setDataSource(PATH_TO_FILE); // OR web URL mp.prepare(); mp.start();

MediaPlayer.stop()和MediaPlayer.pause()方法的功能同前。

注:mp可能为null,所以需要在new操作符后检查mp是否为null。并且在调用MediaPlayer.setDataSource()方法的时候,可能会因为指定的文件不存在而抛出IllegalArgumentException和IOException异常。

注:如果调用MediaPlayer.setDataSource()方法指定一个网络URL,那么由这个网络URL表示的媒体文件必须支持分段下载。


1.3 播放JET内容

Android平台包含了一个JET引擎,这个引擎可以让你在应用中添加JET音频内容的交互式播放。你可以使用附带在SDK中的JetCreator创作程序来创建用于交互播放的JET内容。在程序中播放和管理JET内容需要使用JetPlayer类。

关于JET的概念和使用JetCreator工具的教程,可以查看JetCreator的用户手册。在OS X和Windows系统中此工具的所有功能都是可用的。在Linux中,支持此工具所有的创建功能,但是不支持对导入的资源进行试听。

下边是针对一个存放在SD卡上的.jet文件建立JET播放的示例代码:

JetPlayer myJet = JetPlayer.getJetPlayer(); myJet.loadJetFile("/sdcard/level1.jet"); byte segmentId = 0; // queue segment 5, repeat once, use General MIDI, transpose by -1 octave myJet.queueJetSegment(5, -1, 1, -1, 0, segmentId++); // queue segment 2 myJet.queueJetSegment(2, -1, 0, 0, 0, segmentId++); myJet.play();

该SDK包括一个示例应用程序――JetBoy――这个示例显示了如何在游戏中使用JetPlayer创建交互式的游戏配乐音乐。它还说明了如何使用Jet事件来同步音乐和游戏逻辑。该应用程序位于 <sdk>/ platforms/android-1.5/samples/JetBoy.


2. 音频采集

在设备上进行音频采集比音频/视频的播放要稍微复杂一点,但仍然相当简单:

1)使用new操作符创建一个android.media.MediaRecorder新实例

2)创建一个android.content.ContentValues实例,并且向里面装入标准属性,比如TITLE(标题),TIMESTAMP(时间戳),以及所有重要的MIME_TYPE.

3)创建一个录制文件将要保存的路径(你可以使用android.content.ContentResolver在数据库中创建一个条目,and get it to assign a path automatically which you can then use)

4)调用MediaRecorder.setAudioSource()方法来指定音频源。你可能想使用MediaRecorder.AudioSource.MIC.

5)使用MediaRecorder.setOutputFormat()方法设定输出文件的格式。

6)使用MediaRecorder.setAudioEncoder()方法设置音频编码器。

7)调用MediaRecorder.prepare()方法。

8)调用MediaRecorder.start()方法开始进行音频采集。

9)调用MediaRecorder.stop()方法停止音频采集。

10)当不使用这个MediaRecorder实例的时候,调用MediaRecorder.release()方法。


2.1 示例代码:音频采集

recorder = new MediaRecorder(); ContentValues values = new ContentValues(3); values.put(MediaStore.MediaColumns.TITLE, SOME_NAME_HERE); values.put(MediaStore.MediaColumns.TIMESTAMP, System.currentTimeMillis()); values.put(MediaStore.MediaColumns.MIME_TYPE, recorder.getMimeContentType()); ContentResolver contentResolver = new ContentResolver(); Uri base = MediaStore.Audio.INTERNAL_CONTENT_URI; Uri newUri = contentResolver.insert(base, values); if (newUri == null) { // need to handle exception here - we were not able to create a new // content entry } String path = contentResolver.getDataFilePath(newUri); // could use setPreviewDisplay() to display a preview to suitable View here recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); recorder.setOutputFile(path); recorder.prepare(); recorder.start();

2.2 停止录制

基于上边的音频采集的示例代码,以下代码是示例如何停止音频采集:

recorder.stop(); recorder.release();

更多相关文章

  1. Android(安卓)init.rc文件简单介绍
  2. Android夜间模式实现
  3. android缩放动画的两种实现方法
  4. Android(安卓)Studio JNI开发
  5. Android中的消息机制-源码分析
  6. Android开发——AsyncTask详解
  7. Qt平台下OpenCV for Android库的顺序
  8. 剖析andriod联系人
  9. [置顶] Android点击Button实现功能的几种方法

随机推荐

  1. Android中tools属性的使用
  2. Android 开发者该学点Linux 命令了
  3. Android startActivityForResult request
  4. android Gallery3D效果
  5. android中定制的dialog
  6. Android(安卓)Interface Definition Lang
  7. java中org.xml.sax不能读取xml回车换行的
  8. android之MultiAutoCompleteTextView
  9. Android——Hardware Acceleration
  10. Android LocalSocket / LocalServerSocke