博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android中的音频播放(MediaPlayer和SoundPool)
阅读量:5827 次
发布时间:2019-06-18

本文共 1650 字,大约阅读时间需要 5 分钟。

Android中音频和视频的播放我们最先想到的就是MediaPlayer类了,该类提供了播放、暂停、停止、和重复播放等方法。该类位于android.media包下,详见API文档。其实除了这个类还有一个音乐播放类那就是SoundPool,这两个类各有不同分析一下便于大家理解

MediaPlayer:

   此类适合播放较大文件,此类文件应该存储在SD卡上,而不是在资源文件里,还有此类每次只能播放一个音频文件。

此类用法如下:

    1、从资源文件中播放

              MediaPlayer   player  =   new MediaPlayer.create(this,R.raw.test);

              player.stare();

    2、从文件系统播放

              MediaPlayer   player  =   new MediaPlayer();

              String  path   =  "/sdcard/test.mp3";

               player.setDataSource(path);

               player.prepare();

               player.start();

    3、从网络播放

        (1)通过URI的方式:

              String path="http://**************.mp3";     //这里给一个歌曲的网络地址就行了

                Uri  uri  =  Uri.parse(path);

                MediaPlayer   player  =   new MediaPlayer.create(this,uri);

                player.start();

        (2)通过设置数据源的方式:

             MediaPlayer   player  =   new MediaPlayer.create();

             String path="http://**************.mp3";          //这里给一个歌曲的网络地址就行了

             player.setDataSource(path);

             player.prepare();

             player.start();

 SoundPool:

  此类特点就是低延迟播放,适合播放实时音实现同时播放多个声音,如游戏中炸弹的爆炸音等小资源文件,此类音频比较适合放到资源文件夹 res/raw下和程序一起打成APK文件。

  用法如下:

        SoundPool soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100);

        HashMap<Integer, Integer> soundPoolMap = new HashMap<Integer, Integer>();  

        soundPoolMap.put(1, soundPool.load(this, R.raw.dingdong1, 1));        

        soundPoolMap.put(2, soundPool.load(this, R.raw.dingdong2, 2));      

        public void playSound(int sound, int loop) {

            AudioManager mgr = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);   

            float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);   

            float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);       

           float volume = streamVolumeCurrent/streamVolumeMax;   

           soundPool.play(soundPoolMap.get(sound), volume, volume, 1, loop, 1f);

           //参数:1、Map中取值   2、当前音量     3、最大音量  4、优先级   5、重播次数   6、播放速度

}   

      this.playSound(1, 0);

转载地址:http://jsadx.baihongyu.com/

你可能感兴趣的文章
docker 基础
查看>>
C++中STRING转为INT (转)
查看>>
ASP.NET上传多个文件
查看>>
学习:UTF-8和GBK的区别
查看>>
Shape parameter 形状参数
查看>>
【求助】小系统组成大系统所遇到的问题
查看>>
js 中英文字符串长度
查看>>
让xp系统(win2003系统)支持搜索文件内容
查看>>
Audactiy 和 Sox
查看>>
Apache Rewrite 拟静态配置
查看>>
memcache分布式部署的原理分析
查看>>
动软代码生成器 可用于生成Entity层,可更改模板 /codesmith 也可以
查看>>
LeetCode: Multiply Strings. Java
查看>>
使用Heroku,需要locale至zh_CN,代替zh-CN
查看>>
优步北京B组(8月10日-8月16日奖励规则)
查看>>
eclipse启动tomcat 访问http://localhost:8080 报404错误
查看>>
iOS发展- backBarButtonItem 颜色/文字修改
查看>>
Java生成CSV文件
查看>>
终结者单身——setAccessible(true)
查看>>
IOS应用沙盒文件操作
查看>>