目前我的应用程序基于while-realloc循环读取音频文件:
// Pseudocode
float data* = nullptr;
int size = 0;
AVFrame* frame;
while(readFrame(formatContext, frame))
{
data = realloc(data, size + frame.nSamples);
size += frame.nSamples;
/* Read frame samples into data */
}
有没有办法在开始时获取流中的样本总数?我希望能够使用new[]
而不是malloc
来创建数组。
答案 0 :(得分:0)
供参考,请在此处回答: FFmpeg: How to estimate number of samples in audio stream?
我在代码中使用了以下内容:
int total_samples = (int) ((format_context->duration / (float) AV_TIME_BASE) * SAMPLE_RATE * NUMBER_CHANNELS);
注意:我的测试显示此计算很可能会超过实际找到的样本数量,因此请确保在代码中对此进行补偿。我将所有剩余的“未设置”样本设置为零。