嗨我想通过我的服务器播放mp3文件,例如http://test.com/hi.mp3
当代码播放文件时,如果它在代码目录中。 该代码一次只能启用1个声音。
- (IBAction)oneSound:(id)sender; {
NSString *path = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"mp3"];
if (theAudio) [theAudio release];
NSError *error = nil;
theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&error];
if (error)
NSLog(@"%@",[error localizedDescription]);
theAudio.delegate = self;
[theAudio play];
}
然而,这里的代码使我能够通过http服务器播放声音,但我可以一次播放多个声音,我需要会话中的声音,所以一次只能播放1个声音。我有10个声音。
- (IBAction)oneSound:(id)sender; {
AVPlayer *player = [[AVPlayer playerWithURL:[NSURL URLWithString:@"http://www.mysite.com/hi.mp3"]] retain];
[player play];
}
答案 0 :(得分:0)
我的建议是移动播放器的指针,使其在该方法中声明,以便在模块级别(在.h文件中)声明 - 或者只是在接口中定义,或者定义为@property 。然后你可以在以后用另一种方法访问这个播放器。
然后,当您希望以其他方法切换到新声音时,您可以尝试:
[player pause]; // stop the player from playing
[player release]; // free the reference count
// start a new plaer
player = [[AVPlayer playerWithURL:
[NSURL URLWithString:@"http://www.mysite.com/nextsound.mp3"]] retain];
你应该注意这里的'保留'电话。 playerWithURL将传回一个自动释放的对象,因此根据您在其他地方使用自动释放池所做的操作,并且根据您是否在其定义中使用包含(retain)的属性,您可能不需要在此处调用retain。