AVFoundationと違って扱いは楽なのですが、その分機能が制限されています。
ループ再生の方法も提供されていないので、再生が終わったら再び再生するという方法で実現してみました。
ボタンが選択状態の間、効果音をループ再生します。
ボタンに結びつけるアクション。
- (IBAction)switchPlayingSE:(id)sender
{
UIButton *button = sender;
// 再生終了
if (button.selected) {
AudioServicesRemoveSystemSoundCompletion(_seID);
AudioServicesDisposeSystemSoundID(_seID);
}
// 再生開始
else {
NSURL *url = [NSURLfileURLWithPath:[[NSBundlemainBundle] pathForResource:@"se"ofType:@"aif"]];
AudioServicesCreateSystemSoundID((CFURLRef)url, &_seID);
AudioServicesAddSystemSoundCompletion(_seID, NULL, NULL, soundCompletionProc, NULL);
AudioServicesPlaySystemSound(_seID);
}
// ボタンの状態を切り替える
button.selected = !button.selected;
}
AudioServicesAddSystemSoundCompletion()で再生が終わったあとに実行するハンドラを設定しています。ハンドラは以下です。再び再生するのみ。
void soundCompletionProc(SystemSoundID ssID, void *clientData)
{
// 再生完了したらもう一度再生する
AudioServicesPlaySystemSound(ssID);
return;
}
0 件のコメント:
コメントを投稿