我的iOS應用程序有4個filePlayer單元連接到AUGraph中的混音器單元。我希望用戶能夠將四個filePlayer單元的「混合」作爲一個.caf文件發送給電子郵件。播放AUGraph時顯示UIActivityIndicatorView
我通過將回調附加到remoteIO並在回調中將混音器的輸出通過ExtAudioFileWriteAsync寫入文件來捕獲混音器的輸出。
我開始了這個過程 - 也就是說我打電話AUGraphStart
- 當用戶點擊我的「導出混合和電子郵件」按鈕。由於AUGraphStart
發生在另一個線程上,我的應用程序接下來在圖形運行時調用MFMailComposeViewController
代碼。此代碼顯示電子郵件表單並將混合的.caf文件附加到電子郵件中。這裏顯而易見的問題是,該文件在創建時並未完全寫入,因爲圖形仍在運行。
要解決此問題,拉開AUGraph開始之後我這樣做:
while ([myMixerObject graphIsRunning]) {
// NSLog(@"...waiting for graph to stop...");
}
graphIsRunning
簡單地調用AUGraphIsRunning
,並返回一個布爾值。
雖然看起來有些呆滯,但它仍然有效,但我一直在繼續。
當AUGraph捕獲混合器的輸出時,當我試圖顯示UIActivityIndicatorView
時,事情變得更加重要。總之,當我這樣做...
[activityIndicator startAnimating];
while ([myMixerObject graphIsRunning]) {
// NSLog(@"...waiting for graph to stop...");
}
[activityIndicator stopAnimating];
...該指標永遠不會出現。
只是爲了踢我把[activityIndicator startAnimating]
內while循環,但它仍然不會出現。
我已經檢查過activityIndicator對象正在被正確實例化(例如,當圖表沒有運行時,我可以讓它出現),所以它讓我相信在AUGraph
運行時調用它有一些特別的東西。
我還是iOS和Core Audio的新手,但我知道某些Core Audio調用發生在實時線程上,所以我的第一個懷疑是有一些併發問題正在進行。但我不知道從哪裏開始。我的while()
循環是從哪裏開始的?我應該以不同的方式接近嗎?
在此先感謝。