我试图了解如何从音频(或视频)文件生成波形以显示给用户。
我已经在谷歌上搜索了很长一段时间,并且无法在不使用像FFmpeg这样的内容的情况下确定这是否可能。我已经看过所有这些课程:QMediaPlayer,QMediaContent,QMediaResource,QAudioProbe并尝试Qt Media Player Example,但我只是看不到我的位置可以访问实际的音频缓冲区。
所以我有两个问题:
我已尝试过此问题的建议(Audio visualization with QMediaPlayer),但audioProbe->setSource(player)
的结果始终为false且方法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。我在实例化播放器后立即添加了我的代码(在上面的原始评论中)。一旦加载了媒体,我也尝试添加它。
我尝试将我的插槽首先声明为私有,然后将其声明为公开 - 无论哪种方式,都不会被调用。
令人沮丧的是,这么简单的事情太难了。
答案 0 :(得分:1)
走“无外部图书馆”路线可能只会导致更多的头痛和更多的工作。使用已建立的库的另一个好处是,您不会受限于一种文件格式,因为并非所有格式都以相同的方式存储其数据。如果音频格式未压缩(wav或其他),您可以读取标题,直到到达数据块。这个问题的答案here在C中对此进行了详细说明。您应该能够从中了解文件格式以将其应用于其他语言。
您需要了解wav文件中的通道数,位深度以及采样率,然后才能对数据执行任何有价值的操作。所有这些信息都可以从标题中获取。
答案 1 :(得分:1)
事实证明,OSX不支持QAudioProbe
- 我正在开发的平台。花了很长时间(“Qt while ...”)来发现这些信息,所以我明确地在这里发布。
有关详细信息,请参阅此文档:Qt 5.5.0 Multimedia Backends