android多媒体——4步学会SoundPool
2015-09-20 09:31
543 查看
之前学习过了MediaPlayer用于播放手机音乐,但是在手机中很多的提示音并不是使用MediaPlayer来播放的比如短信铃声,通知铃声,android中使用SoundPool来播放小的音频文件;
下面一起学习SoundPool的使用
【1】先搭界面设置一个按钮用于播放开始
【2】得到SoundPool
查看API,得知要得到SoundPool根据版本不同有两种方式
21版本以前使用
SoundPool pool =new SoundPool(int maxStreams, int streamType, int srcQuality)
21版本之后:使用Builder来生成
【3】调用load方法加载音频
【4】调用play方法
public final int play (int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
参数介绍
Parameters
soundID a soundID returned by the load() function
leftVolume left volume value (range = 0.0 to 1.0)左声道
rightVolume right volume value (range = 0.0 to 1.0)右声道
priority stream priority (0 = lowest priority)优先级
loop loop mode (0 = no loop, -1 = loop forever)循环与否
rate playback rate (1.0 = normal playback, range 0.5 to 2.0)播放返回的速度
也不要使线程休眠,以免阻碍主线程
下面是源码
下面一起学习SoundPool的使用
【1】先搭界面设置一个按钮用于播放开始
【2】得到SoundPool
查看API,得知要得到SoundPool根据版本不同有两种方式
21版本以前使用
SoundPool pool =new SoundPool(int maxStreams, int streamType, int srcQuality)
21版本之后:使用Builder来生成
【3】调用load方法加载音频
【4】调用play方法
public final int play (int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
参数介绍
Parameters
soundID a soundID returned by the load() function
leftVolume left volume value (range = 0.0 to 1.0)左声道
rightVolume right volume value (range = 0.0 to 1.0)右声道
priority stream priority (0 = lowest priority)优先级
loop loop mode (0 = no loop, -1 = loop forever)循环与否
rate playback rate (1.0 = normal playback, range 0.5 to 2.0)播放返回的速度
注意事项
如果你的没有声音,那是因为加载音频需要时间,不要把load和play放在一起也不要使线程休眠,以免阻碍主线程
下面是源码
public class MainActivity extends Activity { private Button mButton; private SoundPool pool = null; private int id; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mButton = (Button) findViewById(R.id.button_sound); //必须放在外面因为加载音频需要时间不然会没有声音 id= initSound(); mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { playSound(); } }); } private void playSound() { //public final int play (int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate) // Parameters // soundID a soundID returned by the load() function // leftVolume left volume value (range = 0.0 to 1.0)左声道 // rightVolume right volume value (range = 0.0 to 1.0)右声道 // priority stream priority (0 = lowest priority)优先级 // loop loop mode (0 = no loop, -1 = loop forever)循环与否 // rate playback rate (1.0 = normal playback, range 0.5 to 2.0)播放返回的速度 pool.play(id, 1, 1, 0, -1, 1); } public int initSound() { if (Build.VERSION.SDK_INT > 21) { SoundPool.Builder builder = new SoundPool.Builder(); builder.setMaxStreams(2); AudioAttributes.Builder builder1 = new AudioAttributes.Builder(); builder1.setLegacyStreamType(AudioManager.STREAM_MUSIC); builder.setAudioAttributes(builder1.build()); pool = builder.build(); } else { //21版本以前使用SoundPool(int maxStreams, int streamType, int srcQuality) pool = new SoundPool(2, AudioManager.STREAM_MUSIC, 0); } return pool.load(getApplicationContext(), R.raw.outgoing, 1); } }
相关文章推荐
- Android的消息处理机制——Looper,Handler,Message
- Android Studio-emulator: ERROR: Unable to load VM from snapshot.
- Android事件分发完全解析(下)
- 获得android keystore的SHA1值
- Android事件分发完全解析(上)
- Android 简单的智能机器人聊天软件
- Android ListView的中的数据更新时遇到的一些问题的总结
- Android自定义View之图形图像(模仿360的刷新球自定义一个SeekBar)
- Android 组件和进程的一些关系
- Android自定义控件
- 贝塞尔曲线练习之弹性的圆
- Android Context MODE的四种模式解析(转)
- android多点触控统一的原理(使用 event.getAction()&MotionEvent.ACTION_MASK的原因)
- Android笔记(三十四) Android中线程之间的通信(六)Handle中的post()方法详解
- [置顶] Android Studio中实战Jni开发
- android关于用.xml布局文件中对View添加OnClick事件无法响应的事情
- Android--Animotion动画详解-逐帧动画,补间动画,属性动画。
- 深入理解Android View(1)
- Android开发网上的一些重要知识点
- Android 文件操作,删除,拷贝文件等