Alexander
Alexander

Reputation: 233

background music

(using AVFoundation.framework)

#import "AVFoundation/AVFoundation.h"

So I got a problem, I tried this code first in init method of my class (that is the one that is loaded first)

NSString* soundFilePath = [[NSBundle mainBundle] pathForResource:@"music" ofType:@"mp3"];
NSURL* soundFileURL = [NSURL fileURLWithPath:soundFilePath];
AVAudioPlayer* player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil];
player.numberOfLoops=-1;
[player play];

But it didn't work, than I decided to do it in thread: in init method:

[NSThread detachNewThreadSelector:@selector(playMusic) toTarget:self withObject:nil];

and method itself:

-(void) playMusic {
    NSString* soundFilePath = [[NSBundle mainBundle] pathForResource:@"music" ofType:@"mp3"];
    NSURL* soundFileURL = [NSURL fileURLWithPath:soundFilePath];
    AVAudioPlayer* player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil];
    player.numberOfLoops=-1;
    [player play];
}

it is declared in *.h file of course. It also didn't work.

I tried to debug, on line

}

of playMusic method the file is played for 2 or 3 seconds and then stops. It isn't played without debug. What is the problem?

Upvotes: 0

Views: 555

Answers (1)

Felix
Felix

Reputation: 35394

The AVAudioPlayer will be deallocated immediately. You need to retain the player. So make the AVAudioPlayer an instance variable of the class.

Upvotes: 2

Related Questions