【发布时间】:2014-04-28 11:20:07
【问题描述】:
我正在使用QMediaPlayer 播放音频,并且想要可视化音频电平(例如this video)。
我已经从 Qt 4 文档中找到了一个示例,但他们手动生成信号,我发现无法使用 QMediaPlayer 获取音频输出缓冲区。
我应该如何解决这个问题/是否有其他音频库(跨平台)可以做到这一点?
谢谢
【问题讨论】:
标签: qt audio visualization
我正在使用QMediaPlayer 播放音频,并且想要可视化音频电平(例如this video)。
我已经从 Qt 4 文档中找到了一个示例,但他们手动生成信号,我发现无法使用 QMediaPlayer 获取音频输出缓冲区。
我应该如何解决这个问题/是否有其他音频库(跨平台)可以做到这一点?
谢谢
【问题讨论】:
标签: qt audio visualization
你应该看看QAudioProbe。
QAudioProbe 类允许您监控正在播放或录制的音频。
由于QMediaPlayer 是QMediaObject 的子类,因此您将QAudioProbe 与bool 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 库可能会获得更好的性能,它也可以在音量显示所需的对数刻度上工作。
【讨论】:
QtConcurrent::run 运行 FFT 并在 GUI 中使用 QFutureWatcher 以获取结果以显示它们。