2011-10-15 1 views
1

배경 : 음악의 각 반복 사이의 피치를 변경하려고하기 때문에 내 배경 음악이 사운드 효과로 재생되고 있습니다.SimpleAudioEngine에서 많은 수의 사운드 효과

문제 : 배경 음악이 재생되는 동안 다른 짧은 음향 효과가 많이 발생합니다. 특정 수의 사운드 효과가 재생 된 후 배경 음악 (음향 효과)이 잘립니다. 대기열이 순환하여 50 개의 음향 효과가 재생 된 후 51 번째 재생이 완료되면 1 차 재생이 완료되었는지 여부가 알려집니다.

방향 요청 : 이 문제로 인해 두 가지 방향이 있습니다. 1. 효과로 배경 음악을 재생하지 않고 효과 대신 배경 음악으로 피치를 변경하는 방법을 알아보십시오. 2. 효과가 완료 될 때까지 효과가 유지되는지 확인하는 방법

감사

답변

4

SimpleAudioEngine 당신이 채널을 제어 할 수없는, 그래서 그냥 내부적으로 할당 한 채널 중 하나를 사용하여 음향 효과를 재생할 수 있습니다. 결국 모든 채널에서 오디오가 재생됩니다. 이 경우 새 오디오 파일을 재생해야하며 모든 채널이 이미 재생 중이면 SimpleAudioEngine은 기존 오디오 파일 중 하나를 취소합니다. 경우에 따라 이것이 배경 음악이 될 것입니다. Dang.

일반적으로이 문제를 해결하기 위해 수행하는 작업은 배경 음악 전용으로 하나의 오디오 채널을 할당 (할당)하는 것입니다. 다른 오디오는 그 채널에서 오디오를 재생하려고 시도하지 않습니다. "보통"CocosDenshion API을 사용해야합니다. CDAudioManager 또는 CDSoundEngine을 사용해야 할 것으로 보이지만 CocosDenshion에서 채널을 사용 해본 경험이 없습니다.

개인적으로 나는 CocosDenshion을 한번도 사용하지 않았습니다. 더 많은 컨트롤이 필요할 때마다 ObjectAL API를 쉽게 이해할 수 있으며 우수한 문서가 있습니다. 특정 채널에서 사운드를 재생하는 ObjectAL에 대해 다음 도우미 함수를 만들었습니다. 내 배경 음악에 대해 ALChannelSource을 인스턴스화하고 해당 채널을 통해서만 배경 음악을 재생했습니다. ALSoundSource을 돌려 주면 오디오가 재생되는 동안 피치, 팬 등을 변경할 수 있습니다.

+(id<ALSoundSource>) playEffect:(NSString*)effect channel:(ALChannelSource*)channel loop:(bool)loop 
{ 
    id<ALSoundSource> soundSource = nil; 

    if (channel) 
    { 
     ALBuffer* buffer = [[OALAudioSupport sharedInstance] bufferFromFile:effect]; 
     soundSource = [channel play:buffer loop:loop]; 
    } 

    return soundSource; 
} 

다른 오디오 파일들 OALSimpleAudio 클래스를 통해 재생됩니다.

+0

아, 알겠습니다. SimpleAudioEngine은 너무 단순합니다. 포괄적 인 답변 주셔서 감사합니다, 나는 그것을 줄 것이며 다시보고 할 것입니다. –

+0

OALAudioSupport는 어디서 제공됩니까? –

+0

어디서 ObjectAL을 얻을 수 있습니까? 여기 : http://kstenerud.github.com/ObjectAL-for-iPhone/ – LearnCocos2D