2011-09-14 5 views
3

다음은 2 audio input streams의 오디오 데이터를 바이트 배열로 읽는 코드입니다.2 바이트 배열을 연결 한 다음 오디오 스트림으로 변환

import javax.sound.sampled.*; 
import java.io.*; 

class tester { 
public static void main(String args[]) throws IOException { 
try { 
    Clip clip_1 = AudioSystem.getClip(); 
    AudioInputStream ais_1 = AudioSystem.getAudioInputStream(new File("D:\\UnderTest\\wavtester_1.wav")); 
    clip_1.open(ais_1); 

    Clip clip_2 = AudioSystem.getClip(); 
    AudioInputStream ais_2 = AudioSystem.getAudioInputStream(new File("D:\\UnderTest\\wavtester_2.wav")); 
    clip_2.open(ais_2); 

    byte arr_1[] = new byte[ais_1.available()]; // not the right way ? 
    byte arr_2[] = new byte[ais_2.available()]; 
    ais_1.read(arr_1); 
    ais_2.read(arr_2); 


} catch(Exception exc) { 
    System.out.println(exc); 
} 
} 

} 위의 코드에서

난 바이트를위한 ais_1,ais_2array1,array2있다. 이 2 바이트 배열 (arr_1,arr_2)을 연결하고 다시 오디오 스트림으로 변환 할 수있는 방법이 있습니까? 2 개의 오디오 파일을 연결하고 싶습니다.

+1

그것은 완전한 답변하지 않기 때문에 나는이 코멘트를 만들고있어 : 나는()'반드시을 .available 돌아갑니다'생각하지 않는다 스트림에서 사용 가능한 총 바이트 수 대신 'ais_1.frameLength * ais_1.frameSize'를 사용하면됩니다. – MusiGenesis

답변

3

당신이 (내 의견을 참조) 손에 두 바이트 배열을 한 후에는이 같은 세 번째 배열로를 연결할 수 있습니다 :

byte[] arr_combined = new byte[arr_1.length + arr_2.length]; 
System.arraycopy(arr_1, 0, arr_combined, 0, arr_1.length); 
System.arraycopy(arr_2, 0, arr_combined, arr_1.length, arr_2.length); 

아직 완전한 답, 죄송합니다,이 배열 그냥 그대로 샘플 데이터 - 헤더 뒤에 데이터를 써야합니다. AudioSystem API를 사용하여이 작업을 수행 할 방법을 찾지 못했습니다.

편집 :이 시도 :

Join two WAV files from Java?

+0

바이트 배열 _ (있을 수 있음) _에서 오디오를 다시 가져올 방법이없는 경우 _ 어떻게 두 개의 오디오 파일을 연결할 수 있습니까? –

+0

@ MusiGenesis 네, 좋은 방법입니다! –

관련 문제