zoukankan      html  css  js  c++  java
  • Android中的音频播放(MediaPlayer和SoundPool)

    【转】 Android中的音频播放(MediaPlayer和SoundPool)
    2011-03-29 00:45
    转载自 Android168
    最终编辑 liang88tt

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

    MediaPlayer:

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

    此类用法如下:

        1、从资源文件中播放

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

                  player.start();

        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);

  • 相关阅读:
    为什么DIY报价----走出软件作坊:三五个人十来条枪 如何成为开发正规军(十二)[转]
    物以类聚,人以群分--走出软件作坊:三五个人十来条枪 如何成为开发正规军(十一)[转]
    将服务费用DIY到底----走出软件作坊:三五个人十来条枪 如何成为开发正规军(十)[转]
    实施费用也能DIY--走出软件作坊:三五个人十来条枪 如何成为开发正规军(九)[转]
    去掉iphone手机滑动默认行为
    获取json对象长度的问题
    手机淘宝用JS来动态写meta标签(1像素边框处理方法)
    移动端多行文字截断
    移动端初始化页面
    JavaScript 高级程序设计 02-变量、数据类型
  • 原文地址:https://www.cnblogs.com/xiaoQLu/p/2026520.html
Copyright © 2011-2022 走看看