1、延时时间较长 , 且资源占用率高 。2、不支持多个音频同时播放 。Android中除了MediaPlayer播放音频之外还提供了SoundPool来播放音效 , SoundPool使用音效池的概念来管理多个短促的音效 , 例如它可以开始就加载20个音效 , 以后在程序中按音效的ID进行播放 。SoundPool的特点和使用长江如下:
1、主要用于播放一些较短的声音片段 。2、SoundPool对CPU资源占用量低和反应延迟小 。3、SoundPool还支持自行设置声音的品质、音量、 播放比率等参数 。SoundPool的API说明如下:
1、SoundPool(int maxStreams, int streamType, int srcQuality):指定它总共支持多少个声音(也就是池的大小)、声音的品质 。该 *** 属于5.0以下版本使用 。2、SoundPool.Builder:从5.0版本开始使用的是SoundPool.Builder模式 。3、load(Context context, int resld, int priority):从 resld 所对应的资源加载声音 。4、load(FileDescriptor fd, long offset, long length, int priority):加载 fd 所对应的文件的offset开始、长度为length的声音 。5、load(AssetFileDescriptor afd, int priority):从afd 所对应的文件中加载声音 。6、load(String path, int priority):从path 对应的文件去加载声音 。说明:4个load *** 中都有一个priority参数 , 该参数目前还没有任何作用 , Android建议将该 参数设为1 , 保持和未来的兼容性 。play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate):指定播放哪个声音 , 2和3参数的意思是音量 , priority指定播放的优先级 , 数值越大优先级越高;loop用于指定是否循环 , 0不循环 , -1位循环;rate指定播放的比率 , 可选值为0.5 – 2 , 1为正常比率 。1.1.3 AudioTrackAudioTrack属于更偏底层的音频播放 , 在Android的framework层有MediaPlayerService , 其内部就是使用了AudioTrack 。AudioTrack用于单个音频播放和管理 , 相比于MediaPlayer具有:精炼、高效的优点 。因此 , 对于AutioTrack可以总结如下:
使用场景:更适合实时产生播放数据的情况 , 如加密的音频 , MediaPlayer是束手无策的 , AudioTrack可以处理 。要求:AudioTrack用于播放PCM(PCM无压缩的音频格式)音乐流的回放 , 如果要播需放其它格式音频 , 需要相应的解码器 , 这也是AudioTrack用的比较少的原因 , 原因在于需要程序开发者自己解码音频 。播放模式:① AudioTrack播放音频有两种播放模式 , 一种是静态模式 , 即加载的数据和资源可以直接全部加载完毕 , 加载方式简单 , 效率也比较高 。但是如果数据量很大 , 往往不适合;② 流模式和 *** 上播放视频是类似的 , 即数据是按照一定规律不断地传递给接收方的 。音频文件过大 音频属性要求高 , 比如采样率高、深度大的数据;另外如果音频数据是实时产生的 , 这种情况就只能用流模式 。使用AudioTrack公有三个步骤:
共有三个步骤:
构建AudioTrack对象 , 并且把PCM的参数传到对象里面调用start调用write 。另外 , 其实AudioTrack以外 , 还有一个Audio系统 , 在该系统中主要包含三个核心的API , 分别是:
AudioManager:主要是用来管理Audio系统的 。AudioTrack:主要是用来播放声音 。AudioRecord:主要是用来录音 。1.1.4 RingtoneManagerRingtone为 *** 、通知和其他类似声音提供快速播放的 *** , 该种方式播放音频时 , 还会涉及到一个核心的管理类”RingtoneManager” , 该类作为管理类提供系统 *** 列表检索 *** , 并且RingtoneManager可以生成Ringtone实例 。具体的Ringtone的使用步骤和相关的 *** 如下所示:
1、获取Ringtone对象实例://1.通过 *** uri获取static Ringtone getRingtone(Context context, Uri ringtoneUri)//2.通过 *** 检索位置获取Ringtone getRingtone(int position)2、RingtoneManager中重要的 *** :1. // 两个构造 *** (Activity activity)RingtoneManager(Context context)?2. // 获取指定声音类型( *** 、通知、闹铃等)的默认声音的Uristatic Uri getDefaultUri(int type)?3. // 获取系统所有Ringtone的cursorCursor getCursor()?4. // 获取cursor指定位置的Ringtone uriUri getRingtoneUri(int position)?5. // 判断指定Uri是否为默认 *** static boolean isDefault(Uri ringtoneUri)?6. //获取指定uri的所属类型static int getDefaultType(Uri defaultRingtoneUri)?7. //将指定Uri设置为指定声音类型的默认声音static void setActualDefaultRingtoneUri(Context context, int type, Uri ringtoneUri)8、//播放void play() 9、//停止播放void stop()1.1.5 音频及音效的播放总结经过如上几种音效的播放方式的讲解 , 我们可以对音效的播放做简单的总结如下所示:
推荐阅读
- 白蜡金命是什么意思,早年劳多得少,中年由衰转盛
- 立春吃什么蔬菜好 立春吃什么蔬菜
- 一个手机号两个微信方法 一个号码可以申请两个微信吗
- iPhone实时定位共享功能 苹果手机怎么定位苹果手机
- CAJ怎么转换成Word?,CAJ怎么转换成Word?
- 模糊马赛克怎么去除 手机消除马赛克还原图片的方法
- 苹果手机虚拟小圆点功能介绍 虚拟home键怎么设置
- 有了爱情之后,这些星座的手机从不关机
- 三星s6手机参数 三星s6多少钱
- 申请qq号注册账号流程 2022无手机号码申请qq号