iPhone SDK : AvaudioreCorder Metering - PeakPowerForChannel을 데시벨에서 백분율로 변경하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/2465328

문제

iPhone SDK의 avaudiorecorder는 데시벨에서 채널의 피크 및 평균 전력을 얻는 데 사용될 수 있습니다. 범위는 0dB에서 160dB 사이입니다. 이것을 0-10 사이의 척도 또는 오디오 레벨 미터에 사용할 수있는 유사한 규모로 변환하는 데 사용되는 계산은 무엇입니까?

도움이 되었습니까?

해결책

범위는 -160 dB에서 0dB입니다. 아마도 -90 dB에서 0dB로 이동하는 미터로 표시하고 싶을 것입니다. 데시벨이 로그 스케일이기 때문에 데시벨로 표시하는 것은 실제로 선형 오디오 레벨보다 더 유용합니다. 즉, 우리가 소리를 얼마나 크게 인식하는지 더 근접합니다.

즉, 이것을 사용하여 데시벨에서 선형으로 변환 할 수 있습니다.

linear = pow (10, decibels / 20);

그리고 반대 :

decibels = log10 (linear) * 20;

상기 데시벨의 범위는 음의 무한대이며, 선형의 경우 0.0 ~ 1.0입니다. 선형 값이 0.0 인 경우, 즉 -inf db; 1.0에서 선형은 0dB입니다.

다른 팁

Apple은 또한 DB에서 선형 진폭 변환 클래스 Metertable.cpp 및 Metertable을 구현했습니다.

"On-the-Fly"값을 계산하는 인라인 함수를 사용할 수 있습니다.

inline double DbToAmp(double inDb);

또는

미리 계산 된 조회 테이블을 사용하려면 메트로 테이블 인스턴스를 만듭니다. 이렇게하면 메모리의 변환 값이 저장되어 응용 프로그램이 계산 수를 줄일 수 있습니다.

float ValueAt(float inDecibels);

참고 : 다른 계산이 동시에 발생하거나 매우 빠른 처리가 필요한 경우 조회 테이블이 필요할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top