2012年3月11日日曜日

効果音をループ再生する

iPhoneで効果音(短いサウンド)を再生するには、System Audio Servicesを利用します。
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 件のコメント:

コメントを投稿