我试图了解如何从音频(或视频)文件生成一个波形,以显示给用户。
我已经在谷歌上搜索了很长一段时间了,如果不使用类似FFmpeg的东西,就无法确定Qt中是否可能出现这种情况。我见过所有这些类:QMediaPlayer、QMediaContent、QMediaResource、QAudioProbe,并对Qt媒体播放器示例进行了实验,但我只是不知道在哪里可以访问实际的音频缓冲区。
所以我有两个问题:
我尝试过这个问题(基于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)));更新:添加了一些额外的细节,希望能澄清问题。
Q_OBJECT等正确设置的。player示例由于某种原因不播放视频(.mp4,.avi测试过)player是QMediaPlayer --它继承自QMediaObject。Player类的示例代码是这里。我在播放器实例化之后添加了我的代码(在上面的原始注释中)。我还试着在加载媒体之后添加它。这么简单的事情这么难,真让人沮丧。
发布于 2015-12-04 20:11:43
走“没有外部库”的路线可能只会导致更多的麻烦和更多的工作是必要的。使用已建立的库的另一个优点是,您不会绑定到一种文件格式,因为并非所有格式都以相同的方式存储数据。如果音频格式是未压缩的(wav或其他),您可以读取报头,直到您到达数据块。这里对这个问题的回答在C中详细说明了这一点。您应该能够从这个问题中了解文件格式,以便将其应用于另一种语言。
您将需要了解wav文件中有多少通道、位深度以及采样率,然后才能对数据做任何有价值的操作。所有这些信息可以从头部抓取。
发布于 2015-12-05 23:55:55
事实证明,OSX不支持QAudioProbe --这是我正在开发的平台。花了很长时间( "Qt时间……“)我把它显式地张贴在这里。
有关详细信息,请参阅本文档:QT5.5.0多媒体后端
https://stackoverflow.com/questions/34096322
复制相似问题