2013-03-14 19 views
5

E 'possibile ricampionare un file .wav da 22050 khz a 44100 khz in java senza l'uso di alcuna libreria di terze parti?Java resample .wav soundfile senza libreria di terze parti

Forse usando AudioInputStream?

modifica: poiché sembra che senza una libreria di terze parti non è possibile facilmente, quali librerie di terze parti esistono per eseguire un ricampionamento?

risposta

0

No ... È possibile provare a scrivere un nuovo file wav con nuovi campioni calcolati come media da campioni adiacenti. Grezzo, ma forse sarà sufficiente per i tuoi scopi.

Se si accettano librerie di terze parti, JSSRC sembra una buona opzione. Tuttavia, devi costruire il .jar da solo.

1

Se si desidera migliorare la qualità dell'audio o no, in entrambi i casi è necessario creare un nuovo file .wav con campioni da quello originale. Se si desidera mantenere la qualità del file originale, è possibile scrivere ogni campione due volte.

Tuttavia esiste un algoritmo piuttosto semplice per "migliorare" la qualità: leggere tre campioni consecutivi, chiamiamoli a, bec, per ora. Sia z un campione di uscita extra tra a e b.

Sia z = (a + b)/2. Adesso sostituisci b con (a + 2b + c)/4. Ricorda di calcolare z usando il vecchio valore di b! Adesso scrivi solo a, z e il nuovo b all'output.

Leggi un altro esempio, chiamiamolo d. Calcola il successivo campione in uscita, y, usando (b + c)/2. Usa il vecchio valore di b. Ricalcola c, lasciala uguale a (b + 2c + d)/4. Scrivi il nuovo valore di b e l'output.

È possibile calcolare l'ipotesi, leggere e ripetere mentre! EOF. Ricorda di calcolare utilizzando valori vecchi, ma di generare nuovi valori.

4

Dal momento che Sono aperte le librerie di terze parti, ecco il mio suggerimento

Ci sono un sacco di librerie di terze parti che consente di ricampionare un file wav audio, per me, nel mio caso (E io abbiamo usato di recente) la libreria di terze parti più user friendly è Jave tutto quello che devi fare è includere il barattolo. non più noioso di installazione come altre biblioteche

Jave ha un metodo chiamato

public void setSamplingRate(java.lang.Integer bitRate) 

che consente di ricampionare l'audio con il dato bitrate.

1

È possibile, veloce e sporco. Solo bisogno di diging nell'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); 
    } 
} 

} 

Questo breve esempio hacked creerà una copia con frequenza di campionamento dimezzato di file specificato nel sorgente. Penso che sia abbastanza auto esplicativo.

+3

Il pacchetto com.sun non fa parte dell'API Java ufficiale. Questo programma non è garantito per funzionare su varie piattaforme e versioni. Vedi http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html –

0

Sì, utilizzando AudioInputstream funziona. Si può prendere un po 'di codice di esempio qui:

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

Non ti preoccupare Tritonius, che l'informazione non è più rilevante per le nuove versioni di Java.È possibile ricampionare con Java nativo, senza alcuna libreria di terze parti, purché si attenga ai file * .wav.

Inoltre, la maggior parte delle domande relative all'audio in Java viene fornita da queste domande frequenti. Potrebbe non essere aggiornato ma la maggior parte delle informazioni è ancora pertinente.

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

Problemi correlati