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;
}
}