2009-03-17 24 views
13

¿Cuál es la forma más sencilla de concatenar dos archivos WAV en Java 1.6? (Igual frecuencia y todo, nada de lujos.)Unir dos archivos WAV de Java?

(Esto es probablemente taaan simple, pero mi Google-fu parece débil sobre este tema en la actualidad.)

+0

Entiendo lo que es Google-fu +1 :) –

Respuesta

32

Aquí está el código de barebones:

import java.io.File; 
import java.io.IOException; 
import java.io.SequenceInputStream; 
import javax.sound.sampled.AudioFileFormat; 
import javax.sound.sampled.AudioInputStream; 
import javax.sound.sampled.AudioSystem; 

public class WavAppender { 
    public static void main(String[] args) { 
     String wavFile1 = "D:\\wav1.wav"; 
     String wavFile2 = "D:\\wav2.wav"; 

     try { 
      AudioInputStream clip1 = AudioSystem.getAudioInputStream(new File(wavFile1)); 
      AudioInputStream clip2 = AudioSystem.getAudioInputStream(new File(wavFile2)); 

      AudioInputStream appendedFiles = 
          new AudioInputStream(
           new SequenceInputStream(clip1, clip2),  
           clip1.getFormat(), 
           clip1.getFrameLength() + clip2.getFrameLength()); 

      AudioSystem.write(appendedFiles, 
          AudioFileFormat.Type.WAVE, 
          new File("D:\\wavAppended.wav")); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

¡Gracias! Tenía que haber una manera simple. – krosenvold

+1

Esto ya no funciona porque Android ya no es compatible con el paquete javax.sound.sampled. *. ¿Hay alguna otra manera de hacerlo? –

+18

Querida Alex, la pregunta es Acerca de Java no para Android – dhams

4

La cabecera WAV debe no ser demasiado difícil de analizar, y si Leí this header description correctamente, puede simplemente quitar los primeros 44 bytes del segundo WAV y simplemente agregar los bytes al primero. Después de eso, debería, por supuesto, cambiar algunos de los campos de encabezado del primer WAV para que contengan la nueva longitud correcta.

+1

Suponiendo que son de la misma velocidad de bits, frecuencia de muestreo y tienen la misma cantidad de canales. – dreamlax

+0

Por supuesto, pero krosenvold dijo que sí. – schnaader

+0

¿Pero realmente tengo que hacer esto yo mismo? Debe haber una solución más simple? – krosenvold

4

Encontré this (AudioConcat) a través del enlace "Aplicaciones de código &" en here.

1

Su reto, aunque se produce si los dos archivos WAV no tienen el mismo formato exacto en la cabecera de las ondas.

Si los formatos de onda en los dos archivos no son los mismos, tendrá que encontrar una forma de transformarlos para que coincidan.

Esto puede implicar un transcodificador MP3 u otros tipos de transcodificación (si una de ellas está codificada con un códec MP3).

+0

Bueno, supongo que tengo suerte de no tener que considerar esto. – krosenvold