2010-02-25 16 views
12

Krótka wersja: Jaki jest najlepszy sposób na zakodowanie danych w formacie MP3 (najlepiej w formacie AAC/Ogg/WMA ) do tablicy Javy lub ByteBuffer czy mogę wtedy manipulować ?Dekodowanie zakodowanych danych dźwiękowych (MP3, itp.) Na Androidzie bez grania

Łączę program, który spowalnia i przyspiesza działanie plików dźwiękowych jako jednej z jego funkcji. Działa to dobrze dla plików WAV, , które są nagłówkiem oraz dokładnymi danymi binarnymi, które muszą być wysłane do głośnika , a teraz muszę zaimplementować go dla MP3 (najlepiej, jeśli ten obsługuje również AAC, Ogg i WMA , ale ponieważ są to mniej popularne formaty, nie jest to wymagane). Android nie odsłania interfejsu do dekodowania pliku MP3 bez odtwarzania go, więc muszę utworzyć ten interfejs .

trzy opcje przedstawiają się, choć jestem otwarty na innych:

1) Napisz własną dekodera. Mam już funkcjonalny wykrywacz ramek , który miałem nadzieję użyć dla opcji (3), a teraz powinien tylko trzeba wdrożyć tabele dekodowania Huffmana.

2) Użyj JLayer lub równoważnej biblioteki Java, aby obsłużyć dekodowanie . Nie do końca wiadomo, jakie są konsekwencje licencji .

3) Połącz się z biblioteką libmedia/MediaPlayerService. To właśnie robi SoundPool, a użycie tej usługi sprawia, że ​​wierzę, że podczas oficjalnej niestabilności implementacja ta nie będzie działać w żadnym miejscu. Oznacza to zapisanie kodu JNI, aby połączyć się z usługą, ale Stwierdzam, że jest to głęboka dziura od królika. Na powierzchni jestem , mający problem z szablonem sp <.

+0

Powodzenia z tym problemem? – twk

+0

Czy udało Ci się odszyfrować dane audio? Jeśli tak, jak to zrobiłeś? –

Odpowiedz

1

Zrobiłem to z libmad i NDK. JLayer jest powolny, a ramy medialne to ruchomy cel. Możesz znaleźć informacje i kod źródłowy pod adresem http://apistudios.com/hosted/marzec/badlogic/wordpress/?p=231

+1

To wydaje się dość ograniczone rozwiązanie, ponieważ libmad jest licencjonowany na licencji GPL; co oznacza, że ​​aby z niego skorzystać, musiałbym licencjonować moją aplikację na licencji GPL, co nie jest czymś, co planowałem robić (i wygląda na to, że możesz być na tej samej łodzi). Jest to część tego, co sprawiło, że JLayer jest atrakcyjny: ma licencję LGPL. Android jest licencjonowany przez Apache, więc naprawdę nie masz żadnych wątpliwości. Znaczna część mnie wątpi, że ramy medialne są ruchomym celem: w tym momencie jest zakorzeniony w tak wielu obiektach wyższego poziomu (głównie MediaPlayer i SoundPool), że wątpię, że zostaną usunięte. –

1

Nie próbowałem go, ale mp3transform jest LGPL.

+2

Android nie obsługuje javax.sound. ta lib używa go, więc nie jest przydatna dla Androida – Adem