마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

MediaPlayer 재생이 늦게 되는 경우가 있습니다.

0 추천
MediaPlayer를 이용해서, 재생이 필요할때마다 MediaPlayer를 생성해서 wav파일을 3개를 재생하고, 해제하는 프로그램을 만들었는데요.

이게 잘 재생이 되다가 간혹 1~2초 딜레이가 걸렸다 재생이 되거나, 3번째 파일이 재생 중간에 끝어지는 현상이 있습니다.

SoundPool이나 AudioTrack을 쓸까도 고민해봤는데, 3개의 파일을 순차적으로 재생해야 되는거라 그것도 어려울 것 같고... (길이도 합치면 4~5초 정도 됩니다.)

재생이 잘 되다가 간혹 딜레이가 걸리는지 이유를 모르겠네요. ㅜ.ㅡ
mg2000 (2,640 포인트) 님이 2016년 2월 12일 질문

1개의 답변

0 추천
MediaPlayer의 경우 동영상및 긴 음악 재생에 사용되는 것이라, 무겁습니다.

 짧은 미디어의 경우 SoundPool을 사용하는 것이 좋아보입니다.
안_드루이드 (14,510 포인트) 님이 2016년 2월 16일 답변
제가 재생하는 파일이 4~5초 정도 되고,
파일을 재생하기 위해, 재생 종료 시점을 알아야 하는데,
SoundPool은 그러한 부분이 부족하더라고요. ㅠ.ㅠ

일단 음악 재생앱들 보면, 잘 재생하던데, 그런것들은 MediaPlayer를 안 쓰고 다른 걸 쓴건지.. ㅜ.ㅡ
일반적인 경우, 보통 하나만 재생하기 때문에 큰 문제가 없어 보입니다.
음원이 wav 포맷이면 사이즈도 크고 무거운 것으로 알고 있습니다.
조금 가벼운 ogg로 변환해서 한번 사용해 보세요.
배보다 배꼽이 더 클순 있을지 모르겠으나.. WAV를 MediaCodec 혹은 다른 디코더를 통해 PCM으로 변환 한 후 AudioTrack을 통해 재생 시키는 방법도 있긴 할 듯 합니다.
배꼽이 더 커도 상관은 없는데, AudioTrack도 재생 끝난 시점을 알 수 없지 않나요?
setNotificationMarkerPosition, setPositionNotificationPeriod , setPlaybackPositionUpdateListener 같은 것으로 마지막 위치를 지정하면 가능은 할 듯 한데요..
http://stackoverflow.com/questions/12323735/audiotrack-how-to-know-when-a-sound-begins-ends

아니면 NDK의 openSL로 사운드 출력을 하시면, 콜백으로 데이터를 채워 넣으라고 오니. 구분이 가능하실 듯 하구요..
...