在Qt和c++中改变mp3速度[QMediaPlayer]
Changin mp3 speed in Qt and C++ [QMediaPlayer]
我正在尝试开发一个小应用程序,您可以在其中加载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)
- 为什么在读取文件大小时文件IO速度会发生变化
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 文件系统:复制功能的速度秘诀是什么
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 两个连续的 OpenMP 并行区域会相互减慢速度
- 查找标准::hash_map与标准::矢量的速度
- 加快在C++中读取/处理日志文件的速度
- 为什么这些算法的运行速度比它们应该的要快?
- 如何提高文件的读取速度?
- 通过libpqxx提高PostgreSQL数据库的更新速度
- 使用 IMFSinkWriter 编码的视频的播放速度会根据宽度而变化
- 计算车辆之间的距离并设置速度,使距离保持不变,例如 5 米
- 如何加快大字符串的解析速度?
- 如何比较两个函数的速度和性能
- 线程相互减慢速度
- 多线程减慢程序速度:无错误共享,无互斥锁,无缓存未命中,无小工作量
- 使用 Unity 构建加快C++构建速度,并减少标头依赖项
- 从 OpenCV 3 切换到 OpenCV 4 会导致网络摄像头以最大 5 fps 的速度录制,而不是通常的 30 f
- 在Qt和c++中改变mp3速度[QMediaPlayer]