вычисление длительности wav-файла

Я пытаюсь отредактировать файл 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;
 };

Как теперь вычислить максимальную продолжительность звуковой дорожки, предполагая, что данные заголовка уже загружены в какую-то переменную?


person Community    schedule 19.05.2014    source источник


Ответы (1)


Предполагая, что продолжительность в секундах (округленная вниз) достаточно хороша, вы можете просто использовать

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_rate в header), вы получите общее количество выборок.

sample_rate — это количество выборок в секунду, поэтому, разделив общее количество выборок на это, вы получите общую продолжительность в секундах.

person simonc    schedule 19.05.2014