在不改变音高的情况下动态改变 as3 中声音的播放速度

dynamically changing the playback speed of a sound in as3 without altering pitch

我正在制作一款基于简单歌曲创作的游戏,我正计划推出一项功能,让玩家可以聆听他们在游戏中创作的歌曲。旋律的节奏由计时器系统控制,但这不适用于我计划实施的背景音轨预设,因为背景音轨中的每个 mp3 文件代表一个小节而不是一个音符。

虽然可以使用我的定时器系统来播放伴奏曲目,但这将需要更多的音频文件和更多的编码,并且会使项目远远落后于计划。因此,我需要控制已有文件的播放速度。我经常在此处看到两个如何执行此操作的示例:http://2008.kelvinluck.com/2008/11/first-steps-with-flash-10-audio-programming/ and here: http://blog.andre-michelle.com/2009/pitch-mp3/

这两者的问题在于它们也会改变音高。这对我来说是个问题,因为我非常希望玩家能够分别改变他们歌曲的音高和节奏。我认为我需要的代码与上面的示例类似,但我很难理解这些代码,因为我对字节数组等没有太多经验。我希望能够理解我包含的示例,这样我就可以弄清楚我需要做什么才能让我的游戏按应有的方式运行,但我们不胜感激任何形式的帮助。谢谢 =)

你可以试试https://github.com/also/soundtouch-as3 http://static.ryanberdeen.com/projects/soundtouch-as3/demo/player/stretch.swf 有一个早期(alpha)演示 如果您使用 1.0x-1.5x 因子(小于 1.0 会产生非常人为的失真),质量是 "acceptable"

您也可以试试:

http://iq12.com/old_blog/2009/08/25/real-time-pitch-shifting/

测试:Online demo

他们的在线演示没有为我加载曲目(删除了 MP3?),所以我将重新编译的 SWF 放在我的服务器上只是为了测试。如果您想将结果与原始声音进行比较,它会加载 this MP3 audio clip

它旨在保持音频长度(时间尺度),同时 调整音高 (慢时更深或更快时更高)。您可以将它与 Kelvin Luck 的 Second Steps... 结合起来。从而有速度和音调的示例代码。

它的灵感来自从这个 C code as found at (with concept explanation) :
http://blogs.zynaptiq.com/bernsee/pitch-shifting-using-the-ft/

移植的一些 C# 代码