AVAudioPlayer сбрасывает воспроизводимый в данный момент звук и воспроизводит его с начала - PullRequest
15 голосов
/ 21 июля 2009

У меня проблема с использованием AVAudioPlayer, когда я хочу сбросить настройки проигрывателя, если он воспроизводится в данный момент, и воспроизвести его снова.

Безуспешно пробую следующее:

Звук воспроизводится один раз, но затем во второй раз, когда я выбираю кнопку, звук останавливается, в третий раз звук снова включается.

//Stop the player and restart it
if (player.playing) {
    NSLog(@"Reset sound: %@", selectedSound);
    [player stop];
    [player play];
} else {
    NSLog(@"playSound: %@", selectedSound);
    [player play];      
}

Я также попытался использовать player.currentTime = 0, который указывает, что сбросил бы плеер, который не работал, я также попытался сбросить currentTime = 0 и затем вызвать play, который не работал.

//Stop the player and restart it
if (player.playing) {
    NSLog(@"Reset sound: %@", selectedSound);
    player.currentTime = 0;
    [player play];
} else {
    NSLog(@"playSound: %@", selectedSound);
    [player play];      
}

Ответы [ 3 ]

36 голосов
/ 22 июля 2009

В вашей ситуации я бы попробовал следующее

//Pause the player and restart it
if (player.playing) {
    NSLog(@"Reset sound: %@", selectedSound);
    [player pause];
}

player.currentTime = 0;
[player play];

Если вы собираетесь немедленно воспроизвести звук, я бы предложил сделать паузу вместо остановки. Calling stop "Останавливает воспроизведение и отменяет настройку, необходимую для воспроизведения."

1 голос
/ 20 июня 2019

Как указано, если вы хотите, чтобы звук воспроизводился снова, вам следует избегать отключения экземпляра AVAudioPlayer с остановкой, а просто выполнить сброс позиции, в которой он воспроизводится. Поэтому не используйте stop () или pause (), но, как уже упоминалось в Plumenator, просто введите .currentTime = 0. Так что в вашем случае вы просто сделаете:

if (player.isPlaying) { 
   player.currentTime = 0
} else {
   player.play()
}
1 голос
/ 28 июля 2016

Пример Swift:

player.currentTime = 0.0;
...