2013-09-02 2 views
2

녹음 된 파일을 재생할 때 soundpool을 사용하고 있습니다. 사운드 파크가 끝날 때를 알 수있는 방법이 있는지 알고 싶습니다. 여기에 내 작업 코드가 있습니다.soundpool에서 오디오 파일 재생이 끝났을 때를 아는 방법?

public void soundPool() { 
    final float playbackSpeed = 1.5f; 
    final SoundPool soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 
      100); 

    final int soundId = soundPool.load(audiofile.getAbsolutePath(), 1); 
    AudioManager mgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
    final float volume = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC); 

    soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() { 
     @Override 
     public void onLoadComplete(SoundPool arg0, int arg1, int arg2) { 
      soundPool.play(soundId, volume, volume, 1, 0, playbackSpeed); 
     } 
    }); 

} 

답변

0

예. 미디어 플 레이어를 사용하면 미디어 플 레이어를 사용해야합니다. 그러나 미디어 플레이어를 사용하면 빨리 전달할 수 없습니다. 내 제안은 사운드 재생을 위해 사운드 풀을 사용하고 재생하기 전에 미디어 플레이어를 사용하여 사운드의 지속 시간을 확인할 수 있으며 시간이 지나면 수동으로 사운드 풀을 중지 할 수 있습니다. 간단한 내가 프로젝트 에서이 일을했습니다.

1

불행히도 SoundPool이 샘플 재생을 완료했을 때 알려주는 리스너가 없습니다. 이 기능이 필요하면 MediaPlayer를 사용하십시오.

해킹으로 오디오 편집기에서 오디오 파일의 길이를 밀리 초 (X)로 얻은 다음 재생하도록 지정한 후에 앱에 타이머를 설정할 수 있습니다. 타이머는 X 밀리 초 후에 한 번 발사되도록 설정됩니다. 이 방법을 사용하면 사운드의 재생 여부를 대략적으로 알 수 있습니다. 그러나 이것은 매우 신뢰할 수없는 접근 방법이며 도움이 될 수 있으면 피해야합니다. 대신 MediaPlayer.OnCompletionListener()에서 MediaPlayer 클래스를 사용하십시오.

0

오디오 파일의 재생 시간을 스레드로 확인하는 방법은 한 가지뿐입니다.

soundPool.play(soundId, 1, 1, 1, 0, 1f); 
new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      // do your stuff song is finished 

     } 
},soundDuration); 

사용해보기.