問題タブ [remoteio]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - ExtAudioFileRead を使用した .caf オーディオ ファイルの再生が同期されない
私のアプリは、マイク入力からのオーディオに対して膨大なデータ処理を行っています。「デモ モード」を取得するために、ローカルの .caf オーディオ ファイルに基づいて同じことを行いたいと考えています。音声ファイルを取得することができました。ExtAudioFileRead を使用して .caf ファイルを読み取り、データ処理を実行しようとしています。
このコードがまったく機能しないため、ExtAudioFileRead を理解していなかったり、間違っていることが明らかにあります。私には2つの主な問題があります:
- ファイルは瞬時に再生されます。つまり、44'100 サンプルは明らかに 1 秒に等しくありません。3 分間の音声ファイルの処理が数秒で完了します...
- 処理中に、UI を更新する必要があります。そのため、 とにいくつかの dispatch_sync が
processaudio
ありrealtimeUpdate
ます。これは ExtAudioFileRead ではあまり評価されていないようで、フリーズします。助けてくれてありがとう。
core-audio - マルチチャンネルミキサー+音声処理IOユニット
kAudioUnitSubType_RemoteIO
私は AUGraph をセットアップして動作させています。これは、スピーカーに出力するために RemoteIO () ユニットに供給するマルチチャンネル ミキサー (単一のモノラル入力を備えた) で構成されています。左と右のハードウェア出力チャンネル間でオーディオ ソースをパンできるように、シングル入力ミキサーを実装しました。これはうまくいきます。
これは VOIP アプリケーションでkAudioUnitSubType_VoiceProcessingIO
あるため、リモート IO ユニット ( kAudioUnitSubType_RemoteIO
) の代わりに音声処理 IO ユニット ( ) を使用して実験を行っています。Apple の説明によると、このユニットはいくつかの追加機能を備えたリモート IO ユニットのように動作するはずです...
音声処理 I/O ユニット (サブタイプ
kAudioUnitSubType_VoiceProcessingIO
) は、リモート I/O ユニットの特性を持ち、双方向の二重通信用にエコー抑制を追加します。また、自動ゲイン補正、音声処理品質の調整、およびミュートも追加されています。これは、VoIP (Voice over Internet Protocol) アプリに使用する正しい I/O ユニットです。
しかし、音声処理 IO ユニットに切り替えると、ミキサーを使用してパンする機能が失われることに注意してください。ここで何が起こっているかについてのアイデアはありますか? 音声処理 IO ユニットは本質的にモノフォニックですか?
ios - Audio Output Unit の入力コールバックで許可されるアクション
オーディオ出力ユニットを使用してマイク データをキャプチャしています。kAudioOutputUnit_SetInputCallback プロパティを使用して設定したコールバックを介して読み取るデータがあることを通知され、コールバックで AudioUnitRender() を呼び出してデータを読み取ります。
最終的には、このデータを分析して抽出した情報に基づいて、アプリのユーザー インターフェイスを更新します。したがって、ある段階でメイン キューに対して dispatch_async を実行する必要があります。分析は適度に時間がかかり、AudioUnitRender() から取得したものよりもかなり大きなチャンクで行われるため、負荷がバーストします。
私の質問は、入力コールバック自体の実装で受け入れられると見なされる操作は何ですか? レンダーコールバックに対する厳密な制限 (メモリ割り当てなし、I/O なし、他のスレッドとの同期なしなど) を述べている情報源をたくさん見つけましたが、入力コールバックに関する情報はまったくありません。
レンダー コールバックと同じルールに従うと、少し難しい問題があります。dispatch_async() 自体はメモリを割り当てるので望ましくなく、いずれにせよ負荷はバースト的です (一部のターンでは 1 レンダー サイクルよりも簡単に長くなり、他のターンでは実質的にゼロになる可能性があります)。したがって、データをワーカー スレッドに送信して処理し、dispatch_async() 呼び出しを行う必要があるようです。ただし、このワーカー スレッドへのデータの受け渡しを管理する必要があります。(C++ での) 最も簡単な方法は、循環バッファーに加えて、データが利用可能になったときに通知するミューテックスと条件変数を使用することです。ただし、これには入力コールバックでミューテックスをロックする必要があり、レンダー コールバックに関するガイドラインでは明示的に推奨されていません。
このミューテックス ロックを回避すると、循環バッファー、セマフォ (POSIX または GCD)、スピンロックなどをロック解除する必要があります。この件に関するドキュメントが驚くほど不足しており、舞台裏で実際に何が起こっているのかわかりません。入力コールバックの実装でミューテックス (別のスレッドによってロックされることはめったになく、短時間だけ) を待機することについて本当に心配する必要がありますか?
ios - リモート I/O ユニットからの生のオーディオ データの測定単位は何ですか?
以下に示すように、リモート I/O ユニットを使用して生のオーディオ データを録音しています。
この未加工のオーディオ データの測定単位は何ですか (mBuffers[0].mData、AudioBuffer 構造体を参照する場合、これは void ポインターです)。
パスカルですか、それともミリボルト (mV) ですか? 前もって感謝します。
c - Core Audio - リモート IO の混乱
iOS での remoteIO audiounit コールバックの動作の解釈に問題があります。入力コールバックと「レンダリング」コールバックの 2 つのコールバックを持つ remoteIO ユニットを設定しています。このおいしいピクセルチュートリアルで推奨されているものと非常によく似た remoteIO セットアップに従っています。これはかなり長い設定方法です:
コールバックで奇妙な動作が発生します。まず、playbackCallback
チュートリアルと同じ方法でプロパティを設定しているにもかかわらず、関数はまったく呼び出されません (チュートリアルは Loopy アプリを作成した人によるものです)。
次に、入力コールバックには ioData (audioBufferList) パラメーターがあり、(ドキュメントによると) null である必要がありますが、2 回目のコールバックで null と非 nil 値の間で反転しています。これは誰にとっても意味がありますか?
さらに、audiounitRender
入力コールバック (API ロジックやライフサイクルなどの点でまだ理解していないセマンティクス) を呼び出すと、非常に一般的な「不正なパラメーター」である -50 エラーが発生します。これは、インターリーブ/デインターリーブ、チャネル数などの無効な「トポロジ」が原因である可能性が最も高いaudiobufferlist
です。ただし、さまざまなトポロジを試しましたが、エラーは発生しませんでした。また、それは奇妙な ioData の動作を説明していません。参照用の関数は次のとおりです。
私の経験は、フォーマットの単純なエラー、または間違ったスコープで間違ったバスを使用している、またはその他の些細な (コア オーディオ コンテキスト エラーで簡単に発生する) ことが原因である可能性があると思います。しかし、私は基本的にセマンティクスとライフサイクル フローに対する直感がないため (スキーム?、何語を使用すればよいかさえわかりません)、これを適切にデバッグすることはできません。この状況に光を当てる可能性がある、より経験豊富なコアオーディオプログラマーからの助けを大いに感謝します.
ios - iOS オーディオ ユニットの公開
アプリ間オーディオ iOS アプリを作成しようとしていますが、AudioOutputUnitPublish
方法に問題があるようです。メソッドは次のとおりです。
これが私のplist情報です:
これは私が得ている結果です:
OSStatus コード -50 は、無効なパラメーターがあることを意味します...しかし、どれが無効なのかわかりません。ここでデバッグを手伝ってくれる人はいますか? ありがとう!
編集 :
他の人が私をもっと助けてくれるように、もっと多くのコードを投稿したかっただけです:
私は 2 つのオーディオ ユニットとできれば 3 つ目のオーディオ ユニットを持っています。MIDISynth (現在は非アクティブ)、MultiChannelMixer、および RemoteIO オーディオ ユニットです。ミキサー オーディオ ユニットにレンダー コールバックをアタッチしました。私は AUGraph で何か間違った接続をしていると推測しています (私が見た例のどれも、オーディオ レンダリング コールバックをオーディオ ユニットにアタッチしていないので、これは私が何か間違ったことをしている場所かもしれません)。誰かが私が間違っていることを見つけてくれることを願っています!
コードは次のとおりです。
ios10 - 実行時の RemoteIO 構成
マイクからの入力を取得して再生する RemoteIO ユニットのセットアップがあります。再生は、ボタンをタップするだけでいつでも有効または無効にすることができます。私の質問は、再生を有効または無効にする呼び出しでは、オーディオユニットを停止、初期化解除してから構成する必要があるか、または停止と初期化解除がまったく必要ないのですか? これは、RIO の実行時に実行時に再生を有効または無効にするために使用するサンプル コードです。
ios11 - AVAudioSession RemoteIO playAndRecord
AVAudioSession API は iOS7 からかなり進化しており、混乱を招くことが多いと思います。私の目的は、RemoteIO ユニットをセットアップし、マイクからオーディオを録音し、ヘッドフォンで同時にサンプルを再生することです。ヘッドフォンが存在しない場合は、再生しないでください。Bluetooth マイクが存在する場合は、ヘッドセット マイクまたは USB マイクの代わりに優先マイクとして選択します。別のヘッドフォンが存在する場合は、それを通してサンプルを再生します。同じ bluetooth マイクにヘッドセット機能もある場合は、ループバックして混乱を招くため、サンプルを再生しないようにしてください。
これを行うための適切な API は何ですか? 現在、次のコードを使用していますが、完全には機能しません。
代わりに AVAudioSessionCategoryMultiRoute を使用する必要がありますか? 優先する入力と出力を選択するにはどうすればよいですか? iOS 11 では、API の動作が異なることがわかります。