2010-07-24 125 views
1

我想開發一個使用Qt的音頻編輯器。 爲此,我需要繪製音樂曲目的波形,我認爲它應該是音量峯值幅度與時間的關係曲線(如果我錯了,請糾正我)。音軌的振幅

目前,我一直使用Phonon :: AudioOutput類對象作爲音頻接收器,並將其與我的Phonon :: MediaObject類對象連接以播放音頻文件。

現在,爲了繪製波形,我需要從該AudioOutput對象的每一秒鐘(或大約)知道音軌的振幅,以便我可以繪製一條長度與聲音頻率成正比的線(使用QPainter)次,因此,獲得我的波形。

因此,請幫助我瞭解如何在不同時間獲得音軌的幅度。

其次,我是否使用繪製音軌波形的正確方式 - 通過QPainter對象在不同時間在小部件上繪製線條來繪製聲音的時間幅度。

謝謝。

+0

您的術語有點混亂。 「波形」與「峯值振幅」不同。 (峯值在什麼時間間隔?)然後你提到「長度與聲音頻率成比例」,這將是一個奇怪的情節。你是否試圖顯示一個頻譜,其中每個點代表一個頻率,並且該點處該線的高度代表該頻率下的功率?請澄清! – 2010-07-24 19:23:08

回答

2

在Qt附帶的Spectrum Analyzer示例中(在演示/頻譜目錄中),有代碼可以處理您提出的兩個問題(計算峯值幅度和繪製音頻波形)。

Screenshot of Spectrum Analyzer demo running on Symbian http://labs.trolltech.com/blogs/wp-content/uploads/2010/05/spectrum.png

此演示也計算並顯示的頻譜。正如另一位評論者指出的那樣,這與波形圖不同:頻譜是幅度與頻率的關係曲線,而波形描繪幅度與時間的關係。

該演示使用QtMultimedia而不是Phonon來捕捉和渲染音頻。如果您只對播放音頻感興趣,並且不需要記錄它,Phonon可能就足夠了,但請注意,流式傳輸支持(即Phonon::MediaSource(QIODevice *))在所有平臺上都不可用。另一方面,QAudioInputQAudioOutput在Qt目標平臺的所有主平臺上都得到了很好的支持,至少對於PCM音頻數據而言。