2009-06-25 9 views
3

오디오 데이터를 타사 시스템에 "제한된 설명서의"16 비트 정수 배열로 전달해야합니다.Java - 오디오의 바이트 배열을 정수 배열로 변환

이것은 지금까지 시도한 바 있습니다 (시스템이 결과 bytes.dat 파일에서이 파일을 읽습니다).

AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("c:\\all.wav")); 
    int numBytes = inputStream.available(); 
    byte[] buffer = new byte[numBytes]; 
    inputStream.read(buffer, 0, numBytes); 

    BufferedWriter fileOut = new BufferedWriter(new FileWriter(new File("c:\\temp\\bytes.dat"))); 

    ByteBuffer bb = ByteBuffer.wrap(buffer); 

    while (bb.remaining() > 1) { 
     short current = bb.getShort(); 
     fileOut.write(String.valueOf(current)); 
     fileOut.newLine(); 
    } 

제 3 자 시스템에서 인식하지 못하고 원본 오디오로 파일을 Audacity로 가져올 수 없습니다.

내가 잘못하고있는 것이 분명하거나 더 좋은 방법이 있습니까?

추가 정보 : 웨이브 파일은 16 비트, 44100Hz, 모노입니다.

+0

이 타사 시스템에 대해 더 자세히 알 수 있습니까? – akarnokd

답변

2

편집 2 : 나는 AudioInputStream을 거의 사용하지 않지만 원시 데이터를 쓰는 방법은 다소 복잡한 것처럼 보입니다. 파일은 하나의 FileOutputStream.write() 호출로 오디오 바이트 배열을 쓸 수 있도록 일련의 후속 바이트입니다. WAV 파일은 리틀 엔디안 (?)으로 저장되는 반면 시스템은 빅 엔디 언 형식을 사용할 수 있습니다. 그러면 오디오가 재생되지만 매우 조용하게 재생 될 수 있습니다.

편집 3

코드 샘플을 제거.

오디오 바이트를 줄 바꿈으로 파일에 문자열로 쓰는 이유가 있습니까? 시스템에서 오디오 데이터가 문자열 형식이 아닌 바이너리 형식이어야한다고 생각합니다.

+0

도움 주셔서 감사합니다. 빅/리틀 엔디안에 대해 암시를 준 것을 받아 들였습니다. – William

+0

@ kd304 'AudioInputStream'의 읽기 메소드를 사용하여 바이트 배열에 바이트를 쓰고 나면 그 배열을 오디오로 다시 변환하거나 해당 바이트에서 오디오를 추출 할 수 있습니까? 배열? –

2

방금이 문제를 해결할 수있었습니다.

ByteBuffer를 만든 후에이 줄을 추가해야했습니다.

bb.order(ByteOrder.LITTLE_ENDIAN); 
관련 문제