2010年5月8日土曜日

サウンドの一時停止、ボリューム、ループ再生、再生の高速化

サウンドファイルの一時停止はAVAudioPlayerのpauseメソッドを使います。
再開する時は再度playメソッドを呼出します。
音量はvolumeプロパティに0.0〜1.0までの値を設定します。
ループ再生させたい場合はAVAudioPlayerのnumberOfLoopsプロパティに再生数-1の値を設定します。無限ループは0より小さい値を設定します。


    // 音量設定
    avap.volume = 0.5f;

    // 無限ループ
    avap.numberOfLoops = -1;

    // 1回のみ再生
    avap.numberOfLoops = 0;

    // 2回再生
    avap.numberOfLoops = 1;


また、再生時はAVAudioPlayerクラスのplayメソッドを呼出しますが、
playメソッドはファイルから読み込んで再生する為、再生が開始されるまで若干時間差があるようです。
このため、あらかじめファイルから読み込んでバッファに保持しておくために、prepareToPlayメソッドを呼出しておきます。prepareToPlayを呼出しておくと次にplayで再生を開始した時に即時に再生が行わるようになります。
ただし、stop時にバッファがクリアされてしまうそうなので、stop直後に再度prepareToPlayメソッドを呼んで準備しておく必要があります。


初期化処理等



    // アプリケーションフォルダをオープン
    NSBundle* bundle = [NSBundle mainBundle];
   
    // ファイルのパス生成
    NSString* path = [bundle pathForResource:soundName ofType:soundType];
   
    // URLを生成
    NSURL* url = [NSURL fileURLWithPath:path];
   
    // AVAudioPlayerインスタンス生成
    avap = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
   
    // AVAudioPlayerのdelegate設定
    avap.delegate = self;
   
    // 再生準備
    [avap prepareToPlay];



    // サウンド再生処理
    [avap play];



    // サウンド停止処理
    [avap stop];
    [avap prepareToPlay];

ちなみに、一時停止(pause)ではバッファ解放されないので、pauseメソッド呼出し後に再度prepareToPlayを呼ぶ必要はありません。

0 件のコメント:

コメントを投稿