2017-09-13 2 views
0

저는 Java에서 음악 시각화 작업을하고 있지만 문제가 생겨서 문제가 발생했습니다. 내 프로그램은 오디오를 성공적으로 읽었으며 수학 연산/드로잉 함수를 알아 냈습니다.하지만 내 프로그램에서 비주얼을 그리는 등 내 메서드를 설정하는 방법을 알아 내려고 오디오가 재생됩니다. 나는 '오디오 파일 분석 java

byte[] data = new byte[EXT_BUFF_SIZE]; 
int bytesRead =0; 
while(bytesRead!= -1){ 
    try{ 
     bytesRead = ais.read(data,0,data.length); 
    }catch(IOException e){e.printStackTrace();} 
    if(bytesRead>0){ 
     int bytesWritten = line.write(data,0,bytesRead); 
    } 
} 
line.drain(); 
line.close(); 

:

은 (라인이 생성되었으며, AudioInputSystem가, AIS로 저장, getAudioInputStream의를 가진 파일에 호출 된 후) 오디오에서 읽을 내 코드의 조각이다 다른 기능에 대한 호출을 잠시 동안 다른 장소에서 시도하거나 아무런 노력을하지 않았습니다. 나는 line.write() 전에 그것을 넣는 것이 효과가있을 것이라고 기대하고 있었지만 그렇게하지는 않았다.

유일한 해결책은 파일 대신 전체 파일 대신 읽기 및 쓰기 함수를 호출하는 것이지만 재생시 불연속성이 생길 까봐 두렵습니다. 숨어있는 많은 사람들이 여기에 게시 한 것은 이번이 처음입니다. 제 질문에 대해 충분히 자세히 설명해 주셨습니다. 그렇지 않다면 마지막으로 한 번 시도해 봅니다. 오디오 파일을 읽는 프로그램을 구성한 다음 파일에서 여러 가지 산술 연산을 수행하는 방법과 동시에 두 가지가 동시에 발생하는 것처럼 보일 수 있습니다 (또는 둘 다 스레드를 사용하여 동시에 발생할 수 있습니다). 스케줄링 또는 내가 알아낼 수없는 것)? 모든 도움을 미리 보내 주셔서 감사합니다!

+0

"불확실성이 생길 까봐 두렵습니다 ..."실제 문제가있을 때 두려움을 극복하고 돌아 오십시오. – Kayaman

+0

"... 라인을 만든 후 ..."'line'은 "라인 레벨 오디오 출력 장치"를 나타내는 변수의 이름입니까? – geneSummons

+0

죄송합니다. 더 많은 코드가 포함되어 있어야합니다. Line은 파일에서 데이터를 읽고 쓰는 SourceDataLine입니다. 내가 이해할 수없는 것은 SourceDataLine이 ** 및 ** 쓰기를 읽는 방법이며 재생이 시작되는 곳이 명확하지 않습니다. Kayaman, 나는 단순히 버그를 고치는 것이 아니라 기능이 어떻게 작동해야하는지에 관해 질문하는 사람들을 많이 읽었습니다. 당신의 시간을 낭비해서 죄송합니다. – Scott

답변

0

오디오 드라이버가 오디오 스트림을 처리하는 것과 같은 방식으로 오디오 파일을 특정 크기의 "청크"로 처리하고 재생할 수 있어야합니다. (청크 당 128, 256, 512 등의 샘플) 청크 당 더 많은 샘플은 오디오 플레이어가 오디오 샘플의 다음 청크를 준비하기 전에 청크 당 더 많은 "시각화 처리"시간을 의미합니다. 덩어리 크기를 실험하여 충분한 시각화 처리 시간과 글리치 프리 재생 간의 적절한 균형을 찾을 수 있습니다.