【问题标题】:Audio visualization with QMediaPlayer使用 QMediaPlayer 进行音频可视化
【发布时间】:2014-04-28 11:20:07
【问题描述】:

我正在使用QMediaPlayer 播放音频,并且想要可视化音频电平(例如this video)。
我已经从 Qt 4 文档中找到了一个示例,但他们手动生成信号,我发现无法使用 QMediaPlayer 获取音频输出缓冲区。
我应该如何解决这个问题/是否有其他音频库(跨平台)可以做到这一点?

谢谢

【问题讨论】:

    标签: qt audio visualization


    【解决方案1】:

    你应该看看QAudioProbe

    QAudioProbe 类允许您监控正在播放或录制的音频。

    由于QMediaPlayerQMediaObject 的子类,因此您将QAudioProbebool QAudioProbe::setSource(QMediaObject* source) 连接到QMediaPlayer,然后连接到void QAudioProbe::audioBufferProbed(const QAudioBuffer& buffer) 信号。该文档提供了一个示例。

    audioBufferProbed 信号的槽中,您可以处理原始音频数据以计算音量,例如通过计算样本的RMS。看看这个article on calculating the RMS efficiently

    要显示音量,您可以使用QProgressBar,但使用Qt Widgets for Technical Applications 库可能会获得更好的性能,它也可以在音量显示所需的对数刻度上工作。

    【讨论】:

    • 谢谢,这正是我要搜索的内容。
    • 我正在尝试做类似的事情并使用 audioBufferProbed 信号来捕获缓冲区,但问题是这个信号很快就会发出,即两次发射之间的差异接近 10 毫秒。有没有办法控制这个信号的发射?因此,在插槽中进行的 fft 处理被搞砸了。我这样做对吗?
    • @astre 我认为没有任何方法可以控制信号速率。您可以创建一个代理类来执行此操作以将多个信号批处理在一起。或者,您可能希望在另一个线程中执行 FFT,例如使用 QtConcurrent::run 运行 FFT 并在 GUI 中使用 QFutureWatcher 以获取结果以显示它们。
    猜你喜欢
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 2022-11-20
    相关资源
    最近更新 更多