2011-11-22 3 views

답변

6

샘플 버퍼의 샘플 절대 값 중에서 가장 높은 단일 샘플 값 (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을 사용할 수 있습니다.

+3

libsndfile에 익숙하지 않지만이 RMS입니까? 최대 샘플 값을 반환하는 경우이 숫자는 사람이 인식하는 볼륨과 일치하지 않을 수 있습니다. – amwinter

+0

@ amwinter 원본에서 Peak가 나타났습니다. 건배 – justin

관련 문제