1

AVAudioPlayer を使用して短いサウンドを再生したいのですが、システム サウンドよりも制御しやすいためです。

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

すべて正常に動作します...例外は...ボタンを押す前にサウンドが停止するのを待つ必要があり、サウンドが再び再生されます。

現在、個々の AVAudioPlayers は viewDidLoad で作成されており、ボタンが押されたときにサウンドが呼び出されて再生されます

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

何か案は?ありがとうジョナサン

4

5 に答える 5

0

再生する前currentTimeに、プレーヤーのをに設定する必要があります。すでに再生中のときに 0[]を呼び出しても効果はありません。player play

player.currentTime = 0;
[player play];
于 2010-07-15T15:46:42.707 に答える
0

新しいものを作成することは問題ありませんが、ヘッダーがこれを宣言して実行していることを確認してください。

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

アプリがシンプルな場合、mahboudzの提案に従って、不要になったすべての処理のメモリが解放されます。

サウンドファイルのサイズやシーンの割り当てを解除した場合、これによってクラッシュが完全に防止されるとは限りません。あなたは追加したいかもしれません

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

か何か。

これはすべてメモリ処理です。ポインタをブラッシュアップして、文字通り任意の関数内でプレーヤーオブジェクトを処理する方法を知り、それでもリリースをdeallocまたはdidFinish:デリゲート関数に配置し、それが他の関数に属していない理由を知りたい場合があります。

iPhoneはいつでも中断、停止、混乱する可能性があるため、メモリの処理方法と、メモリが発生したときの対処方法を知っておく必要があります。私はちょうど同じような性質のクラッシュがあり、上記のすべてがそれに適用されました。NSXMLデリゲートは、ポインタを知らないと悪夢になります...AVAudioPlayerでも同じです

于 2011-12-11T12:24:13.403 に答える
0

たくさんの短いサウンドを使用する予定がある場合は、OpenAL への切り替えを検討することをお勧めします。それほど複雑ではなく、後でより複雑なオーディオ設定で問題が発生することはありません。

チュートリアルと便利なコードがここにあります(ここにアーカイブされています)。

于 2010-10-25T15:09:40.937 に答える
0

これは、viewDidLoad() 内で AVAudioPlayers を作成したためである可能性があります。私は同じ問題を抱えていたことを覚えています。クラス内でそれらを初期化するだけですが、そこにはありません。それがうまくいくことを願っています!

編集: わかりました、日付を見ました... 2009...

于 2019-10-15T23:36:21.023 に答える
0

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

于 2009-11-18T08:44:45.837 に答える