Stworzyłem prostą aplikację, która generuje prostokątną falę o zadanej częstotliwości i odtwarza ją za pomocą AudioTrack w trybie STREAM (STREAM_MUSIC). Wszystko wydaje się być w porządku pracy, a dźwięk odgrywa w porządku, jednak gdy strumień zakończeniu otrzymuję wiadomości w dzienniku:Restart AudioTrack nawet po jego zatrzymaniu
W/AudioTrack (7579): obtainBuffer() utwór 0x14c228 wyłączone, ponowne uruchomienie ...
Nawet po wywołaniu funkcji stop() nadal je otrzymuję. Uważam, że poprawnie ustawiłem rozmiar bufora AudioTrack na podstawie minimalnego rozmiaru wymaganego przez funkcję AudioTrack (w moim przypadku 6x1024). Karmię go mniejszymi buforami 1024 szortów.
Czy to dobrze, że dostaję te i powinienem zostawić to w ten sposób?
To jest punkt - wypełnienie bufora z danymi przed wywołaniem luz. Następnie upewnij się, że możesz generować dane na czas. Będziesz miał opóźnienie i zależy to od twojego telefonu (minimalny rozmiar bufora), częstotliwości próbkowania i dynamicznej rozdzielczości, której używasz. Im mój case (HTC Desire) 6kB. To około 3000 16-bitowych próbek mono. Możesz łatwo obliczyć wynikające opóźnienie biorąc pod uwagę częstotliwość próbkowania. Jeśli używasz natywnego interfejsu audio API, możesz uzyskać znacznie mniejsze opóźnienia, ale wciąż daleko od miniatur 5 ms iPhone'a ... –