我正在开发一个类似钢琴的应用程序,并尝试了两个库:
AudioToolbox / AudioToolbox.h
-(void)playSound :(NSString *)fName :(NSString *) ext{
SystemSoundID audioEffect;
NSString *path = [[NSBundle mainBundle] pathForResource : fName ofType :ext];
if ([[NSFileManager defaultManager] fileExistsAtPath : path]) {
NSURL *pathURL = [NSURL fileURLWithPath: path];
AudioServicesCreateSystemSoundID((__bridge CFURLRef) pathURL, &audioEffect);
AudioServicesPlaySystemSound(audioEffect);
}
else {
NSLog(@"error, file not found: %@", path);
}
}
然后我会用类似
之类的东西来称呼它[self playSound:@"c_sharp" :@"mp3"];
这种方法的问题在于,当我按下调用 playSound 方法的按钮时,会有1-2秒的延迟。此外, AudioServicesPlaySystemSound 似乎在系统音量上播放,如果禁用该选项,则无法通过音量摇杆控制。
我也尝试过不同的方法来播放声音
AVFoundation / AVFoundation.h
@property (nonatomic, strong) AVAudioPlayer *audioPlayer;
-(void)viewDidLoad
{
[super viewDidLoad];
NSBundle *mainBundle = [NSBundle mainBundle];
NSString *fileC2 = [mainBundle pathForResource:@"c_sharp" ofType:@"mp3"];
NSData *soundC2 = [NSData dataWithContentsOfFile:fileC2];
NSError *error = nil;
self.audioPlayer = [[AVAudioPlayer alloc] initWithData:soundC2
error:&error];
[self.audioPlayer prepareToPlay];
}
然后播放声音,我
- (IBAction)c_sharp_press:(UIButton *)sender {
[self.audioPlayer play];
}
这种方法的问题在于我一次只能播放一个声音。如果我按相同的钢琴键,而不是添加另一个类似的声音,它将不会做任何事情,直到第一个声音完成播放。还有一个1/2秒的延迟。
我的问题是:
我用什么库来实现钢琴键盘,以便:
答案 0 :(得分:1)
请参阅Apple loadPresetDemo的示例代码。此代码演示了如何将AUSampler Unit
与自定义音频剪辑一起使用。这是制作乐器类型应用程序的最佳方法,因为AUSampler
针对响应式播放,低延迟,内存预加载和使用等进行了优化。在iOS中播放音频的其他方法不适合播放短音快速连续。