私はいくつかのサウンドを再生するAVAudioPlayerのインスタンスを持っています。 AVAudioPlayerインスタンスに新しいサウンドを提供する方法はありますか、initWithDataを使用して新しいインスタンスを作成する必要がありますか:別のサウンド用のAVAudioPlayerの再利用
答えて
通常、オブジェクトを再利用するのは悪い考えです。通常、オブジェクトをできるだけ短命にするようにしてください。これにより、コードの可能な状態の数が減り、それについての推論が容易になります。 ( "この値はどこから来たのでしょうか?以前のインスタンスの使用状況から残っているかもしれませんか?" Yuck。)測定可能な問題に遭遇した後でのみ、このルールを破ります。
この考え方に沿ってさらに読むには、questions tagged “immutable”を参照してください。
既存のAVAudioPlayerインスタンスに新しいファイルを渡すAPIはありません。しかし、AVAudioPlayerの作成は高価ではないので、完了後にインスタンスをリリースすれば、パフォーマンスは気にする必要はありません。
お互いに再生される、または繰り返し再生される可能性のある固定サウンドセットがある場合は、適切なインスタンスでplay
を呼び出すことによって、各サウンドごとに1つのAVAudioPlayerインスタンスを作成して再利用できます。
一度に1つのサウンドだけが再生され、新しいサウンドが生成されている場合(たとえば、ユーザーの入力に基づくテキスト読み上げの場合)、通常は1つのプレーヤーがプロパティとして使用されます。新しいサウンドが再生されると、私は[player stop]
に電話し、古いプレーヤーを解放し、新しいサウンドファイルで新しいものをインスタンス化します。
ええ、私はこの質問をGoogleで検索しました。新しいAVAudioPlayerをたくさん作成するとパフォーマンスが低下すると考えたからです。あなたの答えはすぐに私の質問を解決します。 1)AVAudioPlayerのファイルを変更する方法がない2)AVAudioPlayerを作成するのは高価ではありません。 –
これは受け入れられた答えでなければなりません。 – Herm
ARCの提案はありますか? – piperchester
- 1. AVAudioPlayerオブジェクトに別のサウンドを再生するための値を送信する
- 2. iPhoneのサイレントモードでAVAudioPlayerを使用してサウンドを再生する方法
- 3. AVAudioRecorderとAVAudioPlayerを同時に使用する(またはサウンドと再生音を聴く別の方法)
- 4. AVAudioPlayerでサウンドを再生した後にバックグラウンドオーディオを再開
- 5. AVAudioplayerで一度に1つのサウンドを再生する方法
- 6. AVAudioPlayerを使用してさまざまなサウンドを再生する
- 7. カスタムセルの再利用
- 8. スイッチステートメントロジックの再利用
- 9. UIWebViewの再利用
- 10. UIViewの再利用
- 11. プッシュ通知用の別のサウンド
- 12. AVAudioPlayerでサウンドが再生されませんか?
- 13. AVAudioPlayerがmp3サウンドを再生していません
- 14. 別のクラスファイルからAppWidgetへの変数の再利用
- 15. 別のエリアにPDOクエリブロックの再利用のベストプラクティス
- 16. 再利用アクションメーラテンプレート
- 17. WPF - 再利用
- 18. 再利用フラグメント
- 19. 再利用値
- 20. Androidソケットの再利用
- 21. UITableViewとセルの再利用
- 22. Javaライブラリの再利用
- 23. SqlConnectionとSqlDataReaderの再利用
- 24. Oracleリファクタの再利用
- 25. LINQ to SQL:DataContextの再利用
- 26. GWTのウィジェットを再利用
- 27. Angular2ローカルコンポーネント/テンプレートの再利用
- 28. RequestDispatcherオブジェクトの再利用
- 29. Springコードの再利用
- 30. PHP Unixソケットファイルの再利用
これは@Fernandoの質問に対する答えではなく、一般化されすぎています。オブジェクトの再利用が新しいオブジェクトの作成より優れたアプローチである多くのコンテキストがあります。 –
私はクリストファーが正しいと思います。パフォーマンス上の理由からです。たとえば、テーブルビューは既存のセルを再利用し、Appleは明示的にそれを推奨します。少なくともクリストファーがしたように、あなたはポスターの質問に「ファイルを変更する方法はありません」と答えました。 –
テーブルビューはハードパフォーマンス要件(スクロール)を満たす必要があるため、特別なケースです。しかし、一般的に、新しいオブジェクト構築のパフォーマンスコストは今日かなり低く、パフォーマンス問題になるまでオブジェクトを再利用することは悪い考えです。 – zoul