2009-10-02 10 views
6

Mam bardzo duży plik WAV, około 100 MB. Chciałbym użyć Javy do odczytania tego pliku WAV i podzielić go na mniejsze porcje co 2 sekundy dźwięku.Jak podzielić plik WAV na mniejsze porcje używając Java?

Czy można to zrobić w Javie? Czy mógłbyś zaproponować mi API, dzięki któremu mogę go osiągnąć?

Dzięki z góry, Snehal

+0

Witam. Czytam plik .wav, a także chcę podzielić go na mniejsze części i przekazać dalej, aby dowiedzieć się częstotliwości w każdym kawałku. Jestem całkiem nowy w Java Sound, więc możesz mi w tym pomóc. Załączam część mojego kodu w następnym komentarzu. Z góry dziękuję – Learner

+0

final float [] floatBuffer = DTMF.generateDTMFTone (character); String read = "D: /RecordAudio31.wav"; InputStream in = new FileInputStream (odczyt); // tworzenie strumienia audycji z sygnału wejściowego AudioStream audioStream = new AudioStream (in); końcowy format AudioFormat = nowy format AudioFormat (44100, 16, 1, prawda, fałsz); final AudioInputStream inputStream = new AudioInputStream (audioStream, format, floatBuffer.length); final Dyspozytor AudioDispatcher = nowy AudioDispatcher (inputStream, stepSize, 0); dispatcher.addAudioProcessor (goertzelAudioProcessor); new Thread (dispatcher) .start(); – Learner

+0

Rozgryzłem to. W każdym razie dzięki. – Learner

Odpowiedz

4

Można użyć AudioInputStream i jego AudioFileFormat człon (która zawiera instancję AudioFormat), aby wiedzieć, co napisać (format, częstotliwość próbkowania), można użyć AudioSystem ją napisać.

Na podstawie częstotliwości próbkowania formatu można dowiedzieć się, ile bajtów audio wynosi 2 sekundy, i przejść do pętli odczytywania wielu bajtów z AudioInputStream, zapisując je do nowego pliku.

+0

Dzięki AudioFileFormat mogłem dowiedzieć się, że częstotliwość próbkowania wynosi 8000. Jaka jest zależność między częstotliwością próbkowania a liczbą bajtów, które zajmuje? Jestem totalną nowicjuszką w obsłudze Audio, przepraszam za moją ignorancję. – Snehal

+2

Oprócz częstotliwości próbkowania (f) potrzebne są również bity na próbkę (bps) i liczba kanałów (n), również udostępniana przez AudioFormat. Przez jedną sekundę dźwięku potrzebujesz bps * n * f/8 bajtów. – eljenso

+0

Dzięki Elijenso. Mógłbym znaleźć liczbę bajtów wymaganych przez 2 sekundy dźwięku. Teraz próbuję zapisać przeczytane bajty za pomocą metody zapisu AudioSystem. Jednak jednym z argumentów wejściowych jest AudioInputStream. Nie mogę utworzyć tego obiektu na podstawie przeczytanych bajtów. Wszelkie wskazówki byłyby naprawdę pomocne. Dzięki! – Snehal

0

Jeśli nie zależy Ci na długowieczności swojego kodu, to Quicktime For Java to dobry wybór dla mediów. Działa na Windows i Mac i będzie czytać i pisać praktycznie każdy format audio (i wideo). Minusem jest to, że Apple nie obsługuje go od lat, więc dopóki to nadal działa, inwestujesz w technologię umierania.

1

Można również wyszukać specification for a wav file, który jest naprawdę prosty i prosty. A potem plik binarny odczytuje plik i zapisuje go ponownie w mniejszych bitach.

Uważam, że to lepsze doświadczenie edukacyjne, aby robić to w ten sposób, zamiast polegać na bibliotekach.

+1

Należy również wiedzieć, jak sformatować nagłówek dla mniejszych porcji, biorąc pod uwagę format większego fragmentu. Nie jest to "proste" zadanie, ale też nie jest zbyt trudne.Zdecydowanie trzeba zajrzeć do specyfikacji. –

Powiązane problemy