본문 바로가기
Android/Dev

soundpool 사용 시 매너모드/무음모드 연동

by featherwing 2018. 5. 5.
반응형

soundpool은 안드로이드에서 간단한 소리를 재생할 때 유용하게 사용할 수 있는 방법입니다.

 

기본적인 사용방법은

 

1. onstart에서 load

Soundpool soundPool



    @Override

    public void onStart() {

        super.onStart();



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

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



        soundsMap.put(1, soundPool.load(getActivity(), R.raw.sound1, 1));

    }

 

onStart에서 load해 주어야 soundpool을 사용할 수 있습니다.

이후에는 시스템리소스에서 상주하며 soundPool.play 로 언제든지 재생할 수 있습니다.

 

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

에서 첫번째 변수(4)는 리소스의 최대개수로, 음원의 숫자에 맞춰서 변경해줍니다.

 

 

 

2. 필요한 부분에서 재생

int Sound01



public void soundPool() {

if (soundPool != null) {

Sound01 = soundPool.play(soundsMap.get(1), 1, 1, 1, 0, 1f);

}

}

 

2.1. soundPool.play(soundID,좌측볼륨,우측볼륨,우선순위,반복횟수,속도)로 사용합니다.

 

2.2. if 구문을 넣어주면 재생을 시작할 때 nullpointException을 방지할 수 있습니다.

 

2.3. soundID와 반복횟수를 제외한 부분은 미세한 조절이 불가능하고, 값에 따라 원하는 정도의 효과가 나기 힘들기 때문에

없다고 생각하는것이 속편하고, 차라리 원하는 수치로 세부조정한 음악 리소스를 사용하는것이 훨씬 효율적입니다.

 

2.4. soundPool.play는 사용할때마다 개별적인 int 값을 반환합니다. 이를 받아주어야 하단에서 음악을 중지할 수 있습니다.

 

 

3. 필요한 부분에서 정지

public void stopSound(int Sound01) {

        if (soundPool !=null) {

            soundPool.stop(Sound01);

        }

    }

 

재생할 때 받아둔 int 값을 넣어주면 바로 정지됩니다.

 

 

 

4. onStop에서 release

 @Override

    public void onStop() {

        super.onStop();



        soundPool.release();

        soundPool = null;



    }

 

onStop에서 release해 주어야 시스템 리소스의 낭비를 방지할 수 있습니다.

 

 

 

 

* 매너모드/ 무음모드 및 음량조절문제

 

1. onstart에서 load

Soundpool soundPool



    @Override

    public void onStart() {

        super.onStart();



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

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



        soundsMap.put(1, soundPool.load(getActivity(), R.raw.sound1, 1));

    }

  soundPool의 경우, 설정해주는 변수에 따라 시스템의 음량조절에 종속됩니다.

이는 onStart에서 SoundPool을 load할때 결정되는데

 

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

 

에서 두번째 변수에서 결정할 수 있습니다.

 

AudioManager.SRTEAM_SYSTEM 

으로 설정할 경우 시스템 음량에 따라 조절되며, 볼륨조절 버튼에 연동되며 무음/진동모드일 경우는 소리가 나지 않습니다.

 

 

AudioManager.STREAM_ALARM 

으로 조절 해 놓을 경우, 시스템의 알람 음량에 종속됩니다. 

안드로이드의 시스템 설정에서 알람 음량을 조절할 경우 조절할 수 있습니다.

하지만, 기기의 볼륨조절 버튼은 알람음량조절을 하지 않고 미디어나 시스템 음량을 조절하기 때문에 연동되지 않고

무음/진동일 경우에도 소리가 납니다. 

 

 

이 변수에는 상기의 두 변수 외에도 다양한 값이 존재합니다.

 

반응형

댓글