別の方法で解決策を見つけました。2 つのオーディオ ユニットで構成されるオーディオ グラフを使用しました。デジタルミキサーと出力オーディオユニット。6 つの楽器を同時に演奏できるように、6 つのチャンネルを持つミキサーを作成しました。ユーザーが音楽を作成すると、コンテンツが保存され、オフライン レコーディング中に、保存された楽器がミキサーにシーケンスされます。
パフォーマンスを向上させるために、新しいオーディオ ファイルまたはインストゥルメント ファイルをロードする間、オーディオ グラフを停止します。ファイルをロードした後、記録が再開されます。
ミキサーの入力再生機能では、入力バス番号に応じてオーディオパケットがミキサーに送られます。出力オーディオユニットの入力再生では、ミキサー出力を格納するために新しいバッファが割り当てられます。ミキサー出力は、オーディオ レンダリング機能を使用して作成されました。私はオーディオ入力バッファを変更していなかったので、アプリの外に音はありません。最後に、オフラインのオーディオレコーダーを手に入れました。
手順
- 録音および再生モードを使用してオーディオ セッションを作成する
- ミキサーとオーディオ出力ユニットを使用してオーディオ グラフを作成します。
- ミキサー チャネルまたは入力バス番号 (オーディオ ストリームの数) を構成します。
- ミキサーとオーディオユニットの入力再生メソッドを作成します。
- ソースと宛先のオーディオ形式をオーディオ ユニットの入力バスと出力バスに構成します。
- 宛先形式を使用してオーディオ ファイルを作成します (AAC エンコーディングの場合は、AAC エンコーディングのサポートを確認します)。
- オーディオ ファイルを取得し、指定されたチャネルのオーディオ パケットを提供する方法を開発します。
- ミキサーのオーディオ入力再生で、オーディオファイルのフェッチを設定します。
- 出力ユニットのオーディオ入力再生では、オーディオ レンダリング関数を使用して、ミキサー出力を新しいオーディオ バッファにフェッチします。オーディオ バッファを開いているオーディオ ファイルに保存します。
- オーディオ グラフ停止メソッドを使用して録音を一時停止し、オーディオ グラフ開始メソッドを使用して録音を再開します。この間に、新しいサウンド ファイルのフェッチを構成します。
- 最後に録音を停止し、オーディオ ファイルを閉じます。