2
C++ (라이브러리 libsndfile)을 사용하여 WAV 파일의 최고 볼륨 레벨 값을 가져 오시겠습니까? 그것을하는 방법에 대한 제안?C++을 사용하여 WAV 파일의 최고 볼륨 레벨을 찾는 방법
C++ (라이브러리 libsndfile)을 사용하여 WAV 파일의 최고 볼륨 레벨 값을 가져 오시겠습니까? 그것을하는 방법에 대한 제안?C++을 사용하여 WAV 파일의 최고 볼륨 레벨을 찾는 방법
샘플 버퍼의 샘플 절대 값 중에서 가장 높은 단일 샘플 값 (Peak)을 쉽게 찾을 수 있습니다.
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 원본에서 Peak가 나타났습니다. 건배 – justin