2012-11-23 2 views
19

다른 오디오 파일을 재생해야하는데 길이는 5 ~ 30 초입니다. 그리고 나는 좌우 채널에 볼륨을 독립적으로 설정하고 리버브 (Reverb) 또는 왜곡 (Distortion)과 같은 효과를 적용하려고합니다. 그래서 어떤 API를 사용해야합니까?AudioTrack, SoundPool 또는 MediaPlayer 어떤 것을 사용해야합니까?

또한 AudioTrack API에서 너무 많은 doc을 찾을 수 없습니다. 어디에서 예제를 찾을 수 있는지 알고 있습니까? Thx.

답변

2

MediaPlayer는 다중 채널의 볼륨 설정을 지원하지 않습니다.

나는 SoundPool이 당신의 필요에 맞는 유일한 것이라 생각합니다.

편집 : 그래, 당신은 SoundPool을 필요로,이 읽기 : 는 http://www.wiseandroid.com/post/2010/07/13/Intro-to-the-three-Android-Audio-APIs.aspx

+0

감사합니다. 사운드 풀을 사용해 보겠습니다. – Fede

+0

MediaPlayer는 오른쪽/왼쪽 채널의 볼륨 설정을 별도로 지원합니다. 다음은 좋은 예입니다. https : //www.codota.com/android/methods/android.media.MediaPlayer/setVolume 더하기 여기에서 설명서를 참조하십시오. https://developer.android.com/ reference/android/media/MediaPlayer.html # setVolume (float, float) –

39

사운드 풀은 실제로 오디오 믹서입니다. ogg 또는 mp3로 인코딩되었는지 또는 압축되지 않은지 여부에 관계없이 짧은 클립 만 재생할 수 있습니다. 사운드 풀은 항상 압축되지 않은 상태로 메모리에 저장하며, 한계는 1MB임을 알아야합니다. 클립의 메모리가 너무 크면 사운드 풀이 꺼지고 다음 오류가 표시됩니다. "AudioFlinger에서 트랙을 만들지 못했습니다. 상태 : -12" 미디어 플레이어에서 스트림을 재생하고 실시간으로 해독합니다. 따라서 훨씬 더 긴 클립을 재생할 수 있지만 프로세서 파워가 필요합니다.

그래서 사운드 풀은 짧은 오디오 효과 (클릭 수, 폭발음, 사운드 루프)보다 좋기 때문에 미디어 플레이어는 배경 음악에 더 좋습니다. 또한 사운드 풀은 더 많은 클립을 동시에 재생할 수 있으며 볼륨과 속도를 제어합니다. 또한 루프를 재생할 수 있습니다.

하나의 메모 : 클립이 완전히로드되고 디코딩되지 않으면 사운드 풀에서 음악을 재생할 수 없습니다. 따라서 OnLoadCompleteListener (Android 10 이상)를 사용하여이를 확인해야합니다. 디코딩되기 전에 사운드를 재생하려고하면 사운드 풀이 음소거됩니다.

미디어 플레이어에는 이러한 문제가 없습니다.

4

다른 답변에서 제시 한 것 외에도 MediaPlayer와 SoundPool의 차이점 중 하나는 MediaPlayer에서 사운드 클립이 이미 재생 중일 때 사운드 클립을 재생할 수 없다는 것입니다 (특히 게임에서이 기능이 도움이 될 수 있음). MediaPlayer는 클립이 다시 재생되기 전에 완전히 끝내야합니다. 정보는 공식 웹 사이트에서 제공되는 것 같습니다.

그러나 SoundPool에는 이러한 문제가없고 SoundPool이 호출 될 때 오디오가 재생되는 것으로 나타났습니다 (MediaPlayer를 사용할 때 가끔씩 약간의 지연이 있음).

저는 SoundPool이 게임과 같은 짧은 소리에 더 좋다라고 말하는 이유 중 일부라고 생각합니다. 호프가 도움이 되길 바랍니다.