私はピアノのようなアプリケーションを開発しており、両方のライブラリを試しました:
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 つのサウンドしか再生できないことです。別の同様の音を追加する代わりに、同じピアノのキーを押しても、最初の音が再生されるまで何もしません。小さな 1/2 秒の遅延もあります。
私の質問は:
ピアノのキーボードを実装するために使用するライブラリは次のとおりです。
- 音の再生に遅延がないか、または目立たない。
- サウンドはボリューム ロッカーによって制御されます。
- 一度に複数のサウンドを再生できます。