Goal: I want to present a new scene:
[self.scene.view presentScene:level2 transition:reveal];
and end the current background music in orde
Now you can stop playing sound action by assigning key string for it then using removeActionForKey
later
Sorry, this is Swift. But it can be ported to Obj-C.
let action: SKAction = SKAction.playSoundFileNamed("sounds/boom.wav", waitForCompletion: true)
self.runAction(action, withKey:"die-sound")
// later you do:
self.removeActionForKey("die-sound")
I have tested successful
You can't stop audio from playing when run from SKAction.
You will need another engine to run your background music.
Try AVAudioPlayer - it is really easy and straightforward to use. Something like this will work:
First import header and add new property to your scene or view controller:
#import <AVFoundation/AVFoundation.h>
@interface AudioPlayerViewController : UIViewController {
@property (strong, nonatomic) AVAudioPlayer *audioPlayer;
}
After this in viewDidLoad or in didMoveToView method of scene add following code:
- (void)viewDidLoad {
[super viewDidLoad];
NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/audiofile.mp3", [[NSBundle mainBundle] resourcePath]]];
NSError *error;
self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
self.audioPlayer.numberOfLoops = -1;
if (!self.audioPlayer)
NSLog([error localizedDescription]);
else
[self.audioPlayer play];
}
Each time you need your music to stop, just call [self.audioPlayer stop];
When you need new music to play, put a new player into the property initialized with your new music piece.
Hope this helps.