Регулировка громкости SKAction playSoundFileNamed:

Есть ли способ регулировать громкость звука, воспроизводимого с помощью SKAction playSoundFileNamed: waitForCompletion:.

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

Ответ 1

К сожалению, вы не можете изменять громкость с помощью SKAction, поэтому вам также нужно использовать AVAudioPlayer для ваших эффектов. Вы можете реализовать пользовательский playSoundFileNamed: waitForCompletion: volume: используя runBlock, как вы уже думали, поэтому ваш код будет не совсем другим, а затем используйте playSoundFileNamed: waitForCompletion:.

Ответ 2

Вот мой код для того, как я справился с этой проблемой

NSError *error;
NSURL *soundURL = [[NSBundle mainBundle] URLForResource:@"pew-pew-lei" withExtension:@"caf"];
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:&error];
[player setVolume:masterVolume];
[player prepareToPlay];

SKAction*   playAction = [SKAction runBlock:^{
    [player play];
}];
SKAction *waitAction = [SKAction waitForDuration:player.duration+1];
SKAction *sequence = [SKAction sequence:@[playAction, waitAction]];

[self runAction:sequence];

Переменная masterVolume - это только некоторая предустановленная переменная, которую я могу изменить от 0.0-1.0

Функция waitAction гарантирует, что плеер не будет удален до того, как он воспроизведет весь звук

Надеюсь, это поможет!