2010-12-08 66 views
1

我在使用QT的Phonon組件播放C++中的用戶交互聲音。經過很多測試後,我可以確認排隊的聲音只會在主線程返回主消息循環時纔開始播放。對於較長的處理代碼,這會在聲音播放中引入延遲。我需要找到一種避免這種延遲的方法。立即用QT聲音發音(不等待事件循環)

我試過在單獨的線程中做聲音,但聲音中的defect阻止在該線程中創建一些對象。因此一些信號總是卡在主線程中。

簡單快速返回到事件循環是不是有幾個原因的選項:

  1. 一些對象創建僅僅是緩慢的,不能加快或很容易做到在一個線程(如數據庫連接)
  2. 聲子使用多個信號,所以即使你很快返回其他信號/事件仍將塊/與聲子的信號

我只是希望涵蓋了完善的API最基本的使用情況的干擾:當用戶做某事時播放聲音ng(比如點擊一個按鈕)並立即播放該聲音。肯定必須在Phonon中以某種方式報道?

+0

您可以嘗試在發出聲音播放後立即調用`QApplication :: processEvents` ... – smerlin 2010-12-08 14:33:27

+0

點#2仍然意味着您無法通過調用processEvents來修復它 - 除非有人可以提供僅用於Phonon的濾波器事件/信號。 – 2010-12-08 14:39:58

回答

1

我還沒有看過qt 4.7中的聲子是否有所改善,但我認爲它用於類似目的(在qt 4.6中)並拒絕它,因爲它無法同時播放/混合兩種聲音。我甚至沒有進行任何運行時測試。我使用了SDL Audio,特別是SDL Mixer,它具有低延遲播放功能,並且可以同時播放多種聲音。