2011-05-12 5 views
4

나는 이전에 질문이 있었다 : Reading wav file in JavaJava로 wav 파일을 1 초 조각으로 나누는 방법은 무엇입니까?

첫째로, 나는 자바로 wav 파일을 읽고 그 바이트를 배열로 처리하도록하고 싶다.

두 번째로, 나는 그것의 침묵을 제거 할 것이다 (이것은 또 다른 질문의 주제이다). 나는 1 개 초 조각으로 그 wav 파일을 나눕니다 그 후

내가 그와 함께 자바와 wav 파일을 읽으려고 (나는 이것이 큰 문제 중 하나입니다, 그 작은 wav 파일에 대한 헤더 문제를 처리해야) API, 내 이전 질문의 대답. 그러나 API를 사용하여 헤더 또는 API에 대한 작업을 수행해야합니까? 자체적으로 어떻게해야합니까? 그리고 그 wav 파일을 Java로 1 초 조각으로 나눌 수있는 방법은 무엇입니까? 다른 API 나 다른 것이 나에게 좋습니다.

+0

* .wav * 파일 형식은 매우 간단합니다. * .wav * 파일에서 FFT를 수행하고 * .wav * 독자를 직접 작성했습니다. 코드는 아주 작았습니다. 먼저 인코딩 (모노 또는 스테레오? 8 비트 또는 16 비트? 초당 샘플 수 : 44.1kHz 또는 22kHz 등)을 알아야합니다. 그런 다음 하나의 샘플을 얻기 위해 필요한 샘플 수를 계산합니다 둘째. – SyntaxT3rr0r

+0

@ SyntaxT3rr0r : 파일이 * canonical * 인 경우 WAV 형식은 실제로 간단합니다. 44 바이트 헤더 뒤에 샘플이 오는 것을 의미합니다. WAV 파일은 실제로 RIFF 파일이며 헤더 정보는 처음 44 바이트에 모두 포함될 필요는 없습니다 (*는 *이지만 대부분의 WAV 파일에서). – MusiGenesis

+0

@ SyntaxT3rr0r 여기에서 관련 질문을했습니다 : http://stackoverflow.com/questions/5983457/problem-with-reading-wav-file-with-java – kamaci

답변

2

참조하는 API는 원본 WAV 파일의 샘플 데이터가 포함 된 double[] 배열을 반환합니다. 그렇게해야만하는 것은 더 작은 배열 (각각 1 초 길이)을 만들고 원래 배열의 적절한 위치에서 더 작은 배열 각각으로 복사하므로 모든 원래 데이터가 작은 배열로 복사됩니다. 그런 다음 API의 작성 메소드를 사용하여 각각의 더 작은 배열에서 실제 WAV 파일을 만듭니다.

해당 API를 사용하면 헤더 자체에 대해 걱정할 필요가 없습니다. (쓰기가 쉽지만 읽을 가능성이 높기 때문에 좋은 방법입니다.)

각 작은 배열의 크기는 원본 형식에 따라 다릅니다. 원본 WAV 파일이 44.1 KHz 샘플 속도의 모노 인 경우 1 초 배열에는 44,100 개의 요소가 포함됩니다.

+0

* .wav * 형식은 이산 값을 사용하여 사운드를 저장하고, 말하자면, 16 비트/44.1 kHz/스테레오와 같습니다. 어떻게 API가 이러한 불연속 값을 * double [] * 배열로 변환합니까? Methinks 무언가가 정말 나쁘게 어딘가에 잘못 갔다 :) OP는 자신의 부서에서 * "비파괴적인 편집"*을 할 수 있어야하지만, 어쨌든 이산 값을 저장하기 위해 * double [] *을 사용하는 API에 대해서는 의문이있다;) – SyntaxT3rr0r

+0

@ SyntaxT3rr0r : 오버 플로우에 대해 걱정하지 않고 여러 16 비트 소스를 혼합 할 수 있으므로 부동 소수점 및 정수 (예 : 32 비트) 샘플 배열을 처리하는 것과 같은 API에서는 실제로 매우 일반적입니다 (큰 문제가 될 수 있음). 16 비트 버퍼로 혼합하는 경우). 그러나 이것을 위해 (예를 들어'double'과'long') 64 비트 타입을 사용하는 것은 전혀 의미가 없으며 API가 어떤 식 으로든'short' (16 비트 정수)를 지원하지 않는다는 것은 이상한 일입니다. 그것이 제작 된 WAV 파일의 형식입니다. – MusiGenesis

+0

나는 관련 질문을 여기에서 물었다 : http://stackoverflow.com/questions/5983457/problem-with-reading-wav-file-with-java – kamaci

관련 문제