Fer*_*rry 2 c++ audio volume wav sample-data
我想通过使用C++(库libsndfile)获取WAV文件的最高音量级别的值?有关如何做的任何建议?
您可以在样本缓冲区中的样本的绝对值中找到最高的单个样本值(峰值).这采取一般形式:
t_sample PeakAmplitude(const t_sample* const buffer, const size_t& count) {
t_sample highest(0);
for (size_t idx(0); idx < count; ++idx) {
// or fabs if fp
highest = std::max(highest, abs(buffer[idx]));
}
return highest;
}
Run Code Online (Sandbox Code Playgroud)
要获得平均值,您可以使用RMS函数.插图:
t_sample RMSAmplitude(const t_sample* const buffer, const size_t& count) {
t_sample s2(0);
for (size_t idx(0); idx < count; ++idx) {
// mind your sample types and ranges
s2 += buffer[idx] * buffer[idx];
}
return sqrt(s2 / static_cast<double>(count));
}
Run Code Online (Sandbox Code Playgroud)
RMS计算比Peak更接近人类感知.
为了更深入地了解人类的感知,您可以使用称重过滤器.