zoukankan      html  css  js  c++  java
  • android SoundPool 及 MediaPlayer 声音播放

    package com.free.study;

    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;

    import android.app.Activity;
    import android.content.res.AssetFileDescriptor;
    import android.content.res.AssetManager;
    import android.media.AudioManager;
    import android.media.MediaPlayer;
    import android.media.SoundPool;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;

    public class StudyAndroidActivity extends Activity {
        
        Button btn1;
        Button btn2;
        
        SoundPool soundPool;
        HashMap<Integer, Integer> soundMap ; 
        float leftVolume =1.0f, rightVolume =1.0f;
        int priority =1, loop = 0;
        float rate =1.0f;//正常速率
        
        
        Button btn3;
        Button btn4;
        
        MediaPlayer mediaPlayer;
        
        

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            btn1 = (Button)findViewById(R.id.button1);
            btn2 = (Button)findViewById(R.id.button2);
            
            soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
            
            soundMap = new HashMap<Integer, Integer>();
            
            soundMap.put(1, soundPool.load(this, R.raw.aaa, 1)); 
            
            AssetFileDescriptor descriptor;
            try {
                descriptor = this.getResources().getAssets().openFd("abc.wav");
                soundMap.put(2, soundPool.load(descriptor, 1 )); 
            } catch (IOException e) {
                e.printStackTrace();
            }  
             
            btn1.setOnClickListener(new View.OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    playSound(1);
                }
            });
            
            btn2.setOnClickListener(new View.OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    playSound(2);
                }
            });
            
            
            
            
            
            btn3 = (Button)findViewById(R.id.button3);
            btn4 = (Button)findViewById(R.id.button4);
            
            btn3.setOnClickListener(new View.OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    playMedia(3);
                }
            });
            
            btn4.setOnClickListener(new View.OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    playMedia(4);
                }
            });
            
        }

            private void playSound(int soundID){
            
    //        AudioManager am = (AudioManager)this.getSystemService(this.AUDIO_SERVICE);
    //        float audioMaxVolumn = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
    //        float audioCurrentVolumn = am.getStreamVolume(AudioManager.STREAM_MUSIC);
    //        float volumnRatio = audioCurrentVolumn/audioMaxVolumn;

                int streamID =soundPool.play(soundMap.get(soundID), leftVolume, rightVolume, priority, loop, rate);
                if(streamID == 0){
                    //播放失败
                    Toast.makeText(this, "fail", Toast.LENGTH_SHORT).show();
                }else{
                    //播放成功
                    Toast.makeText(this, "ok", Toast.LENGTH_SHORT).show();
                }
        }
        
        
        private void playMedia(int soundID){
            if(mediaPlayer!=null){
                mediaPlayer.stop();                
                mediaPlayer.reset();
            }
            
            if(soundID == 3){
                mediaPlayer = MediaPlayer.create(this,
                    R.raw.aaa);
                mediaPlayer.start();
            }
            else if(soundID == 4){
                try {
                    AssetManager assetManager = this.getAssets();
                    AssetFileDescriptor fileDesc = assetManager.openFd("abc.wav");
                    mediaPlayer = new MediaPlayer();
                    mediaPlayer.setDataSource(fileDesc.getFileDescriptor(),
                            fileDesc.getStartOffset(),
                            fileDesc.getLength()
                            );
                    mediaPlayer.prepare();
                    mediaPlayer.start();
                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            

        }
        
        //TODO 资源释放
        
        
    }
  • 相关阅读:
    Python并行编程(七):线程同步之事件
    Python并行编程(六):线程同步之条件
    Python并行编程(五):线程同步之信号量
    Python并行编程(四):线程同步之RLock
    Python并行编程(三):线程同步之Lock
    UML关系总结——画uml图、流程图、软件结构图、类图、顺序图的方法
    2020,你好!
    字符串和多维数组
    排序算法
    查找技术
  • 原文地址:https://www.cnblogs.com/freeliver54/p/2690657.html
Copyright © 2011-2022 走看看