私のアプリケーションでは、ボタンをキーボードとして設定しています。各ボタンはピアノの鍵盤と同じように機能し、ボタンを押すと音が鳴りますが、離すと止まります。この方法では、2つのIBActionを使用しています。1つはタッチダウン(サウンドプレイ)とタッチアップインサイド(サウンドストップ)用です。AVAudioPlayerの再生が遅れているため、サウンドの再生にSystemSoundIDを使用しています。唯一の問題は、ボタンを押したままにするとサウンドが正常に再生されることですが、タッチを離すとアプリがクラッシュします。以下は私のコードです:
.hファイル:
SystemSoundID *soundID;
.mファイル:
- (IBAction)ASoundStart:(id)sender {
NSString *soundFile = [[NSBundle mainBundle] pathForResource:@"P1:4t" ofType:@"mp3"];
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:soundFile], &soundID);
AudioServicesPlaySystemSound(soundID);
[soundFile release];
}
- (IBAction)ASoundStop:(id)sender {
AudioServicesDisposeSystemSoundID(soundID);
}