2013-04-04 77 views
2

我想在buttonpress上播放聲音,我有一個工作代碼。按下Qt播放音頻;高效

Phonon::MediaObject *bulletPlay = new Phonon::MediaObject(this); 
bulletPlay -> setCurrentSource(Phonon::MediaSource("newBullet3.wav")); 
playOutput = new Phonon::AudioOutput(Phonon::MusicCategory, this); 
Phonon::createPath(bulletPlay, playOutput); 
bulletPlay->play(); 

但在做所有的按鈕按下這些東西導致性能受到傷害。我瞭解每次光盤訪問都是原因。 (嗯..你可以說,文件將反正在內存中,因此沒有磁盤訪問每個按鈕按下緩衝區緩存和所有..但這個代碼是造成性能嚴重受傷。)

那麼什麼我只是做了

static Phonon::MediaObject *bulletPlay; 
static Phonon::AudioOutput *playOutput; 
static Phonon::MediaSource *filePath; 

在我的課。並在構造函數

bulletPlay = new Phonon::MediaObject(this); 
filePath = new Phonon::MediaSource("newBullet3.wav"); 
bulletPlay -> setCurrentSource(*filePath); 
playOutput = new Phonon::AudioOutput(Phonon::MusicCategory, this); 
Phonon::createPath(bulletPlay, playOutput); 

bulletPlay->play(); on buttonpress。

但它只是第一次播放聲音。因此,似乎我必須每次使用bulletPlay -> setCurrentSource(*filePath);來設置當前資源。那麼我該如何去做呢?我不想每次都設置當前資源..我無法測試應用性能測試也因爲測試是在客戶端..

+0

您是否在調用play()之前嘗試[seek](http://qt-project.org/doc/qt-4.8/phonon-videoplayer.html#seek)? – 2013-04-04 15:25:28

回答

1

你需要在你的類來創建一個單獨的slot的按鈕觸發,而不是直接連接到buttonPlay->play()按鈕。您看到的問題是buttonPlay對象正在使用的音頻緩衝區是「最後」。所以你需要告訴它從頭開始,這是bulletPlay -> setCurrentSource(*filePath);正在爲你做的。你不需要創建一個新的資源,你應該能夠告訴現有的資源重用當前的資源(但只是從頭開始)。