2010-07-24 127 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音频数据而言。