2011-01-23 20 views
20

Próbuję użyć klasy AudioRecord do nagrania pliku WAV. Problem polega na tym, że dostarcza on tylko surowe dane PCM, a jeśli zapisuję je w pliku, nie ma informacji o nagłówku, więc nie będzie on odtwarzany w żadnym odtwarzaczu multimedialnym. Jak mogę utworzyć plik WAV z tych nieprzetworzonych danych?Tworzenie pliku WAV z nieprzetworzonych danych PCM przy użyciu zestawu Android SDK

Czy istnieje inny sposób rejestrowania dźwięku w systemie Android w pliku WAV (lub alternatywnie w formacie MP3)?

Aha, i wiem, że MediaRecorder może być używany, ponieważ nie obsługuje formatu WAV lub MP3.

+0

Oh ... Próbowałem odczytać surowe dane PCM w Android ... mógłbyś pisać kod, którego używasz? – Atmocreations

Odpowiedz

13

OK, mam to zorientowali się. Ten post był kluczowym czynnikiem zwiększającym mnie: http://computermusicblog.com/blog/2008/08/29/reading-and-writing-wav-files-in-java

Zasadniczo, użyłem ByteArrayOutputStream napisać nieprzetworzone dane z PCM, która następnie pozwala mi uzyskać tablicę bajtów, a jego rozmiar, gdy proces odbywa AudioRecord. Mogę następnie użyć tych danych w połączeniu z ustawieniami SampleRate, BitRate i Stereo/Mono, aby utworzyć nagłówek WAV zgodnie z powyższym łączem. Wynikowy plik działa doskonale!

+1

możesz pokazać przykładowy kod, w jaki sposób to osiągnąłeś. Mam podobny wymóg. –

+1

Czy możesz mi powiedzieć, w jaki sposób użyłeś pliku wavIO w swoim kodzie? Istnieją dwie główne metody, przeczytaj i zapisz. Nagrywam audio na Androida używając klasy AudioRecord. Piszę bajt danych po bajcie. Czy możesz pomóc, ponieważ moje audio nie jest prawidłowo nagrywane? – Scorpion

+4

Twój link wygasł. Proszę podać fragment kodu lub link ... – WonderSoftwares

0

Sprawdź MediaRecorder.setOutputFormat(), możesz ustawić różne formaty pojemników do nagrywania; istnieje MediaRecorder.OutputFormat.MPEG_4 i MediaRecorder.OutputFormat.THREE_GPP; jedyny dopuszczalny format wzdłuż RAW to setAudioEncoder (MediaRecorder.AudioEncoder.AMR_NB);

Przepraszamy, ale MP3 nie jest dostępny. Naprawdę potrzebujesz mp3 do nagrywania? WAV w przeciwieństwie do MP3 to kontener, a nie w formacie; WAV może być dowolnym rodzajem formatu kodowania.

Zawsze możesz poprzedzić nagłówek WAV RIFF przed swoimi nieprzetworzonymi danymi pcm (o ile dokładnie znasz format). Sprawdź tutaj, jak to musi wyglądać: http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html

+0

Zdecydowanie potrzebuję pliku wyjściowego albo WAV (zakodowany PCM), albo MP3. Usługa, do której jest przesyłany, wymaga tego. Tak więc, o ile widzę, nie mogę korzystać z MediaRecorder. Jestem również – user496854

+0

Zdecydowanie potrzebuję, aby plik wyjściowy był albo WAV (zakodowany PCM), albo MP3. Usługa, do której jest przesyłany, wymaga tego. Tak więc, o ile widzę, nie mogę korzystać z MediaRecorder. Jestem też dość zły na wszystkie rzeczy na niskim poziomie, więc nie wiem, jak dobrze bym sam się stworzył. Czy nie ma pakietów java, które mają taką możliwość? – user496854

+0

Tak naprawdę znalazłem to: http://computermusicblog.com/blog/2008/08/29/reading-andwriting-wav-files-in-java, co znacznie ułatwiło pracę. Ale nie jestem pewien, jak uzyskać rozmiar porcji danych dla bajtu 40. Napisałem surowe dane PCM do pliku, więc czy byłby to rozmiar tego pliku? – user496854

-2

Możesz użyć mediarecord klasa

+3

Dlaczego? nie obsługuje formatu WAV ani MP3 – user496854