2013-03-14 12 views
5

Czy można ponownie próbkować plik .wav z 22050 khz na 44100 khz w języku Java bez korzystania z biblioteki stron trzecich?Plik dźwiękowy Java .poprawny .wav bez biblioteki osób trzecich.

Może za pomocą AudioInputStream?

edytuj: ponieważ wydaje się, że bez biblioteki osób trzecich nie jest łatwo możliwe, jakie biblioteki stron trzecich istnieją, aby dokonać resamplingu?

Odpowiedz

0

Nie ... Możesz spróbować napisać nowy plik WAV z nowymi próbkami obliczonymi jako średnia z sąsiednich próbek. Surowe, ale może będzie wystarczające dla twoich celów.

Jeśli akceptujesz biblioteki stron trzecich, JSSRC wydaje się być dobrym rozwiązaniem. Jednak musisz samodzielnie zbudować .jar.

1

Niezależnie od tego, czy chcesz poprawić jakość dźwięku, czy nie, musisz utworzyć nowy plik .wav z próbkami z oryginału. Jeśli chcesz zachować jakość oryginalnego pliku, możesz napisać każdą próbkę dwa razy.

Jednak istnieje dość prosty algorytm "poprawy" jakości: przeczytaj trzy kolejne próbki, nazwijmy je teraz a, b i c. Niech z będzie dodatkową próbką wyjściową między aib.

Niech z = (a + b)/2. Teraz zamień b na (a + 2b + c)/4. Pamiętaj, aby obliczyć z przy użyciu starej wartości b! Teraz napisz tylko a, z i nowy b na wyjściu.

Przeczytaj jeszcze jedną próbkę, nazwijmy ją d. Oblicz następną dodatkową próbkę wyjściową, y, używając (b + c)/2. Użyj starej wartości b. Przelicz c, niech będzie równe (b + 2c + d)/4. Napisz nową wartość b i y do wyjścia.

Możesz odgadnąć domysły, przeczytać i powtórzyć! EOF. Pamiętaj, aby obliczyć przy użyciu starych wartości, ale wyprowadzić nowe wartości.

4

Ponieważ jesteś teraz przyjmując bibliotek innych podmiotów, tutaj jest moja propozycja

Istnieje wiele bibliotek zewnętrznych, który pozwala na ponowne próbkowanie audio wav, jak dla mnie, w moim przypadku (I ostatnio użyta) najbardziej przyjazną dla użytkownika biblioteką stron trzecich jest Jave wszystko, co musisz zrobić, to dołączyć słoik. nie bardziej uciążliwe jak instalacja innych bibliotek

Jave ma metodę nazwie

public void setSamplingRate(java.lang.Integer bitRate) 

, który pozwala na ponowne próbkowanie dźwięku z danego bitrate.

1

Jest to możliwe, szybkie i brudne. Po prostu potrzebuje trochę diging w API javax.sound:

import java.io.File; 

import javax.sound.sampled.AudioFileFormat.Type; 
import javax.sound.sampled.AudioFormat; 
import javax.sound.sampled.AudioInputStream; 
import javax.sound.sampled.AudioSystem; 
import com.sun.media.sound.WaveFileReader; 
import com.sun.media.sound.WaveFileWriter; 

public class Resample { 

public static void main(String[] argv) { 
    try { 
     File wavFile = new File("C:\\Temp\\test.wav"); 
     File dstFile = new File("C:\\Temp\\test_half.wav"); 
     WaveFileReader reader = new WaveFileReader(); 
     AudioInputStream audioIn = reader.getAudioInputStream(wavFile); 
     AudioFormat srcFormat = audioIn.getFormat(); 

     AudioFormat dstFormat = new AudioFormat(srcFormat.getEncoding(), 
       srcFormat.getSampleRate()/2, 
       srcFormat.getSampleSizeInBits(), 
       srcFormat.getChannels(), 
       srcFormat.getFrameSize(), 
       srcFormat.getFrameRate()/2, 
       srcFormat.isBigEndian()); 

     AudioInputStream convertedIn = AudioSystem.getAudioInputStream(dstFormat, audioIn); 

     WaveFileWriter writer = new WaveFileWriter(); 
     writer.write(convertedIn, Type.WAVE, dstFile); 
    } catch (Exception e) { 
     throw new RuntimeException(e); 
    } 
} 

} 

Ten krótki Hacked przykład utworzy kopię z halved częstotliwością próbkowania pliku określonego w źródle. Myślę, że to całkiem wymowne.

+3

Pakiet com.sun nie jest częścią oficjalnego API Javy. Ten program nie może działać na różnych platformach i wersjach. Zobacz http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html –

0

Tak, działa AudioInputstream. Można złapać jakiś przykładowy kod tutaj:

http://www.jsresources.org/examples/SampleRateConverter.html

Nie martw się o Tritonius, że informacja nie jest już istotne dla nowszych wersji Javy.Możesz próbować ponownie z natywną Javą, bez żadnych bibliotek zewnętrznych, dopóki trzymasz się plików * .wav.

Dodatkowo na większość pytań związanych z dźwiękiem w języku Java udzielono odpowiedzi w tym FAQ. Może nie być aktualny, ale większość informacji jest nadal aktualna.

http://www.jsresources.org/faq.html

Powiązane problemy