Задержка воспроизведения звуков с помощью AVAudioPlayer - PullRequest
3 голосов
/ 31 марта 2010
-(IBAction)playSound{ AVAudioPlayer *myExampleSound;

NSString *myExamplePath = [[NSBundle mainBundle] pathForResource:@"myaudiofile" ofType:@"caf"];

myExampleSound =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:myExamplePath] error:NULL];

myExampleSound.delegate = self;

[myExampleSound play];

}

Я хочу воспроизводить звуковой сигнал при нажатии кнопки. Я использовал вышеуказанный код. Но для воспроизведения звука требуется некоторая задержка.

Кто-нибудь, пожалуйста, помогите.

Ответы [ 2 ]

8 голосов
/ 31 марта 2010

Существует два источника задержки. Первый больше и может быть устранен с помощью prepareToPlay метода AVAudioPlayer. Это означает, что вы должны объявить myExampleSound как переменную класса и инициализировать ее некоторое время, прежде чем она понадобится (и, конечно, вызвать prepareToPlay после инициализации):

- (void) viewDidLoadOrSomethingLikeThat
{
    NSString *myExamplePath = [[NSBundle mainBundle]
        pathForResource:@"myaudiofile" ofType:@"caf"];
    myExampleSound =[[AVAudioPlayer alloc] initWithContentsOfURL:
        [NSURL fileURLWithPath:myExamplePath] error:NULL];
    myExampleSound.delegate = self;
    [myExampleSound prepareToPlay];
}

- (IBAction) playSound {
    [myExampleSound play];
}

Это должно уменьшить задержку примерно до 20 миллисекунд, что, вероятно, подходит для ваших нужд. Если нет, вам придется отказаться от AVAudioPlayer и переключиться на другой способ воспроизведения звуков (например, Finch sound engine ).

См. Также мой собственный вопрос о лагах в AVAudioPlayer .

1 голос
/ 31 марта 2010

AudioServicesPlaySystemSound является опцией. Учебное пособие здесь , пример кода здесь .

...