2
我想通過使用C++(庫libsndfile)來獲取WAV文件的最高音量級別的值嗎?有關如何做的建議?如何使用C++查找WAV文件的最高音量級別
我想通過使用C++(庫libsndfile)來獲取WAV文件的最高音量級別的值嗎?有關如何做的建議?如何使用C++查找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;
}
爲了得到平均值,您可以使用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));
}
RMS計算比Peak更接近人類感知。
要深入人類的感知,你可以僱用Weighing Filters。
我不熟悉libsndfile,但是這是RMS嗎?如果您剛剛返回最大樣本值,則此數字可能與人類感知的數量不符。 – amwinter
@amwinter原來顯示高峯 - 我只是擴大了答案。乾杯 – justin