2010-04-14 3 views

답변

4

WAV 파일이 PCM이라고 가정하면 데이터 청크의 크기를 사용하여 계산할 수 있습니다. 샘플 당 바이트 수는 샘플 당 비트 수를 8로 나눈 것입니다. 샘플 당 비트 수는 WAVEFORMAT 구조에 있습니다. 이것은 샘플 수를 정확하게 얻기 위해 사용될 수 있습니다.

+0

을 파일 크기의 데이터 청크의 크기를 해결, 또는 좀 더 알아야 할 수있다 - 예를 헤더 크기? – Simon

+0

WAV 파일에는 항상 형식 청크와 데이터 청크가 있습니다. 다른 덩어리가있을 수 있습니다. 데이터 청크 크기를 확인하는 유일한 방법은 크기를 찾아 크기 매개 변수를 읽는 것입니다. 어떤 언어 및 도서관을 사용하고 있습니까? –

+0

C# 및 MediaInfoLib. – Simon

5

무슨 마크가. 아니, 일반적으로 헤더를 해석해야합니다. 그러나 형식, 채널 수 및 샘플 당 비트 수를 알고 있고 모든 파일에 대해 동일하면 이론적으로 파일 크기에서이를 계산할 수 있습니다.

WAV는 단순한 형식입니다. 불행히도 크고 작은 하드웨어 및 소프트웨어 개발자가 오랜 세월 동안 여러 가지 형식의 변형이있었습니다. 파일이 현대 주류 웨이브 편집기에서 나오는 경우 일반적으로 정성을 다하는 형식을 기대할 수 있습니다. 따라서 샘플을 WaveLab 또는 유사품에서 내보내 표준화하면 헤더 해석기에 대한 (작은) 코드 작성을 줄일 수 있습니다.

가장 쉽게 읽을 수있는 .wav 형식 설명은 here입니다. StripWav은 샘플을 표준화하는 작은 프로그램입니다. 더 많은 기능을 갖춘 명령 줄 도구도 있습니다 : sox. Sox는 일괄 처리 작업을 지원하므로 웨이브 편집기를 사용하는 것보다 낫습니다. - .wav 파일 세트는 '동적'이 아니라 주어진 것입니다.

So : 일괄 처리 작업으로 한번 표준화 할 수 있다면 가능할 것입니다. 나는이 형식 설명과 Sox를 여러 번 좋은 효과를 내기 위해 사용했다. 행운을 빌어.

1

PCM wav 형식에서 헤더에는 단일 샘플의 바이트 수에 대한 blockalign이라는 정보가 들어있다.

일반적으로 메타 데이터가 첨부되지 않은 표준 RIFF PCM wav 파일이있는 경우 (일반적인 경우). blockalign은 오프셋 32 (wav 파일의 시작 부분부터 33 ~ 34 번째 바이트)에있는 2 바이트 정수입니다. 그리고 datasize라는 데이터의 파일 크기는 오프셋 40에서 4 바이트 정수입니다 (41 ~ 44 바이트가 wav 파일의 시작 부분을 형성 함).

지금 datasize/blockalign이 원하는 것입니다.

PS 경우

당신이 (당신이 필요하지 않을 수 있습니다 다른 덩어리와 함께)는 RIFF의 경우, 형식 정보] 및 데이터는 다른 "덩어리"에 넣고, 더 복잡한 WAV 형식을 가지고 있고, 위에서 언급 한 오프셋이 올바르지 않을 수 있습니다. 그런 다음 청크를 조사해야합니다. 귀하의 경우에는 fmt 및 데이터 청크를 찾아야합니다.

각 청크는 FOURCC라는 4 바이트 ASCII 코드화 된 데이터로 시작하며 'fmt'는 청크 포함 형식 정보를 나타내고 'data'는 데이터 청크를 나타냅니다. FOURCC 바로 뒤에 (4 바이트가 아닌) 청크의 크기 (바이트)를 알려주는 4 바이트 정수입니다.

참고 : 나는

A simple wav header reference HERE

More general RIFF wav format HERE