我正在尝试开发一个小应用程序,您可以在其中加载 mp3 文件并以可变速度播放它! (我知道它已经存在 :-) )
我正在使用 Qt 和 C++。我已经有了基本的播放器,但我仍然坚持使用速率,因为我想在不停止播放的情况下平滑地更改速率(就像在 Mixxx 中一样)!如果我更改值并在声音中产生间隙,QMediaPlayer 总是会停止。我也不想改变音调!
我已经找到了一个叫做“SoundTouch”的东西,但现在我完全不知道如何处理它,如何处理我的 mp3 数据以及如何将它提供给播放器! “SoundTouch”库能够做我想做的事,我从 homepage 上的样本中得到了它.
- 如何导入 mp3 文件,以便使用 SoundTouch 功能处理它
- 如何播放 SoundTouch 功能的输出? (也许 QMediaPlayer 可以胜任这项工作?)
- 这些东西是如何现场完成的?我猜我必须做某种流?所以我可以在播放过程中改变速度并继续播放而不会出现间隙。在我的脑海中,它必须是位于数据和播放器之间的图形,所有数据都必须实时通过,后面有一个小缓冲区(20-50 毫秒左右)以避免在处理 future 数据时出现间隙。<
感谢任何帮助! 我也愿意接受任何其他解决方案,然后是“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,您仍然会失去它)
关于c++ - 在 Qt 和 C++ [QMediaPlayer] 中更改 mp3 速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33088043/