2011-01-12 10 views
5

Jestem na bardzo zaawansowanym etapie rozwoju tej aplikacji, ale patrząc na nią, już osiągnąłem problem. Muszę odtworzyć plik audio w tył (wiesz, że chcesz ujawniać ukryte wiadomości;)). Nie mam doświadczenia w pracy z audio na Androida i nie mam pojęcia, czy to jest nawet możliwe.Odwróć plik audio w Androidzie

znalazłem tu pytanie, które rozwiązuje ten problem w java (Click Here For Question)

Ale to sprawia, że ​​korzystanie z biblioteki javax.sound który android nie obsługuje. Czy potrzebuję tej biblioteki, aby rozwiązać ten problem, czy istnieje inny sposób na odwrócenie pliku audio?

+0

Witam @SamRowley Czy osiągasz swój cel za pomocą opisanego algorytmu? Skopiowałem pierwszy 44-bajtowy nagłówek dokładnie z oryginalnego na odwrócony plik audio i nie mogłem odtwarzać dźwięku wav? Używam Sox i Reverse Audio i sprawdzam, czy 44-bajtowy nagłówek nie jest dokładnie taki? Proszę, jeśli mógłbyś mi pomóc z jakąkolwiek radą, doceniam to. –

Odpowiedz

5

Typowy plik WAV składa się z 44-bajtowego nagłówka, po którym następują rzeczywiste wartości próbek. Rozmiar "ramki" zależy od właściwości pliku WAV: plik stereofoniczny i 16 bitów na próbkę będzie miał 4-bajtowy rozmiar klatki (dwa bajty dla lewej próbki i dwa bajty dla prawej próbki).).

W kodzie należałoby utworzyć drugi plik WAV, tworząc tablicę bajtów o takim samym rozmiarze jak oryginał. Kopiujesz 44-bajtowy nagłówek z oryginału do kopii, a następnie powtarzasz oryginalne klatki zaczynając od ostatniego i przesuwając je do pierwszego. Kopiujesz każdą ramkę w odwrotnym miejscu w tablicy kopiowania (tzn. Ostatnia oryginalna ramka jest kopiowana do tablicy kopii zaraz po nagłówku, druga do ostatniej ramki jest kopiowana po pierwszej klatce itp.). Następnie po prostu odtwarzaj odwrócony plik.

W tym celu nie potrzebujesz biblioteki javax.sound - wystarczy, że będziesz w stanie skopiować i zmanipulować bajty. FYI, nie wszystkie pliki WAV są "kanoniczne" w ten sposób (kanoniczny oznacza 44-bajtowy nagłówek plus przykładowe wartości i nic więcej). Format WAV jest w rzeczywistości formatem RIFF, co oznacza, że ​​teoretycznie konieczne jest bardziej złożone wyodrębnianie wartości próbek. W praktyce (szczególnie jeśli sam tworzysz pliki WAV), zazwyczaj możesz uciec z prostszym podejściem, jak to opisałem tutaj.

UWAGA: jeśli twoje dźwięki są plikami MP3, cofanie jest bardziej skomplikowanym zadaniem, ponieważ dane próbki nie są przechowywane jako próbki w pliku MP3. Jeśli korzystasz z plików MP3, jednym ze sposobów odwrócenia ich jest przekonwertowanie ich na format WAV, a następnie odwrócenie pliku WAV.

+0

Tworzę plik WAV przechwytując dźwięk z mikrofonu za pomocą MediaRecorder, więc zgaduję, że w ten sposób byłoby dobrze? Jak chciałbym uzyskać zapisanie pliku z sdcard w tablicy bajtów i skopiowanie 44-bitowego nagłówka? Dziękuję za pierwszą odpowiedź, która była jak dotąd pomocna i rozumiem tę koncepcję. – SamRowley

+1

Tak, plik WAV otrzymany z MediaRecorder jest najprawdopodobniej kanoniczny, więc powinieneś być w porządku. Oto link z dodatkowym kodem, który powinien pomóc Ci zrobić to, co musisz zrobić: http://www.dreamincode.net/forums/topic/171550-converting-short-array-to-byte-array-using-java- na urządzeniu z Androidem / – MusiGenesis