在Qt和c++中改变mp3速度[QMediaPlayer]

Changin mp3 speed in Qt and C++ [QMediaPlayer]

本文关键字:速度 QMediaPlayer mp3 改变 Qt c++      更新时间:2023-10-16

我正在尝试开发一个小应用程序,您可以在其中加载mp3文件并以可变速度播放它!(我知道它已经存在了:-))

我正在使用Qt和c++。我已经有了基本的播放器,但我被困在速率的东西,因为我想改变速率平滑(像在Mixxx)而不停止播放!QMediaPlayer总是停止,如果我改变值,并在声音中创建一个间隙。我也不希望球场改变!

我已经找到了一个叫"SoundTouch"的东西,但现在我完全不知道该怎么用它,如何处理我的mp3数据以及如何将它传输到播放器上!"SoundTouch"库能够做我想做的,我从主页上的样本中得到了这一点。

  • 我如何导入mp3文件,这样我就可以用SoundTouch函数处理它
  • 如何播放SoundTouch函数的输出?(也许QMediaPlayer可以做这项工作?)
  • 这些东西是怎么现场完成的?我想我得做点直播?所以我可以在比赛过程中改变速度,没有间隙地继续比赛。在我的脑海中,它必须是位于数据和玩家之间的东西,所有数据都必须实时通过,后面有一个小缓冲区(20-50毫秒左右),以避免在处理未来数据时出现间隙。

感谢任何帮助!我也愿意接受任何其他解决方案然后"SoundTouch",只要我能留在Qt/c++ !

(第二件事:我想查看波形概述以及移动它的一部分(围绕歌曲的实际位置),所以我也可以使用如何获得波形数据的提示)

提前感谢!

截至目前(Qt 5.5),这是不可能做到与QMediaPlayer只有。您需要执行以下操作:

  • 解码音频使用GStreamer, FFMpeg或(新的)QAudioDecoder: http://doc.qt.io/qt-5/qaudiodecoder.html -这将给你原始的PCM流;

  • 应用SoundTouch或其他一些库到这个原始数据来改变音高。如果GPL是可以的,看看http://nsound.sourceforge.net/examples/index.html,如果你开发专有的东西,STK可能是一个更好的选择:https://ccrma.stanford.edu/software/stk/

  • 使用QAudioOutput将修改后的数据输出到音频设备

此策略尽可能使用Qt,并为您带来最好的平台覆盖率(您仍然失去Android,尽管它不支持QAudioOutput)