以下是一个基于频域特征的音频静音检测算法示例,该算法结合了多个特征并基于自适应阈值进行判断,能够更好地适应不同的噪声和音频质量:
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
constexpr int kSampleRate = 16000; // 采样率
constexpr int kFrameSize = 320; // 帧大小(20ms)
constexpr int kSilenceDurationThreshold = 400; // 静音时长阈值(ms)
constexpr double kSilenceEnergyFactor = 0.4; // 静音能量因子
constexpr double kZcrFactor = 3.5; // 过零率因子
constexpr double kSpectralFlatnessFactor = 4.5; // 能量谱平坦度因子
constexpr double kSpectralCentroidFactor = 1.1; // 频谱中心性因子
double ComputeShortTimeEnergy(const std::vector<short>& frame) {
long long energy_sum = 0;
for (const auto& sample : frame) {
energy_sum += sample * sample;
}
return static_cast<double>(energy_sum) / kFrameSize;
}
double ComputeZeroCrossingRate(const std: