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

时间:2022-03-08 10:12:09

文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处http://blog.csdn.net/flowingflying/以及作者@恺风Wei

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小例子 

相关链接:我的Android开发相关文章