2011-12-05 7 views
12

Mam problemy z klasą soundpool. Tu idzie:Błąd SoundPool: brak dostępnych nazw ścieżek

W moim app gry (APP muzyka btw) Potrzebuję odtworzyć przynajmniej 32 krótkich dźwięków w tym samym czasie, więc deklaruję soundpool tak:

private SoundPool sp; 
sp = new SoundPool(128, AudioManager.STREAM_MUSIC, 0); 

Po tym obciążeniem I wszystkie dźwięki MP3 potrzebne, około 80 dźwięków 55KB każdy. Nie mam problemów z ładowaniem wszystkich dźwięków, ale jest wolny! Cóż, to nie problem. Prawdziwym problemem jest to, kiedy grać około 20 dźwięków w tym samym czasie, nie ma błędu w moim dzienniku:

ERROR/AudioFlinger(59): no more track names available 
ERROR/AudioTrack(26349): AudioFlinger could not create track, status: -12 
ERROR/SoundPool(26349): Error creating AudioTrack 

Po że każdy dźwięk, który staram się grać rzuca ten sam błąd, a dźwięk nie mogą być odtwarzane. Nawet dźwięk innej działalności/puli dźwięków. Nie mam pojęcia, co się dzieje i jak to naprawić! Czy powinienem zmienić format plików dźwiękowych? Czy powinienem zwolnić pamięć lub coś po odtworzeniu dźwięku?

(I 'm testowania na Samsung Galaxy S I9000, 2.3.3 System OS. Aplikacja jest 2,1)

+0

Może trzeba wdrożyć SoundPool.OnLoadCompleteListener? – Codeman

+0

wywołać funkcję release() dla każdego z ścieżek dźwiękowych? – Codeman

+0

Upewnij się, że tryb pętli nie jest włączony, żaden utwór nie jest ustawiony na pauzę, a każdy plik mp3 jest naprawdę krótki, jak myślisz (bez ciszy na końcu). Ponieważ dostępna jest ograniczona liczba ścieżek dźwiękowych, musisz ograniczyć ilość działających ścieżek audio. Być może dostępnych jest mniej niż 32 utwory, więc nie można odtwarzać wielu dźwięków w tym samym czasie. Również niektóre implementacje są błędne i mogą się zawiesić na niektórych ścieżkach (może zależeć od złego pliku mp3 lub czegoś podobnego), dlatego dostępne utwory są dość szybko wykorzystywane. Jeśli aplikacja ulegnie awarii, czasami ścieżki nie są zwalniane, więc nie ma dźwięku. – dronus

Odpowiedz

1

Kilka myśli tutaj. Jeden: pierwszym parametrem konstruktora SoundPool nie jest liczba dźwięków, które chcesz w nim załadować, jest to maksymalna liczba jednoczesnych strumieni, które będziesz odtwarzać. Po drugie, SoundPool ma ograniczoną pamięć dla dźwięków, około 1 MB. Więc nie byłbym zaskoczony, gdybyś uderzył w jakiś nieudokumentowany limit liczby utworów, które możesz załadować za jednym razem. Zauważ, że 80 dźwięków razy 55k na dźwięk zdecydowanie przekracza 1 MB. Ograniczenie to obowiązuje po zdekompresowaniu plików MP3 do danych dźwiękowych w SoundPool.

4

zobaczyć this (in android group)

audio, istnieje twardy limit 32 aktywnych obiektów AudioTrack za urządzenia (nie za app: trzeba podzielić te 32 z resztą systemu),