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

C++ 在Qt和C+中改变mp3速度+;[QMediaPlayer],c++,qt,qmediaplayer,playback-rate,C++,Qt,Qmediaplayer,Playback Rate,我正在尝试开发一个小应用程序,你可以加载一个mp3文件,并以不同的速度播放它!(我知道它已经存在:-) 我使用QT和C++。我已经有了基本的播放器,但我仍然坚持使用速率,因为我想在不停止播放的情况下平滑地改变速率(就像在Mixxx中一样)!如果我更改了值并在声音中创建了间隙,则QMediaPlayer始终停止。我也不想让球场改变 我已经找到了一种叫做“SoundTouch”的东西,但现在我完全不知道该如何使用它,如何处理我的mp3数据,以及如何将其传送到播放器!“SoundTouch”库可以做我

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

<>我使用QT和C++。我已经有了基本的播放器,但我仍然坚持使用速率,因为我想在不停止播放的情况下平滑地改变速率(就像在Mixxx中一样)!如果我更改了值并在声音中创建了间隙,则QMediaPlayer始终停止。我也不想让球场改变

我已经找到了一种叫做“SoundTouch”的东西,但现在我完全不知道该如何使用它,如何处理我的mp3数据,以及如何将其传送到播放器!“SoundTouch”库可以做我想做的事情,这是我从网上的样本中得到的

  • 如何导入mp3文件,以便使用SoundTouch功能进行处理
  • 如何播放SoundTouch功能的输出?(也许QMediaPlayer可以完成这项工作?)
  • 这些东西是怎么现场制作的?我想我得做点什么?因此,我可以在比赛中改变速度,并在没有间隙的情况下继续比赛。在我的脑海中,它必须是介于数据和播放器之间的东西,所有数据都必须实时通过,后面有一个小缓冲区(20-50毫秒左右),以避免在处理未来数据时出现间隙
感谢您的帮助我也愿意接受任何其他解决方案然后是“SoundTouch”,只要我能继续使用Qt/C++

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

提前谢谢

到目前为止(Qt5.5),仅使用QMediaPlayer是不可能做到这一点的。您需要执行以下操作:

  • 使用GStreamer、FFMpeg或(新)QAudioDecoder解码音频:-这将为您提供原始PCM流

  • 将SoundTouch或其他库应用于此原始数据以更改音高。如果GPL还可以,请看一看,如果您开发专有的东西,STK可能是一个更好的选择:

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

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