AVAudioPlayer不能与(NSString *)文件名一起使用

时间:2012-10-22 13:58:13

标签: objective-c audio mp3 avaudioplayer

我想实现播放声音和/或音乐的播放器。我有这两种方法:

-(void)playSound:(int)soundIndex
{
  NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:[SoundFxFilenameArray objectAtIndex:soundIndex] ofType:@"mp3"]];

  if(FxPlayer)
  {
    [FxPlayer release];
    FxPlayer = nil;
  }

  [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategorySoloAmbient error:nil];

  FxPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
  [FxPlayer play]; 
}

-(void)playMusic:(NSString *)filename
{
  NSURL *url = [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:filename ofType:@"mp3"]];

  if(MusicPlayer)
  {
    [MusicPlayer release];
    MusicPlayer = nil;
  }

  MusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
  [MusicPlayer play];
}

现在,[[SoundPlayer sharedManager] playSound:FXIndex_Default]工作正常。当我尝试播放音乐时,[[SoundPlayer sharedManager] playMusic:@"music_file_name_here"只是没有做任何事情。请注意,声音文件和音乐文件的格式相同(mp3)。

另外,“sharedInstance”是因为我为这个音频播放器实现了单例模式。

我的代码中有什么错误的指针或想法,以便我可以播放声音而不是音乐?

1 个答案:

答案 0 :(得分:0)

fileURLWithPath中使用URLWithString代替playMusic

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:filename ofType:@"mp3"]];

URLWithString需要一个完整的URL,例如“file://path/to/file.mp3”作为参数,fileURLWithPath只需要一个文件路径。