【发布时间】:2015-12-04 19:49:15
【问题描述】:
我试图了解如何从音频(或视频)文件生成波形以显示给用户。
我已经在谷歌上搜索了很长一段时间,如果不使用 FFmpeg 之类的东西,我无法确定这在 Qt 中是否可行。我已经看过所有这些类:QMediaPlayer、QMediaContent、QMediaResource、QAudioProbe 并尝试了Qt Media Player Example,但我只是看不到我可以访问实际音频缓冲区的位置。
所以我有两个问题:
- 如果没有 3rd 方库,我想做的事情是否可行?
- 如果可能的话,能否请某种灵魂概述我需要阅读和理解的内容才能访问音频数据
我已经尝试过这个问题 (Audio visualization with QMediaPlayer) 的建议,但 audioProbe->setSource(player) 的结果总是错误的,并且方法 processBuffer 永远不会被调用。
audioProbe = new QAudioProbe(this);
bool success = audioProbe->setSource(player);
qDebug() << success;
connect(audioProbe, SIGNAL(audioBufferProbed(QAudioBuffer)), this, SLOT(processBuffer(QAudioBuffer)));
更新:添加一些额外的细节,希望能澄清事情。
为了测试/学习,我使用的是 Qt 附带的 Media Player Example,因此它与
Q_OBJECT等一起正确设置。对于音频,我使用 .mp3 和 .wav 文件进行了测试。 FWIW,
player示例由于某种原因无法播放视频(.mp4、.avi 已测试)代码中的
player是QMediaPlayer——它继承自QMediaObject。Player类的示例代码是 here。我在播放器实例化后立即添加了我的代码(在上面的原始评论中)。我还尝试在加载媒体后添加它。我尝试先将我的插槽声明为私有,然后再声明为公共 - 无论哪种方式,它都不会被调用。
这么简单的事情这么难,真让人沮丧。
【问题讨论】:
-
你在哪个平台上?