Подтвердить что ты не робот

AVAudioPlayer перезагружает в данный момент звук и воспроизводит его с начала

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

Я пробовал следующее без везения:

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

//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, который указывает, что бы reset игрок, который не работал, я также попытался сбросить currentTime = 0 и затем вызвать игру, которая не сработала.

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

Ответ 1

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

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

player.currentTime = 0;
[player play];

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

Ответ 2

Пример Swift:

player.currentTime = 0.0;

Ответ 3

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

if (player.isPlaying) { 
   player.currentTime = 0
} else {
   player.play()
}