滚动球的声音

9
我正在寻找播放滚动球声音的最真实方法。目前,我使用一个Wav样本,只要球在移动,我就一遍又一遍地播放它 - 这感觉不对劲。
我一直在考虑完全合成声音,但我对此知之甚少(几乎一无所知)。如果有关于特定材料制成的球在另一种材料表面上滚动声音合成的教程/研究资料/样本,我将不胜感激。如果这个想法完全错误,请建议其他方法。
谢谢!

1
它可能感觉不对,因为wav文件结尾处的振幅与开头处的振幅不匹配。在深入更复杂的领域之前,您可以尝试确保首先使用渐入来开始声音。 - Vinko Vrsalovic
声音是短而持续的样本,听起来“还行”,但我无法控制声音的特性与球的速度有关。很难描述 :| - arul
11
非常不同意超级用户的投票。我的意思是,为什么呢?Arul 不是在寻找一个用于播放声音的应用程序,而是在寻找一种方法来生成逼真的声音。 - dmckee --- ex-moderator kitten
1
球跑得越快,你可以跳过更多的帧,这样它听起来就会更快,而不改变它的音调。 - leolobato
2
在关闭投票之前,确实应该有一个确认提示:“你有没有认真阅读即将关闭的问题?” - arul
我建议调整正弦波的音高,这应该可以得到你想要的声音...可能需要尝试一下如何从球中生成角度,并且很抱歉我无法帮助你确定需要使用哪些软件或API。 - Stowelly
6个回答

8
我猜你最好的选择是对声音进行动态频率调整,使播放频率与球的速度成比例。我不知道你使用什么类型的声音库,但大多数都支持某种变体。例如,在FMOD中,您可以使用Channel::setFrequency方法。理想情况下,您将根据WAV的原始采样频率(Fo),球的当前速度(Vc)和默认WAV听起来正确的“理想”速度(Vi)计算所需的播放频率。一般来说应该是这样的:F = Fo *(Vc / Vi)。随着球离“理想”速度越来越远,这种方法可能会失效。您可能需要几个适用于不同速度范围的不同WAV文件,并在某些阈值速度处切换到它们。在每个WAV文件的范围内,您都需要进行相同类型的频率调整。另一个注意事项:这可能不值得每帧都做。我猜每秒超过20次可能是浪费时间。

附录:像这样的回放频率缩放也可以用于模拟多普勒效应。一旦你有了调整后的回放频率,你会根据球相对于“听者”(摄像机)的速度执行另一个基于频率的比例尺。


一个有趣的想法。也许更好的方法是通过改变低通滤波器的截止频率来实现,而不是改变声音的播放速度。 - Nosredna
那样做并不能达到同样的效果。不同速度下滚动物体的声音不仅仅是频率分布 - 它还与声音的整体速度有关。想象一下,将汽车引擎的声音通过低通滤波器进行处理。无论你设置截止频率在哪里,引擎的“速度”(RPM)听起来都不会有任何不同。此外 - 回放频率调整在实时中更容易/更便宜。 - Quintus
这个答案最接近我目前的正负工作实现,所以我接受了这个答案。感谢大家的想法! - arul

6

你尝试过先正播放声音,然后倒播,再循环播放吗?我使用这个技巧来创建重复的图案。虽然我对声音不是很了解,但这个方法可能会起作用。


那其实是个相当不错的想法 - 基本上就是一维铺砖。 - Charlie Salts
3
倒放的声音听起来在质量上与正常声音有所不同吗? - Jimmy
2
如果是一个短片段,它不会很明显。这实际上是一种很好的方法,使循环声音无缝,而不需要交叉淡入淡出。 - leolobato
2
这是否有效取决于声音。对于某些声音,在相对较短的源剪辑中也非常明显。你的声音越接近真正的“噪音”,这个方法就越好用。 - Quintus
2
将声音的反向版本附加到自身并不消除交叉淡入淡出的需要。不同频率范围内仍可能存在不连续性,导致爆音。 - Nosredna
每当声波形式出现相位不连续(从一个振幅到另一个振幅的大跳跃)时,都会产生“啪”的声音。正反向播放之所以有效,是因为您保持了相同的波形特征(频率、包络振幅等),但根据截断波形的位置,仍可能会出现“啪”的声音。如果您使用音频编辑器(如Audacity)并确保在峰值或谷底结束波形采样,则此技术应该能够很好地工作。这就是为什么噪声似乎与此技巧配合得很好的原因,因为噪声已经由许多不连续组成。 - Joel B

5

一种方法是分析滚动球的声音,并将其分解成其组成波形。然后,您就可以使用合成波形生成自己的wav文件。
您应该能够通过对声音样本进行FFT来完成此操作。

一个缺点是声音可能听起来像是合成的 - 您需要添加噪音等来使其听起来更真实。让它听起来足够真实可能是最困难的部分。


我会研究一下,这个方法适用于资源受限的环境(智能手机)实时使用吗? - arul
老实说 - 我不知道。如果你知道球在已知条件下会发出某种声音,那么声音参数就是已知的。因此,你应该能够“缓存”足够多的合成声音,以便你可以创建一个可循环的wav文件。我只记得我大学时学过FFT,似乎是一个不错的方法。 - Charlie Salts
2
从FFT到合成声音是一个合理的做法,但在这种情况下可能不太适用。滚动球的有趣之处在于频谱的瞬时变化。如果使用变形加性合成,您可能会耗尽整个处理器来重新合成声音。 - Nosredna

3
我非常喜欢这篇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。我不确定它是否可以在智能手机上运行,但如果具有足够高效的卷积例程或逼近算法,您可能能够做出一些有趣的东西...

很高兴你喜欢它。祝你合成顺利,好运! - datageist

3
我认为你不需要费心去合成那个声音。即使努力合成,也很难听起来真实可信。
根据你的场景不同,你可以将声音向前/向后循环,并模拟多普勒效应,应用低通滤波器和/或改变它的音调。
顺便说一下,freesoung.org 是一个免费采样素材的好地方。虽然这些采样素材不是专业录制的,但是它们是处理的好的起点。另一方面,sound ideas 有一些非常棒的采样CD(实际上是行业标准),如果你能找到价格便宜的话。你只需要搜索哪一个CD中有滚动球声音。

2
我的问题是:“为什么?” - 你认为这样做有益处吗,还是只是为了好玩?你的问题意味着你不满意你正在使用的wav文件,但我坚信合成自己的声音会听起来远不如实际样本。
如果你的wav文件听起来不对,我建议尝试找到另一个样本。合成声音并不容易,并且永远不会像你的样本那样逼真。
实时合成可能需要更多的资源进行处理和计算。你很可能最终会将你合成的声音预先渲染成wav文件并进行回放。
如果你想要模拟不同材料的声音,你可以使用一些数字信号处理(DSP),甚至简单的技巧,比如减缓或加速wav播放。最简单的方法是在另一个应用程序中预渲染它们,并为每个用途存储一个副本的文件。

有许多种综合方法可以占用处理器的一小部分。样本播放将始终是重复和明显的,因此我认为考虑综合可能性是一个好主意。 - Nosredna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接