Java에서 X-Y 오실로스코프를 만들려고 노력 중입니다. jFlac에 대한 모든 설명서를 읽었습니다.이 라이브러리는 제 .flac 오디오 파일과 무료 무손실 오디오 코덱 설명서 here을 디코딩하는 데 사용하고 있습니다. 내가 겪고있는 문제에 대한 해답을 찾을 수없는 것 같습니다. 다음을 고려하십시오.Java : X-Y 그리드에서 .flac 오디오 파일의 왼쪽 및 오른쪽 채널을 플로팅합니다. (오실로 스코프)
public void processPCM(ByteData pcm) {
byte[] temp = pcm.getData();
line.write(temp, 0, pcm.getLen());
leftAndRight = new int[pcm.getData().length];
for(int i = 0; i < temp.length; i+=2){
leftAndRight[i/2] = (temp[i + 1]<<8) + (temp[i] & 0xff);
}
}
여기 내 파일의 샘플 데이터가 SourceDataLine에 저장되어 재생됩니다. 내가 데이터를 라인에 쓴 후, 왼쪽과 오른쪽 오디오를 별도의 정수 배열 변수 x []와 y []로 각각 변환하려고합니다.
이
는 STREAMINFO 파일에 대한 전 사용하고있다 : 상기 코드, PCM에서리틀 엔디안
PCM_SIGNED 44100.0 ㎐, 16 비트, 스테레오, 4 바이트/프레임, .getLen()은 16384의 값을 반환하고 pcm.getData()는 길이가 90,112 인 바이트 배열을 반환합니다.이 바이트 배열의 데이터입니다. 잘못 입력하지 않았다면 왼쪽 및 오른쪽 채널을 분리해야합니다. 그런 다음 정수 배열로 변환하십시오. 이것은 내가 성취하는 방법을 이해하지 못하는 부분입니다.
편집 : 위의 코드는 정수 배열로 바이트 배열을 얻는 방법이 될 수 있다고 생각했지만 위의 코드를 변경했지만 왼쪽 및 오른쪽 채널이 배열되는 방식은 여전히 우둔합니다.
고맙습니다. 매우 도움이됩니다. – kieve