动态改变as3中声音的播放速度而不改变音高

时间:2016-03-21 05:22:42

标签: actionscript-3 audio bytearray mp3

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

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

这两个问题的关键在于它们也会改变音高。这对我来说是一个问题,因为我非常希望玩家能够分别改变他们歌曲的音高和节奏。我认为我需要的代码与上面的示例类似,但我很难理解这些代码,因为我还没有很多使用bytearrays等方面的经验。我希望能够理解我所包含的示例,以便我能够弄清楚我需要做什么才能使我的游戏按照应有的方式工作,但是对任何形式的帮助都表示赞赏。谢谢你=)

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您也可以尝试:

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 移植的一些C代码的启发,如(概念说明)所示:
{{3 }}