我正在寻找最真实的方式来播放滚动球的声音。目前我正在使用一个 Wav 样本,只要球在移动,我就会一遍又一遍地播放——这感觉不太对劲。
我一直在考虑完全合成声音,我对此知之甚少(几乎一无所知),我将不胜感激任何关于合成由特定材料制成的球的声音的教程/研究材料/样本在表面上滚动另一种材料的。此外,如果这个想法完全错误,请提出另一种方法。
谢谢!
我正在寻找最真实的方式来播放滚动球的声音。目前我正在使用一个 Wav 样本,只要球在移动,我就会一遍又一遍地播放——这感觉不太对劲。
我一直在考虑完全合成声音,我对此知之甚少(几乎一无所知),我将不胜感激任何关于合成由特定材料制成的球的声音的教程/研究材料/样本在表面上滚动另一种材料的。此外,如果这个想法完全错误,请提出另一种方法。
谢谢!
我猜想通过对声音进行动态频率调整,使播放频率与球的速度成正比,您将获得最大的收益。我不知道您使用哪种类型的声音库,但大多数会支持这种类型的一些变体。
例如,在FMOD中,您可以使用 Channel::setFrequency 方法。理想情况下,您将根据 WAV 的原始采样频率 (Fo)、球的当前速度 (Vc) 以及默认 WAV 听起来正确的球的“理想”速度 (Vi) 来计算所需的播放频率。一般是这样的:
F = Fo * ( Vc / Vi )
随着球离“理想”速度越来越远,这将趋于崩溃。您可能希望有几个不同的 WAV,它们适用于您在某些阈值速度下切换到的不同速度范围。在每个 WAV 的括号内,您将进行相同类型的频率调整。
另一个注意事项:这可能不是每一帧都值得做的事情。我猜每秒这样做超过 20 次会浪费时间。
附录:像这样的回放频率缩放也可以用于模拟多普勒效应。调整好播放频率后,您将根据球相对于“听众”(相机)的速度执行另一个频率比例。
您是否尝试过向前播放声音,然后向后播放,然后循环播放?我以图形方式使用这个技巧来创建重复模式。我对声音不太了解,但它可能有用吗?
一种方法可能是分析滚球的声音,并将其分解成其分量波形。然后你就可以用合成波生成你自己的 wav 文件。
您应该能够对声音样本使用 FFT 来执行此操作。
一个缺点是声音可能听起来是合成的——你必须添加噪音等以使其听起来更真实。让它听起来足够真实可能是最难的部分。
我认为你不需要麻烦来合成它。听起来很难令人信服。
根据您的场景,您可以向前/向后循环声音并模拟多普勒效应,应用低通滤波器和/或改变它的音高。
顺便说一句,freesoung.org是一个免费样品的好地方。它们不是专业录制的,但它们是操作的良好起点。另一方面,如果你能以便宜的价格找到它们, sound idea有一些很棒的样本 CD(它们实际上是行业标准)。你只需要搜索哪个有滚动球的声音。
我真的很喜欢这篇 SIGGRAPH 论文中描述的方法:
http://www.cs.ubc.ca/~kvdoel/publications/foleyautomatic.pdf
它描述了在锅中合成摇滚乐的声音(不,真的:)。这个想法是使用模态合成(即卷积脉冲响应),结果可以非常有说服力。
这是论文附带的视频演示链接:
http://www.cs.ubc.ca/~kvdoel/publications/foleyautomatic.mpeg
这是 JASS 库(由其中一位作者编写)的链接,用于为视频创建声音:
http://www.cs.ubc.ca/~kvdoel/jass/jass.html
我不确定你是否可以让它在智能手机上运行,但是通过足够有效的卷积例程/近似值,你可能会做一些有趣的事情......
我的问题是“为什么?” - 你觉得这有什么好处,还是只是为了好玩?您的问题意味着您对正在使用的 wav 不满意,但我坚信合成自己的 wav 听起来会差很多。
如果您的 wav 样本听起来不正确,我建议您尝试寻找另一个样本。合成声音并不容易,而且听起来永远不会像您的样本那样逼真。
实时合成可能需要更多资源用于处理和计算。您很可能最终将合成的声音预渲染为 wav 文件并执行播放。
如果您想模拟不同材料的声音,那么您可以使用一些 DSP,甚至可以使用一些简单的技巧,例如减慢或加快 wav 播放速度。最简单的方法是在另一个应用程序中预渲染这些文件,并为每次使用存储一个文件副本。