2011-01-12 6 views
5

나는이 애플 리케이션을 개발하는 매우 ealy 단계에 있지만 그것을보고 나는 이미 문제에 도달했습니다. 오디오 파일을 거꾸로 재생할 수 있어야합니다 (숨겨진 메시지를 공개하는 것이 좋습니다)). 나는 안드로이드에서 오디오 작업을 해본 경험이 없으며 이것이 가능한지 전혀 모른다. 안드로이드에서 오디오 파일을 리버스

나는 자바 ( Click Here For Question)

의 문제를 해결하지만 안드로이드가 지원하지 않는 javax.sound 라이브러리를 사용합니다 여기에 질문을 발견했다. 이 문제를 해결하기 위해이 라이브러리가 필요하거나 오디오 파일을 뒤집을 다른 방법이 있습니까?

+0

안녕하세요 @ SamRowley 설명 된 알고리즘으로 목표를 달성하고 있습니까? 원래의 44 바이트 헤더를 원래의 오디오 파일과 똑같이 복사하고, WAV 오디오를 재생할 수 없습니까? sox와 reverse audio를 사용하고 44 바이트 헤더가 정확히 일치하지 않는지 확인하십시오. 제발 조언을 해 주시면 감사하겠습니다. –

답변

5

일반적인 WAV 파일은 44 바이트 헤더와 실제 샘플 값으로 구성됩니다. "프레임"의 크기는 WAV 파일의 속성에 따라 다릅니다. 스테레오 파일이며 샘플 당 16 비트는 4 바이트 프레임 크기입니다 (왼쪽 샘플의 경우 2 바이트, 올바른 샘플의 경우 2 바이트)).

그래서 코드에서 원본과 동일한 전체 크기의 바이트 배열을 만들어 두 번째 WAV 파일을 만듭니다. 원본의 44 바이트 헤더를 복사본에 복사 한 다음 마지막 프레임부터 차례대로 첫 번째 프레임까지 반복합니다. 각 프레임을 복사 배열의 반대 위치에 복사합니다. 즉, 마지막 원본 프레임이 복사 배열의 머리글 바로 뒤에 복사되고 두 번째 프레임은 첫 번째 프레임 다음에 복사됩니다. 그런 다음 반전 된 파일을 재생하십시오.

이렇게하려면 javax.sound 라이브러리가 필요하지 않습니다. 단지 바이트를 복사하고 조작 할 수 있어야합니다. 참고로, 모든 WAV 파일이 이와 같이 "정식"인 것은 아닙니다 (정식 적으로 44 바이트 헤더와 샘플 값 외에 다른 것은 없음). WAV 형식은 실제로 RIFF 형식이므로 이론적으로 샘플 값을보다 복잡하게 추출해야합니다. 실제로 (특히 WAV 파일을 직접 만드는 경우) 여기에서 설명한 것처럼 대개 훨씬 간단한 방법으로 벗어날 수 있습니다.

참고 : 사운드가 MP3 파일 인 경우 샘플 데이터가 MP3 파일의 샘플로 저장되지 않으므로 되돌리기가 더 복잡한 작업입니다. MP3를 사용하는 경우이를 반대로하는 한 가지 방법은 WAV로 변환 한 다음 WAV 파일을 뒤집는 것입니다.

+0

MediaRecorder를 사용하여 마이크에서 오디오를 캡처하여 WAV 파일을 생성하고 있으므로이 방법이 괜찮을 것이라고 생각하십니까? 어떻게 sdcard에서 바이트 배열로 파일을 저장하고 44 비트 헤더를 복사할까요? 지금까지 도움이되어 주신 첫 번째 답변에 감사 드리며 개념을 이해합니다. – SamRowley

+1

예, MediaRecorder에서 가져온 WAV 파일은 대부분 정식 파일이므로 잘되어야합니다. 여기에 당신이해야 할 일을하는 데 도움이되는 좀 더 많은 코드와 링크가 있습니다 : http://www.dreamincode.net/forums/topic/171550-converting-short-array-to-byte-array-using-java- on-android-device / – MusiGenesis

관련 문제