2014-05-19 4 views
1

직접 이진 데이터를 읽음으로써 wav 파일을 C++로 편집하려고합니다. wav 파일의 지속 시간 계산

struct header{  
char chunk_id[4]; 
int chunk_size; 
char format[4]; 
char subchunk1_id[4]; 
int subchunk1_size; 
short int audio_format; 
short int num_channels; 
int sample_rate;    
int byte_rate; 
short int block_align; 
short int bits_per_sample; 
char subchunk2_id[4]; 
int subchunk2_size; 
}; 

지금 어떻게 헤더의 데이터가 이미 몇 가지 변수에로드되어 있다고 가정 사운드 트랙의 최대 기간을 계산하기 위해 다음과 같이 나는 파일의 헤더를 작성했습니다?

답변

5

(내림) 초 단위로 시간을 가정하면 단순히

int durationInSeconds(struct header* hdr) 
{ 
    int numSamples = hdr->subchunk2_size/
         (hdr->num_channels * (hdr->bits_per_sample/8)); 
    int durationSeconds = numSamples/hdr->sample_rate; 
    return durationSeconds; 
} 

subchunk2_size 당신에게 오디오 데이터의 바이트 수를 제공합니다 사용할 수 있습니다 충분합니다. 이를 샘플 수와 바이트 수의 곱으로 나눕니다 (참고 : bits_per_sample은 단일 채널에 대해 단일 샘플의 비트 수를 제공합니다 - 이것은 byte_rateheader에서 다릅니다)는 총 샘플 수를 제공합니다.

sample_rate은 초당 샘플 수이므로 총 샘플 수를이 값으로 나눈 값은 총 지속 시간 (초)을 제공합니다.