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];
}
Ответы
Ответ 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()
}