如何在不改变音高的情况下在android中实时加速音乐播放?

时间:2013-02-15 10:14:20

标签: android audio

我需要能够以不同的速度播放MP3文件而不会影响音高(或者在加速后改变音高,无论如何), 此外,这种转变需要尽可能无缝。

显然有些应用可以实现这一点,但是MediaPlayer API似乎无法实现,而SoundPool API只能改变音高和速率(除非我是遗失了什么。)

有关如何实现这一目标的任何想法? 任何可以帮助的API /第三方库?

感谢。

1 个答案:

答案 0 :(得分:1)

有一种称为Time Scale Modification的通用技术可以做到这一点。这是我尚未评估的可用工具:http://sourceforge.net/projects/mffmtimescale/

如果您放大音频的时间线,它看起来很像一个旧的心跳监视器 - 一个摇摆的峰值和山谷模式。对于元音,这种模式是准静态的,这大致意味着它是重复的,就像一个健康的心跳脉冲。单个ahhhh元音可能在正常语音中重复其模式3-7次。 TSM算法删除一些重复,并且需要使用过滤器通过剪切/连接不完美的重复来引入伪像。空的空间也可以减少,但需要注意不要删除所有空的空间 - 在英语中,“足球”这个词实际上在“脚”和“球”之间有一个间隙(说它慢慢地大声说出来)。 TSM也可以反过来,在权利点的空白空间中进行抽取或者向元音添加基音周期重复。这一切都相当复杂,并且在某种程度上取决于语言,这需要大量的调整 - 对于大多数应用程序而言,这意味着您不需要开发自己的。