2009-10-08 2 views
3

SDK iphone에서 오디오 큐를 사용하여 Aran Mulhollan의 RemoteIOPlayer를 사용하고 있습니다. 문제없이 내가 할 수있는 : - 두 개의 신호를 추가 혼합 할 수는 소리 - 나는 wav 파일아이폰의 sdk Audioqueue에서 사운드를 낮추는 방법?

하지만 다른 모든 작업이 나에게 뒤틀린 왜곡 된 사운드를 제공하고, 내가 할 수있는, 특히 '에서 얻을 UINT32를 곱하여 사운드 볼륨을 증가 신호를 나눕니다. 나는 내가 잘못하고있는 것을 알아낼 수 없다. 실제적인 결과는 괜찮아 보인다. 소리/신호 처리의 일부 측면은 분명히 날을 빠져 나와야합니다 :) # # #

도움이 감사합니다!

답변

1

시도해 보셨습니까?

- (void)setQueue:(AudioQueueRef)ref toVolume:(float)newValue { 
    OSStatus rc = AudioQueueSetParameter(ref, kAudioQueueParam_Volume, newValue); 
    if (rc) { 
    NSLog(@"AudioQueueSetParameter returned %d when setting the volume.\n", rc); 
    } 
} 
+0

AudioQueue에서 AudioQueueRef를 만드는 방법 ?? –

+0

AudioQueueRef는 오디오 대기열에 대한 불투명 한 핸들이므로 "AudioQueue에서 AudioQueueRef를 만들지 않습니다". http://developer.apple.com/library/mac/#documentation/MusicAudio/Reference/AudioQueueReference/Reference/reference.html에서 AudioQueueNewInput/AudioQueueNewOutput을 찾으십시오. –

0

iPhone은 오디오를 16 비트 정수로 처리합니다. 대부분의 오디오 파일은 이미 정규화되어있어 피크 샘플 값은 16 비트 부호있는 정수에 맞는 최대 값입니다. 즉, 두 개의 샘플을 함께 추가하면 오버플로되거나이 경우 오디오 클리핑이 발생합니다. 2 개의 오디오 소스를 함께 믹싱하고 클리핑이 없는지 확인하려면 샘플을 평균화해야합니다. 샘플을 함께 더하고 2로 나눕니다. 또는 볼륨을 절반으로 설정하십시오. 데시벨을 사용한다면 약 -6dB의 변화가있을 것입니다.

+0

볼륨을 절반으로 줄이는 것은 IMO와의 절묘한 트레이드 오프입니다. 2 개의 채널을 믹싱 할 때이 기능을 사용할 수 있습니다.하지만 점점 더 믹싱하면서 채널은 더 조용하고 조용 해집니다. 샘플을 sint32_t에 혼합하고 값을 sint16_t 범위로 고정하는 것이 좋습니다 (IMO). 대부분의 샘플이 극한 상태가 아니기 때문에 상상할 수있는만큼 자주 클리핑이 발생하지 않으며 모든 채널이 최대 볼륨으로 종료됩니다. –

+0

32 비트 정수로 샘플을 믹싱하는 것 외에도 즉각적인 공격과 상당히 짧은 (10 밀리 초) 릴리즈의 리미터처럼 동작하는 다이내믹 컴프레서를 구현할 수 있습니다. 이는 클립핑을 방지하기 위해 감소 된 볼륨을 나타내는 변수와 함께 IIR (무한 입력 응답) 필터로 구현 된 다음 연속적인 샘플마다 원래 볼륨으로 천천히 다시 올라갑니다. – lucius

1

먼저 언급 한 코드는 AudioQueues를 사용하지 않으며 AudioUnits를 사용합니다. 아이폰에서 오디오를 믹싱하는 가장 좋은 방법은 내장 된 믹서 유닛을 사용하는 것입니다. 원래 예제를 다운로드 한 사이트의 코드는 here입니다. 그게 내가 당신의 코드에서 올바른 데이터 유형을 가지고 있는지 검사 할 것입니다. 서명 된 int를 사용해야하는 경우 서명되지 않은 int에 작업을 시도하고 있습니까? 왜곡 된 결과를 (종종)

관련 문제