2013-03-14 6 views
5

Ist es möglich, eine .wav Datei von 22050 Khz bis 44100 Khz in Java ohne die Verwendung von Drittanbieterbibliothek resample?Java resample .wav soundfile ohne Third-Party-Bibliothek

Vielleicht mit AudioInputStream?

edit: da es scheint, dass es ohne eine Third-Party-Bibliothek nicht leicht möglich ist, welche Drittanbieter-Bibliotheken existieren, um ein Resampling durchzuführen?

Antwort

0

Nein ... Sie können versuchen, neue wav-Datei mit neuen Proben zu schreiben, die als Durchschnitt aus benachbarten Proben berechnet werden. Grob, aber vielleicht wird es für Ihre Zwecke ausreichen.

Wenn Sie Bibliotheken von Drittanbietern akzeptieren, scheint JSSRC eine gute Option zu sein. Sie müssen das .jar jedoch selbst erstellen.

1

Ob Sie die Audioqualität verbessern möchten oder nicht, Sie müssen auf jeden Fall eine neue .wav-Datei mit Samples aus dem Original erstellen. Wenn Sie die Qualität der Originaldatei beibehalten möchten, können Sie jede Probe zweimal schreiben.

Allerdings gibt es einen ziemlich einfachen Algorithmus zur "Verbesserung" der Qualität: Lesen Sie drei aufeinanderfolgende Samples, nennen wir sie zunächst a, b und c. Sei z ein Extra-Output-Sample zwischen a und b.

Sei z = (a + b)/2. Ersetzen Sie nun b durch (a + 2b + c)/4. Denken Sie daran, z mit dem alten Wert von b zu berechnen! Jetzt schreibe nur a, z und das neue b an den Ausgang.

Lesen Sie ein weiteres Beispiel, nennen wir es d. Berechnen Sie das nächste zusätzliche Ausgabe-Sample y mit (b + c)/2. Verwenden Sie den alten Wert von b. Berechne c neu, lass es gleich (b + 2c + d)/4 sein. Schreibe den neuen Wert von b und y in die Ausgabe.

Sie können herausfinden, raten, lesen und wiederholen Sie während! EOF. Denken Sie daran, mit alten Werten zu rechnen, aber neue Werte auszugeben.

4

Seit akzeptieren Sie jetzt Third Party-Bibliotheken, hier ist mein Vorschlag

Es gibt eine Menge von Bibliotheken von Drittanbietern, die Ihnen eine Audio-WAV-Datei, für mich, in meinem Fall sampeln erlaubt (und ich habe vor kurzem verwendet) die benutzerfreundlichste Drittanbieter-Bibliothek ist alles, was Sie tun müssen, ist das Glas. nicht mehr langweilige Installation wie andere Bibliotheken

Jave hat eine Methode

public void setSamplingRate(java.lang.Integer bitRate) 

benannt, die Sie mit der gegebenen Bitrate resamplen Audio ermöglicht.

1

Es ist möglich, schnell und schmutzig. Nur braucht einigen Diging in der javax.sound API:

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); 
    } 
} 

} 

Dieses kurzen gehackte Beispiel wird eine Kopie mit halbierte Abtastrate der Datei in der angegebenen Quelle erstellen. Ich denke, es ist ziemlich selbsterklärend.

+3

Paket com.sun ist kein Teil des offiziellen Java-API. Es ist nicht garantiert, dass dieses Programm auf verschiedenen Plattformen und Versionen funktioniert. Siehe http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html –

0

Ja, mit AudioInputstream funktioniert. Sie können hier einige Beispiel-Code fangen:

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

Sie nicht über Tritonius Sorge, dass Informationen nicht mehr auf neuere Versionen von Java relevant ist.Sie können mit nativem Java ohne Bibliotheken von Drittanbietern resampeln, solange Sie sich an * .wav-Dateien halten.

Darüber hinaus werden die meisten audiobezogenen Fragen in Java durch diese FAQ beantwortet. Es ist möglicherweise nicht auf dem neuesten Stand, aber die meisten Informationen sind immer noch relevant.

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