일반적인 WAV 파일은 44 바이트 헤더와 실제 샘플 값으로 구성됩니다. "프레임"의 크기는 WAV 파일의 속성에 따라 다릅니다. 스테레오 파일이며 샘플 당 16 비트는 4 바이트 프레임 크기입니다 (왼쪽 샘플의 경우 2 바이트, 올바른 샘플의 경우 2 바이트)).
그래서 코드에서 원본과 동일한 전체 크기의 바이트 배열을 만들어 두 번째 WAV 파일을 만듭니다. 원본의 44 바이트 헤더를 복사본에 복사 한 다음 마지막 프레임부터 차례대로 첫 번째 프레임까지 반복합니다. 각 프레임을 복사 배열의 반대 위치에 복사합니다. 즉, 마지막 원본 프레임이 복사 배열의 머리글 바로 뒤에 복사되고 두 번째 프레임은 첫 번째 프레임 다음에 복사됩니다. 그런 다음 반전 된 파일을 재생하십시오.
이렇게하려면 javax.sound 라이브러리가 필요하지 않습니다. 단지 바이트를 복사하고 조작 할 수 있어야합니다. 참고로, 모든 WAV 파일이 이와 같이 "정식"인 것은 아닙니다 (정식 적으로 44 바이트 헤더와 샘플 값 외에 다른 것은 없음). WAV 형식은 실제로 RIFF 형식이므로 이론적으로 샘플 값을보다 복잡하게 추출해야합니다. 실제로 (특히 WAV 파일을 직접 만드는 경우) 여기에서 설명한 것처럼 대개 훨씬 간단한 방법으로 벗어날 수 있습니다.
참고 : 사운드가 MP3 파일 인 경우 샘플 데이터가 MP3 파일의 샘플로 저장되지 않으므로 되돌리기가 더 복잡한 작업입니다. MP3를 사용하는 경우이를 반대로하는 한 가지 방법은 WAV로 변환 한 다음 WAV 파일을 뒤집는 것입니다.
안녕하세요 @ SamRowley 설명 된 알고리즘으로 목표를 달성하고 있습니까? 원래의 44 바이트 헤더를 원래의 오디오 파일과 똑같이 복사하고, WAV 오디오를 재생할 수 없습니까? sox와 reverse audio를 사용하고 44 바이트 헤더가 정확히 일치하지 않는지 확인하십시오. 제발 조언을 해 주시면 감사하겠습니다. –