3

iOS には、指定したファイルを単純に再生できる高レベルのものから、生の PCM データを取得できる低レベルのものまで、さまざまなオーディオ フレームワークがあります。私たちのアプリでは、外部ファイル (WAV、AIFF、MP3) を再生するだけで済みますが、ボタンを押したときに再生する必要があり、その遅延をできるだけ小さくする必要があります。(ライブプロダクションでのキューイング用です。)

現在、AVAudioPlayer などは (URL を介して) 単純なファイル アセットを再生するように機能しますが、実際にサウンドを開始する際の遅延が大きすぎます。長さが 5 分を超える大きなファイルでは、サウンドを開始するまでの遅延が 1 秒を超える可能性があり、ライブ パフォーマンスのタイミングにはほとんど役に立ちません。

これで、openAL などを使用して非常に低レイテンシの再生ができることはわかっていますが、オーディオ バッファ、オーディオ ソース、リスナーなどに深く関わっています。

とはいえ、非常に低いレイテンシーでより高いレベルで動作する (つまり、'MyBeddingTrack.mp3' を再生する) フレームワークを知っている人はいますか? 事前バッファリングは問題ありません。トリガーが速くなければならないだけです。

ファイル内で再生の開始点と終了点を設定したり、音量を変更したり、ダッキングを実行したりするなどのことができればボーナスです。

4

7 に答える 7

3

Audio Queue フレームワークは比較的使いやすいですが.. 舞台裏で多くの DSP 重労働をパックします (つまり、VBR/圧縮オーディオを供給する場合.. スピーカーで再生する前に自動的に PCM に変換します..また、エンド ユーザーのスレッドに関する多くの問題を不透明に処理します。これは、軽量の非リアルタイム アプリケーションを実行しているユーザーにとって朗報です。

ライブプロダクションでキューに入れるために必要だとおっしゃいました。それがあなたのアプリがリアルタイムであることを意味するかどうかはわかりません..もしそうなら..Audio Queueはあなたのニーズを満たすのに苦労するでしょう. これについて読むのに適した記事は、Ross Bencina の. 重要なのは、サードパーティのフレームワークやライブラリに、スレッドのロック、割り当て解除、割り当て解除など、舞台裏で潜在的にコストがかかる可能性のあることを実行させる余裕がないということです。これは、リアルタイム オーディオ アプリの開発にはコストがかかりすぎて危険です。 .

そこで、Audio Unit フレームワークの出番です。Audio Queue は、実際には Audio Unit フレームワークの上に構築されています (多くの作業を自動化します)。しかし、Audio Unit は、iOS で得られるのと同じくらい金属に近づけます。必要に応じて応答性が高く、リアルタイム アプリを簡単に実行できます。ただし、Audio Unit には膨大な学習曲線があります。ただし、それを簡素化するオープンソースラッパーがいくつかあります(novocaineを参照)。

もし私があなただったら..少なくともLearning Core Audioにざっと目を通します..iOSコアオーディオ開発者のための本です..Audio Queues、Audio Unitsなどについて詳しく説明し、優れたコードがあります..

私自身の経験から..私はいくつかの集中的なオーディオ要件を持つリアルタイムオーディオアプリに取り組みました..Audio Queueフレームワークを見つけて、それは本当であるには良すぎると思いました..軽い制限でプロトタイプを作成したとき、私のアプリは機能しました. ..しかし、ストレステストで単に窒息しました..そのとき、オーディオユニットに深く入り込み、アーキテクチャなどを変更する必要がありました(きれいではありませんでした)。私のアドバイス: 少なくとも Audio Units の導入として Audio Queue を使用してください..それがあなたのニーズを満たしているなら、それを使い続けてください。 .

于 2013-02-03T21:08:31.817 に答える
2

あなたが得ることができる最小のレイテンシーは、Audio Units、RemoteIO です。

リモートI/Oユニット

リモート I/O ユニット (サブタイプ kAudioUnitSubType_RemoteIO) は、入力、出力、または同時入力と出力のためにデバイス ハードウェアに接続します。再生、録音、またはエコー キャンセルが不要な低遅延の同時入出力に使用します。

このチュートリアルを見てください:

http://atastypixel.com/blog/using-remoteio-audio-unit/

http://atastypixel.com/blog/playing-audio-in-time-using-remote-io/

于 2013-01-29T03:24:24.167 に答える
1

次のSO の質問には、Audio Units、特に AudioFilePlayer を使用してファイルを再生する作業コードが含まれています。AUGraphStart(_graph)質問には機能していないと記載されていますが、私にとってはそのままで機能しました-最後に a を追加するだけです。

AudioFilePlayer の「ScheduledFilePrime」プロパティは、再生を開始する前にロードするファイルの量を示します。あなたはそれで遊んでみたいかもしれません。

しかし、他の人が指摘しているように、Audio Units の学習曲線は急勾配です。

于 2013-07-05T13:06:26.733 に答える
1

システム サウンド フレームワークが必要です。システム サウンド フレームワークは、インターフェイス サウンドや応答性の高いサウンドを使用するために作成されています。ここを見てください。

于 2013-01-25T00:03:28.557 に答える
1

私はあなたと同じ問題に遭遇しましたが、しばらく調査した後、素晴らしいフレームワークを見つけました。現在、kstenerud の ObjectAL サウンド フレームワークを使用しています。これは OpenAL に基づいており、十分なドキュメントがあります。複数のレイヤーを使用して BGM と効果音を再生できます。

github のプロジェクトは こちらhttps://github.com/kstenerud/ObjectAL-for-iPhone Web サイトはこちらhttp://kstenerud.github.com/ObjectAL-for-iPhone/index.html

于 2013-01-25T01:13:06.577 に答える
1

AVAudioPlayerには、prepareToPlayオーディオ バッファをプリロードするメソッドがあります。これにより、応答時間が大幅に短縮される場合があります。

于 2013-01-25T00:08:45.730 に答える
1

Audio Queue フレームワークを使用します。https://developer.apple.com/library/mac/ipad/#documentation/MusicAudio/Conceptual/AudioQueueProgrammingGuide/Introduction/Introduction.html

于 2013-01-25T05:03:53.257 に答える