我正在使用OpenGL的Xcode的C++中的一個小應用程序。 我試圖找到一種方法來添加簡單的聲音到我的應用程序。我沒有使用OpenAL取得太大成功(Alut在Mac中不可用),並且無法使sfml和SDL在我的系統上運行。所以我決定嘗試蘋果的PlayFile例如:使用PlayFile蘋果示例與OpenGL凍結OpenGL,直到播放聲音結束
我可以用這個例子播放聲音。但是,當聲音開始播放時,OpenGL凍結,即所有動畫停止,直到聲音播放完畢。
我檢查了文件PlayFile.cpp,發現這一行:
usleep ((int)(fileDuration * 1000. * 1000.));
我認爲這是負責凍結的OpenGL。在這一行之前,我們開始播放聲音。在這一行之後,我們清理緩衝區。有沒有什麼方法可以改變代碼,讓聲音開始播放,OpenGL繼續執行任務,一旦聲音播放完畢,我們清理緩衝區?我嘗試使用其他解決方案(如指針)在開始播放後清理,但現在我無法從應用程序中發出任何聲音。
有什麼建議嗎?
+1:我覺得你很高興能回來你找到的答案,並分享它=) – Kahler 2014-04-09 22:34:27
這是合理的,如果你使用簡單的聲音播放簡單。然而,「PlayFile」是一個完整的命令行應用程序(現在它的鏈接已經死了)放在了CoreAudio上,它有一個非常強大的_non-blocking_實時線程,並且其實時回調不應該干擾OpenGL。所以,阻止你的OpenGL繪圖與CoreAudio無關,它與「PlayFile」的製作方式有關。 – user3078414 2016-05-31 10:24:50