众所周知,Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现的。MediaPlayer在底层是基于OpenCore(PacketVideo)的库实现的,为了构建一个MediaPlayer程序,上层还包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制。但是该类只能对完整的音频文件进行操作,而不能直接对纯PCM音频数据操作。假如我们通过解码得到PCM数据源,又当如何将它们播放?没错,就是用AudioTrack这个类(MediaPlayer内部也是调用该类进行真正的播放音频流操作)下面这个DEMO演示了如何使用AudioTrack来播放PCM音频数据。废话不多说,先上效果图:工程代码结构也较为简单:简单说下思路,先把PCM音频数据从指定的路径文件读到内存,然后给AudioPlayer设置数据源,音频参数等,最后执行播放,暂停,停止等操作贴上部分类代码片段:
- public class AudioParam {
-
- int mFrequency; // 采样率
-
- int mChannel; // 声道
-
- int mSampBit; // 采样精度
-
- }
- public interface PlayState {
-
- public static final int MPS_UNINIT = 0; // 未就绪
-
- public static final int MPS_PREPARE = 1; // 准备就绪(停止)
-
- public static final int MPS_PLAYING = 2; // 播放中
-
- public static final int MPS_PAUSE = 3; // 暂停
- }