0
点赞
收藏
分享

微信扫一扫

Pro Android学习笔记(一二九):Media Frameworks(4):JetPlayer、AsyncPlayer和AudioTrack

JetPlayer

SoundPool有内存使用的限制,对于同时播放声音,还可以使用JetPlayer。JetPlayer针对游戏进行裁剪,是一个灵活的根据用户行为播放多种声音的工具,使用了MIDI(Musical Instrument Digital Interface)。在wiki中这样描述:Android平台有一个JET引擎,允许您添加交互播放的JET音频内容到你的应用程序。

Android SDK提供了JETCreator的工具,在tools/Jet/下,需要安装Python才能使用,具体的使用方式参见sdk/docs/guide/topics/media/jet/jetcreator_manual.html。而代码例子可参见http://wiki.eoeandroid.com/JetPlayer。

AsyncPlayer

AsyncPlayer顾名思义,是在后台线程中来处理音频的播放。由于异步,因此不知道确切的音频播放的开始和结束,下面是一个小例子。

public class AsyncPlayerDemo extends Activity{ 
     private AsyncPlayer asyncPlayer = null; 
     private String tag = "wei"; 
     
     @Override 
     protected void onResume() {  
         super.onResume(); 
         asyncPlayer = new AsyncPlayer(tag); 
        // 第二个参数是uri,AsyncPlayer可以播放本地的和网络的音频流。,第三个参数是isLooped。AsyncPlayer可以调用多次play(),当调用时,如果之前的音频还没有播放完,就马上停止播放旧的音频,并开始load新的音频,然后播放。
         asyncPlayer.play(this, Uri.parse("file://" + Environment.getExternalStorageDirectory() + "/steps.mp3"), false, AudioManager.STREAM_MUSIC);
     } 

     @Override 
    protected void onPause() { 
         // 停止播放。 
         asyncPlayer.stop(); 
         super.onPause(); 
     } 
 }

AudioTrack

前面谈到的都是从文件中播放音乐,无论是本地还是网络,如果我们要从流中播放,处理字节级别的媒体流,需要使用更底层的AudioTrack类,可以通过write()将音频字节(解码为PCM)写入音频硬件。AudioTrack提供更强大的控制,但也更为复杂。后面,我们将学习到一个同样的底层类AudioRecord,它和AudioTrack的使用相似。

小例子代码在:Pro Android学习:media framworks小例子 


举报

相关推荐

0 条评论