2014-02-14 2 views
1

여러 개의 버튼이있는 Android Soundboard를 쓰려고합니다. 각 버튼은 다른 사운드를 재생해야합니다.Android Soundboard 한 번에 하나의 소리 만

buttonAlan.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      playSound("alan"); 
     } 
    }); 

이 버튼의 각각은 다음 함수를 호출 :

나는 각 버튼의 OnClickListener를있다.

private void playSound(String sound) { 

    int path = getResources().getIdentifier(sound, "raw", getPackageName()); 
    mediaplayer = MediaPlayer.create(this, path); 


    try { 
     mediaplayer.prepare(); 
    } catch (IllegalStateException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    mediaplayer.start(); 
} 

사운드 보드가 작동하지만 버튼을 클릭 할 때마다 소리가 반복 재생됩니다. 재생을 멈추기 위해서는 mediaplayer가 필요하지만, mediaplayer.stop()과 같은 것을 쓸 때마다 App은 전혀 작동하지 않습니다. 내 기능/코드에서 변경해야 할 사항이 있습니까?

답변

1

사운드 풀을 사용하여 문제를 해결했지만 동시에 여러 소리를 재생할 수도 있습니다. 내가 먼저 초기화 및로드 내가 생성자

SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0); 
int gameOverSound = soundPool.load(context, R.raw.gameover, 1); 

에 필요한 소리 다음은 다음과 같이 재생할 수 있습니다 :

public void playSound(int soundId) { 
     soundPool.play(soundId, 1.0f, 1.0f, 0, 0, 1); 
} 

편집 : 당신이 정지 (전화해야하는 MediaPlayer를 관련 ) 및 release()를 사용하여 다른 사운드를 재생하십시오. 또한 당신은

mPlayer.setLooping(false); 
+0

당신이 날은 "문맥"무슨 말씀 해주십시오 수 설정할 수 있습니까? 어떻게 든 내 MainActivity의 이름과 관련이 있습니까? – Stef

+1

간단하게 말했다 : [문맥은 무엇인가] (http://stackoverflow.com/questions/3572463/what-is-context-in-android) . 당신은 단지 "this"또는 컨텍스트로 "getContext()"를 호출하면 다른 클래스로 이동하면 호출하는 컨텍스트를 전달해야합니다 (예 : 리소스에 액세스하는 데 필요). – stamanuel

+0

감사합니다. 그것은 트릭을했다. 이제 버튼을 누를 때마다 사운드 풀의 재생을 중지하면됩니다. – Stef

관련 문제