从音频(或视频)文件生成波形?

时间:2015-12-04 19:49:15

标签: qt audio

我试图了解如何从音频(或视频)文件生成波形以显示给用户。

我已经在谷歌上搜索了很长一段时间,并且无法在不使用像FFmpeg这样的内容的情况下确定这是否可能。我已经看过所有这些课程:QMediaPlayerQMediaContentQMediaResourceQAudioProbe并尝试Qt Media Player Example,但我只是看不到我的位置可以访问实际的音频缓冲区。

所以我有两个问题:

  1. 没有第三方图书馆,我想做什么呢?
  2. 如果有可能,可以通过某种灵魂概述我需要阅读和理解的内容以便访问音频数据
  3. 我已尝试过此问题的建议(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已经过测试)不会播放视频

    • 代码中的playerQMediaPlayer - 继承自QMediaObjectPlayer类的示例代码为here。我在实例化播放器后立即添加了我的代码(在上面的原始评论中)。一旦加载了媒体,我也尝试添加它。

    • 我尝试将我的插槽首先声明为私有,然后将其声明为公开 - 无论哪种方式,都不会被调用。

    令人沮丧的是,这么简单的事情太难了。

2 个答案:

答案 0 :(得分:1)

走“无外部图书馆”路线可能只会导致更多的头痛和更多的工作。使用已建立的库的另一个好处是,您不会受限于一种文件格式,因为并非所有格式都以相同的方式存储其数据。如果音频格式未压缩(wav或其他),您可以读取标题,直到到达数据块。这个问题的答案here在C中对此进行了详细说明。您应该能够从中了解文件格式以将其应用于其他语言。

您需要了解wav文件中的通道数,位深度以及采样率,然后才能对数据执行任何有价值的操作。所有这些信息都可以从标题中获取。

答案 1 :(得分:1)

事实证明,OSX不支持QAudioProbe - 我正在开发的平台。花了很长时间(“Qt while ...”)来发现这些信息,所以我明确地在这里发布。

有关详细信息,请参阅此文档:Qt 5.5.0 Multimedia Backends