2017-07-06 8 views
0

je dois convertir le fichier wav de FORMAT 1 à FORMAT 2J'ai besoin de convertir le fichier audio de μ-loi sur PCM

Format 1: μ-loi, 8000Hz, 64 kbps, mono

FORMAT 2: Container WAV PCM encodage Taux 16K Sample Format 16 bits canaux mono

Voici le code snippet:

File file = new File("audio_before_conversion.wav"); 
AudioFormat audioFormat = new AudioFormat(16000, 16, 1, true , true); 
AudioInputStream audioInputStream1 = new AudioInputStream(
    new FileInputStream(file), audioFormat, numFrames); 
AudioSystem.write(audioInputStream1, Type.WAVE, 
    new File("audio_after_conversion.wav")); 

Problème: Mais, cela ne fonctionne pas. Il fait du bruit et réduit aussi la longueur de mon fichier audio.

Edit 1: mu-droit à u-loi

+0

est votre format d'entrée μ-loi? Je n'ai pas entendu parler de Mu-Laq –

+0

@scott Oui, μ-law. –

+0

http://www.tagtraum.com/ffsampledsp/ peut vous y aider. – hendrik

Répondre

0

Vous devez utiliser le AudioSystem et diviser la conversion de format et de l'écriture audio en deux étapes différentes:

final File file = new File("audio_before_conversion.wav"); 
// open the audio stream 
final AudioInputStream pcmStream8k = AudioSystem.getAudioInputStream(file); 
// specify target format 
final AudioFormat targetFormat = new AudioFormat(16000, 16, 1, true , true); 
// this converts your audio stream 
final AudioInputStream pcmStream16k = AudioSystem.getAudioInputStream(targetFormat, pcmStream8k); 
// this writes the audio stream 
AudioSystem.write(pcmStream16k, AudioFileFormat.Type.WAVE, new File("audio_after_conversion.wav")); 
1

code suivant a fonctionné pour moi -

File sourceFile = new File("<Source_Path>.wav"); 

     File targetFile = new File("<Destination_Path>.wav"); 

     AudioInputStream sourceAudioInputStream = AudioSystem.getAudioInputStream(sourceFile); 


     AudioInputStream targetAudioInputStream=AudioSystem.getAudioInputStream(AudioFormat.Encoding.PCM_SIGNED, sourceAudioInputStream); 
     System.out.println("Sample Rate1 "+targetAudioInputStream.getFormat().getFrameRate()); 
    AudioFormat targetFormat = new AudioFormat(new AudioFormat.Encoding("PCM_SIGNED"), 16000, 16, 1, 2, 8000, false); 



     AudioInputStream targetAudioInputStream1 = AudioSystem.getAudioInputStream(targetFormat, targetAudioInputStream); 
     System.out.println("Sample Rate "+targetAudioInputStream1.getFormat().getFrameRate()); 

     try { 
      AudioSystem.write(targetAudioInputStream1, AudioFileFormat.Type.WAVE, targetFile); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     }