2009-07-27 13 views
1

私はAVAudioPlayerを使って短い音を再生したいのですが、私はSystem Soundよりも多くのコントロールを持っているからです。私のiPhoneでAVAudioPlayerで短い音を再生しますか?

私はいくつかの異なる短いサウンドを再生するためにフックアップされているいくつかのボタンがあります。 各サウンドファイルは約1.5〜2.0秒です。

すべてがうまくいきます... 以外 ...ボタンを押す前に音が止まるのを待つ必要があり、サウンドが再び再生されます。

現在、個々のAVAudioPlayersは、のviewDidLoad上で作成されている...とボタンが

を押したときに音が再生するために呼ばれて、私はボタンが押されたときに...これは上記の問題を解決プレーヤーを作成しようとしました。 ..しかししばらくするとアプリがクラッシュする...すべてのサウンドが機能しなくなる。

アイデア? ありがとう Jonathan

答えて

0

AVAudioPlayerがサウンドの再生を停止するのは、通常、作成されたプレーヤインスタンスが多すぎて、通常はリークしたためです。あなたは、あなたが完了した後にいくつかをリリースすることを確認する必要があります。

0

あなたはプレイする前に0にプレイヤーのcurrentTimeを設定する必要があります。既に再生しているときに[player play]を呼び出すことは効果がありません。

player.currentTime = 0; 
[player play]; 
0

短い音を使いたい場合は、OpenALに切り替えることを考えてください。 これははるかに複雑ではありませんし、後でより複雑なオーディオ設定でいくつかの問題を解決します。

利用可能なチュートリアルと便利なコードがありますherearchived here)です。新しいものを作成する

+2

ためだろう。 –

+0

本当に、「iphone-programming-part-6-multiple-sounds-with-openal」を検索し、Googleキャッシュを調べてください。 – Bersaelor

0

は大丈夫ですが、あなたのヘッダーがこれを宣言しないことを確認してください:

- (void) audioPlayerDidFinishPlaying: (AVAudioPlayer *) player successfully: (BOOL) completed { 
    [player release];       
} 

あなたのアプリがシンプルであれば、mahboudzごとに、それはもはや必要です行われていないもののメモリを解放すること」提案。

これは完全にあなたのサウンドファイルのサイズによっては、クラッシュを防ぎ、シーンにdeallocあなたがもしいない可能性があります。

if (self.view.superview) { //release } 

などを追加することもできます。

これはすべてメモリ処理です。文字どおり関数内でプレーヤーオブジェクトを処理する方法を知っているポインタをブラッシュアップし、deallocまたはdidFinish:delegate関数にリリースを配置するのが快適で、それが他の関数に属していない理由を知ることができます。

iPhoneを中断することができますが、停止して、いつでもで台無しので、あなたは、メモリを処理する方法を知っている必要があり、どのようにそれが起こるとき、それに対処します。私はちょうど似たような性質のクラッシュがあり、上のすべてがそれに適用されました。 NSXMLの代表者は、リンクが現時点ではアクセスできないポインタを知らずに悪夢...同じAVAudioPlayer

関連する問題