在我的iphone应用程序上加载音乐文件

时间:2010-08-14 10:18:12

标签: objective-c iphone cocoa-touch xcode programming-languages

大家好,这是我在这里发表的第一篇文章 我一直在iphone应用程序中工作,它听起来像一个小型乐器 我用这段代码加载我的音符:

// get the path of the sound file
NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"do"
                                                      ofType:@"mp3"];

// create a URL with the given path
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:soundPath];

// initialize the AVAudioPlayer with the sound file
btn_do = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL
                                                   error:nil];
[fileURL release];

依此类推所有其他音符(re,me,fa,sol,la,ci)

我的问题: 这种方法是正确的,因为我必须写这个代码几乎16次是否有更好或保持像我。 感谢

2 个答案:

答案 0 :(得分:0)

给笔记系统名称并为此写一个循环。也许你可以用清单来做到这一点。

答案 1 :(得分:0)

本质上代码是对的。如果要设置多个音符,最简单的方法是创建一个可以为每个音符运行的方法。因此,创建一个接受字符串并返回新AVAudioPlayer项的新方法:

- (AVAudioPlayer *)getNoteFromFilename:(NSString *)name {
  NSString *soundPath = [[NSBundle mainBundle] pathForResource:name
                                                  ofType:@"mp3"];
  NSURL *fileURL = [NSURL fileURLWithPath:soundPath];
  AVAudioPlayer *note = [[[AVAudioPlayer alloc] initWithContentsOfURL:fileURL
                                                  error:nil] autorelease];
  return note;
}

(注意我已经交换了NSURL方法以方便,自动释放一个,无需单独释放它。我们也按照惯例返回一个自动释放的对象note

然后您可以调用此方法,如下所示:

btn_do = [self getNoteFromFilename:@"do"];
btn_re = [self getNoteFromFilename:@"re"];

等等!...

编辑:下一个挑战 - 尝试将它们粘贴在一个数组中,这样你就可以拥有一个变量来照顾它!您可以使数组中的索引对应于调用注释的每个不同按钮的“tag”属性...