2012-11-23 28 views
19

Potrzebuję odtworzyć wiele plików audio o różnym czasie trwania, np. Od 5 do 30 sekund. Chcę ustawić głośność niezależnie dla kanału prawego/lewego, a także zastosować efekty, takie jak pogłos czy zniekształcenie. Którego interfejsu API powinienem użyć?AudioTrack, SoundPool lub MediaPlayer, z których należy korzystać?

Ponadto nie mogę znaleźć zbyt wiele dokumentów na temat interfejsu API AudioTrack. Czy wiesz, gdzie mogę znaleźć przykłady? Thx.

Odpowiedz

2

MediaPlayer nie obsługuje ustawiania głośności dla kanałów multiblokowych.

Myślę, że SoundPool jest jedyną rzeczą, która pasuje do twoich potrzeb tutaj.

EDIT: Tak, trzeba SoundPool, przeczytaj to: http://www.wiseandroid.com/post/2010/07/13/Intro-to-the-three-Android-Audio-APIs.aspx

+0

OK, dziękuję, spróbuję z soundpoolem. – Fede

+0

MediaPlayer obsługuje oddzielnie głośność ustawień dla kanałów prawo/lewo. To jest dobry przykład: https: //www.codota.com/android/methods/android.media.MediaPlayer/setVolume plus możesz zapoznać się z dokumentacją tutaj: https://developer.android.com/ reference/android/media/MediaPlayer.html # setVolume (float, float) –

39

Dźwięk basen jest rzeczywiście mikser audio. Może odtwarzać krótkie klipy bez względu na to, czy są zakodowane jako ogg czy mp3, czy też nie są skompresowane. Pula dźwięku zawsze zapisuje je w pamięci nieskompresowanej i musisz wiedzieć, że limit to 1 MB. Jeśli twój klip jest zbyt duży w pamięci, pula dźwiękowa cichnie, a znajdziesz następujący błąd: "Odtwarzacz audio nie mógł utworzyć ścieżki. Status: -12" Odtwarzacz multimedialny odtwarza strumień i dekoduje go w czasie rzeczywistym. Może więc odtwarzać znacznie dłuższe klipy, ale potrzebuje do tego mocy procesora.

Odtwarzacz multimedialny jest lepszy dla muzyki w tle, podczas gdy pula dźwiękowa ma lepsze efekty dźwiękowe (kliknięcia, wybuchy, pętle dźwiękowe). Ponadto, pula dźwiękowa może jednocześnie odtwarzać więcej klipów i kontrolować głośność i prędkość. Może również odtwarzać pętle.

Jedna uwaga: nie można odtwarzać muzyki z puli dźwiękowej, jeśli klip nie jest w pełni załadowany i odkodowany. Musisz więc użyć OnLoadCompleteListener (Android 10 lub nowszy), aby to sprawdzić. Jeśli spróbujesz odtworzyć dźwięk przed jego dekodowaniem, pula dźwiękowa zostanie wyciszona.

Odtwarzacz multimediów nie ma takich problemów.

4

Oprócz sugestii innych odpowiedzi, różnica między MediaPlayer i SoundPool polega na tym, że w MediaPlayer nie można odtwarzać klipu dźwiękowego, gdy jest już odtwarzany (funkcja ta może być szczególnie pomocna w grach). MediaPlayer wymaga całkowitego zakończenia klipu, zanim będzie można go odtworzyć ponownie. Myślę, że informacje są dostępne na oficjalnej stronie internetowej.

Jednak SoundPool nie ma takiego problemu, a także zauważyłem, że SoundPool odtwarza dźwięk właśnie wtedy, gdy jest wywoływany (czasami zauważyłem niewielkie opóźnienie, gdy używałem MediaPlayer).

Myślę, że to (część) powód, dla którego ludzie mówią, że SoundPool jest lepszy na krótkie dźwięki, na przykład w grach. Mam nadzieję, że to pomoże :)