私の iOS アプリには、AUGraph の Mixer ユニットに接続された 4 つの filePlayer ユニットがあります。ユーザーが 4 つの filePlayer ユニットの「ミックス」を 1 つの .caf ファイルとして電子メールで送信できるようにしたいと考えています。
コールバックを remoteIO にアタッチし、コールバックで ExtAudioFileWriteAsync を介してミキサーの出力をファイルに書き込むことで、ミキサーの出力をキャプチャしています。
AUGraphStart
ユーザーが [ミックスをエクスポートして電子メールで送信] ボタンをクリックすると、そのプロセスが開始されます。つまり、電話をかけます。別のスレッドで発生するため、グラフの実行中AUGraphStart
にアプリが次にコードを呼び出します。MFMailComposeViewController
このコードは、電子メール フォームを表示し、混合 .caf ファイルを電子メールに添付します。ここで明らかな問題は、グラフがまだ実行されているため、作成されたファイルが完全に書き込まれていないことです。
これを回避するには、AUGraph の開始を開始した直後に次のようにします。
while ([myMixerObject graphIsRunning]) {
// NSLog(@"...waiting for graph to stop...");
}
graphIsRunning
ブール値を呼び出しAUGraphIsRunning
て返すだけです。
滑稽に見えたにもかかわらず、これはうまくいきましたが、私は続けました。
UIActivityIndicatorView
AUGraph がミキサーの出力をキャプチャしているときに を表示しようとすると、さらに問題が発生しました。要するに、私がこれを行うとき...
[activityIndicator startAnimating];
while ([myMixerObject graphIsRunning]) {
// NSLog(@"...waiting for graph to stop...");
}
[activityIndicator stopAnimating];
...インジケーターは表示されません。
キックのために[activityIndicator startAnimating]
whileループの中に入れましたが、まだ表示されません。
activityIndicator オブジェクトが正しくインスタンス化されていることを確認しました (たとえば、グラフが実行されていないときに表示されるようにすることができます) AUGraph
。
私はまだ iOS と Core Audio に慣れていませんが、一部の Core Audio 呼び出しがリアルタイム スレッドで発生することを知っているので、最初に疑うのは、同時実行の問題が発生していることです。しかし、どこから始めればよいかわかりません。while()
問題が始まるのは私のループですか?私はそれを別の方法でアプローチする必要がありますか?