ios audio volume sprite-kit objectal

iOS cómo crear un efecto de entrada/salida de audio fundido en un juego de Sprite Kit?



volume sprite-kit (2)

ObjectAL tiene un contenedor AVAudioPlayer integrado para la reproducción de música. Se llama OALAudioTrack .

OALAudioTrack tiene un método fadeTo:duration:target:selector: que puede usar para hacer el desvanecimiento. Ya tiene disponible una instancia de OALAudioTrack como la propiedad backgroundTrack la interfaz de audio simple:

[[OALSimpleAudio sharedInstance].backgroundTrack fadeTo:.. duration:.. ..];

Estoy interesado en cómo puedo administrar la música de fondo en mi juego Sprite Kit para lograr un fundido de entrada / salida.

Noté que Sprite Kit tiene un reproductor de sonido incorporado, pero parece ser más útil para efectos muy cortos, como sonidos de "golpe":

[self runAction:[SKAction playSoundFileNamed:@"music.mp3" waitForCompletion:NO]];

No parece que haya una forma de detener este sonido.

Estoy usando Kobold Kit, y viene con la biblioteca OALSimpleAudio que puede reproducir sonidos:

[[OALSimpleAudio sharedInstance] preloadEffect:@"die.wav"]; [[OALSimpleAudio sharedInstance] playEffect:@"die.wav"]; [[OALSimpleAudio sharedInstance]preloadBg:@"battle.mp3"]; [[OALSimpleAudio sharedInstance] playBg:@"battle.mp3" loop:YES];

Hay una propiedad bgVolume en OALSimpleAudio , pero no se desvanece realmente.

Debería intentar escribir mi propio código de fundido de entrada / salida, si hay algo que pueda usar para controlar el volumen de un reproductor genérico de música, como OALSimpleAudio .


También puede usar la compilación en AVAudioPlayer o, por supuesto, adaptar la función a su reproductor:

//play background sound NSError *error; NSURL * backgroundMusicURL = [[NSBundle mainBundle] URLForResource:@"SpaceLife" withExtension:@"mp3"]; self.backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:backgroundMusicURL error:&error]; self.backgroundMusicPlayer.numberOfLoops = -1; [self.backgroundMusicPlayer prepareToPlay]; [self.backgroundMusicPlayer play];

Y luego agrega la función desde esta publicación :

- (void)doVolumeFade { if (self.backgroundMusicPlayer.volume > 0.1) { self.backgroundMusicPlayer.volume = self.player.volume - 0.1; [self performSelector:@selector(doVolumeFade) withObject:nil afterDelay:0.1]; } else { // Stop and get the sound ready for playing again [self.backgroundMusicPlayer stop]; self.backgroundMusicPlayer.currentTime = 0; [self.backgroundMusicPlayer prepareToPlay]; self.backgroundMusicPlayer.volume = 1.0; } }