计算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; };

计算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; };,c++,audio,wav,C++,Audio,Wav,现在,假设报头的数据已经加载到某个变量中,如何计算音轨的最大持续时间 假设以秒为单位的持续时间(向下舍入)足够好,您只需使用 int durationInSeconds(struct header* hdr) { int numSamples = hdr->subchunk2_size / (hdr->num_channels * (hdr->bits_per_sample/8)); int durationSe

现在,假设报头的数据已经加载到某个变量中,如何计算音轨的最大持续时间

假设以秒为单位的持续时间(向下舍入)足够好,您只需使用

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\u size
提供音频数据的字节数。将其除以采样数和字节率的乘积(注意:
bits\u per\u sample
给出了单个通道的单个采样中的位数-这与
标题中的
byte\u rate
不同)给出了样本总数


sample\u rate
是每秒的样本数,因此,将样本总数除以它可以得到以秒为单位的总持续时间。

假设以秒为单位的持续时间(向下舍入)足够好,您只需使用

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\u size
提供音频数据的字节数。将其除以采样数和字节率的乘积(注意:
bits\u per\u sample
给出了单个通道的单个采样中的位数-这与
标题中的
byte\u rate
不同)给出了样本总数

sample\u rate
是每秒的样本数,因此将样本总数除以该值,即可得出总持续时间(以秒为单位)