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 件のコメント:
コメントを投稿