2012-11-16 5 views
2

저는 학교에서 일하고있는 iPhone 응용 프로그램에 대한 두 개의 오디오 파일의 평균 볼륨 (dB)을 비교하고 싶습니다. 나는 Xcode, Objective-C에서 일하고있다.Objective-C를 사용하여 오디오 파일의 평균 볼륨을 결정하는 방법은 무엇입니까?

일부 연구 끝에 AVFoundation Framework에서 "averagePowerForChannel :"을 발견했지만 어떻게 작동하는지 알 수 없습니다. 다음은 코드의 일부입니다 :

NSString *stringPath = [NSBundle mainBundle]pathForResource:wavname ofType:@"wav"]; 
NSURL *url = [NSURL fileURLWithPath:stringPath]; 
avPlayer = [[AVaudioPlayer alloc]initWithContentsOfUrl:url error:nil]; 
[avPlayer play]; 

위의 코드는 'wavname'이라는 이름의 .wav 파일을 재생합니다. 평균 볼륨을 결정하려면 어떻게해야합니까?

[avPlayer averagePowerForChannel:0]; 

위의 te 코드를 추가하면 -160.000이 반환됩니다. 오디오 파일의 시작 부분에있는 볼륨 레벨입니다.

어떻게 올바르게 사용합니까? 왜냐하면, 현재로서는 "averagePower"라고 불리는 이유를 볼 수 없기 때문에 한 번에 볼륨을 확인하는 것처럼 보입니다.

+2

"현재 평균 전력 값을 얻으려면이 메서드를 호출하기 전에 updateMeters 메서드를 호출해야합니다."- 시도 했습니까? – moonwave99

+0

응답 @ moonwave99에 감사드립니다. 나는 덧붙였다 : '[avPlayer updateMeter]; ' 그러나 여전히 -160.000을 반환한다. 나는 루프를 만들고, 간격으로 값을 확인하고, 평균 볼륨을 계산할 수 있다고 생각합니다. 하지만, 왜 내가 그것을 할 필요가있을 때 averagePower라고 불리는가? – RoelfMik

+0

내 질문에 대답하려면 : 볼륨 측정은 항상 평균입니다. 왜냐하면 볼륨을 결정하기 위해 여러 샘플 값이 필요하기 때문입니다. – RoelfMik

답변

0

averagePowerForChannel:은 재생 또는 녹음 채널의 평균 전력 만 반환합니다. iow, 전체 파일을 분석하는 데는 그리 유용하지 않습니다. 이 방법은 현재 미터 값에 유용합니다 (한 예로).

파일을 분석하려면 quadratic mean (RMS 용)을 계산하는 모든 샘플 데이터 (예 : ExtAudioFile API 사용)를 읽습니다.

+0

@justin에 대한 답변 감사합니다. (: 확장 오디오 파일 서비스 참조를 찾았으니저기서 유용한 것들을 찾아야합니다! :) – RoelfMik

+0

@RoelfMik 여러분을 환영합니다. 또한 샘플 데이터를 읽을 때 시작 지점에 'ExtAudioFileCreateWithURL'을 사용하는 샘플 코드를 살펴보십시오. – justin