2015-04-16 23 views
16

Desidero ottenere due file audio come input, quindi unirli in byte e salvarli come un singolo file.
In questo codice ho provato a farlo in Java e funziona bene, ma non so come farlo in Android.Come unire i due file audio in un singolo file audio in Android?

Come farlo in Android?

import java.io.File; 
import java.io.InputStream; 
import java.nio.file.Files; 
import java.nio.file.Paths; 
import java.nio.file.Path; 

import javax.sound.sampled.AudioFileFormat; 
import javax.sound.sampled.AudioInputStream; 
import javax.sound.sampled.AudioSystem; 

public class FileMixer { 
    public static void main(String[] args) 
    { 
     try 
     { 
    Path path1 = Paths.get("C:\\Srini\\Wav\\welcome.wav"); 
    Path path2 = Paths.get("C:\\Srini\\Wav\\goodbye.wav"); 
    String path3 ="C:\\Srini\\Wav\\srini12.wav"; 
    File Newfilepath=new File(path3); 

    byte[] byte1 = Files.readAllBytes(path1); 
    byte[] byte2 = Files.readAllBytes(path2); 
    byte[] out = new byte[byte1.length]; 
    for (int i=0; i<byte1.length; i++) 
    { 
     out[i] = (byte) ((byte1[i] + byte2[i]) >> 1); 
    } 

    InputStream byteArray = new ByteArrayInputStream(out); 
    AudioInputStream ais = AudioSystem.getAudioInputStream(byteArray); 
    AudioSystem.write(ais, AudioFileFormat.Type.WAVE,Newfilepath); 
    } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
     } 
} 

risposta

5
private void mergeSongs(File mergedFile,File...mp3Files){ 
     FileInputStream fisToFinal = null; 
     FileOutputStream fos = null; 
     try { 
      fos = new FileOutputStream(mergedFile); 
      fisToFinal = new FileInputStream(mergedFile); 
      for(File mp3File:mp3Files){ 
       if(!mp3File.exists()) 
        continue; 
       FileInputStream fisSong = new FileInputStream(mp3File); 
       SequenceInputStream sis = new SequenceInputStream(fisToFinal, fisSong); 
       byte[] buf = new byte[1024]; 
       try { 
        for (int readNum; (readNum = fisSong.read(buf)) != -1;) 
         fos.write(buf, 0, readNum); 
       } finally { 
        if(fisSong!=null){ 
         fisSong.close(); 
        } 
        if(sis!=null){ 
         sis.close(); 
        } 
       } 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     }finally{ 
      try { 
       if(fos!=null){ 
        fos.flush(); 
        fos.close(); 
       } 
       if(fisToFinal!=null){ 
        fisToFinal.close(); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
+1

E 'solo aumentare dimensioni ,,, ma quando l'ho aperto, solo il primo audio è in riproduzione. –

+0

stesso problema ... il secondo audio non viene riprodotto ...... –

+0

Che problema stai affrontando –

1

Per la combinazione di due file WAV utilizzare questo codice,

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:\\wavOne.wav"; 
     String wavFile2 = "D:\\wavTwo.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(); 
     } 
    } 
}