代码之家  ›  专栏  ›  技术社区  ›  arul

滚球的声音

  •  9
  • arul  · 技术社区  · 15 年前

    我在寻找最现实的方式玩滚球的声音。目前我使用的是一个wav样本,只要球在移动,我就会反复播放,这感觉不太对劲。

    我一直在考虑完全合成这个声音,我对这个声音知之甚少(几乎一无所知),对于任何关于合成由特殊材料制成的球的声音的教程/研究材料/样本,我都会很感激,因为球在另一种材料制成的表面上滚动。另外,如果这个想法是完全错误的,请建议另一种方法。

    谢谢!

    6 回复  |  直到 14 年前
        1
  •  8
  •   Quintus    15 年前

    我猜你会因为对声音进行动态频率调整而获得最大的回报,这使得回放频率与球的速度成正比。我不知道您使用的是哪种类型的声音库,但大多数都支持这种变体。

    例如,在 FMOD 您可以使用channel::setFrequency方法。理想情况下,您将根据wav的原始采样频率(fo)、球的当前速度(vc)和球的“理想”速度(默认wav听起来正确)计算所需的播放频率(vi)。一般来说,比如:

    f=fo*(vc/vi)

    当球离“理想”速度越来越远时,这将趋于崩溃。您可能希望有几个不同的wav,它们适用于在特定阈值速度下切换到的不同速度范围。在每个wav的括号内,你会做同样的频率调整。

    另一个注意事项:这可能不是每帧都值得做的事情。我想这样做超过每秒20次是浪费时间。

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

        2
  •  6
  •   jeef3    15 年前

    你试过向前播放声音,然后向后播放,然后循环播放吗?我使用这个技巧来创建重复模式。我对声音不太了解,但它可能有用吗?

        3
  •  5
  •   Charlie Salts    15 年前

    一种方法可能是分析滚动球的声音,并将其分解为其组件波形。然后你就可以用合成波生成你自己的wav文件了。
    你应该能够用一个声音样本的快速傅立叶变换来做这个。

    一个缺点是声音很可能是合成的——你必须增加噪音,这样才能使声音更真实。让它听起来足够真实可能是最困难的部分。

        4
  •  3
  •   leolobato    15 年前

    我认为你不需要麻烦来合成它。这太难让人信服了。

    根据场景的不同,可以向前/向后循环声音,并使用低通滤波器和/或更改其音调来模拟多普勒效应。

    顺便说一句, freesoung.org 是免费样品的好地方。他们没有专业记录,但是一个很好的操作起点。另一方面, sound ideas 有一些很棒的样品CD(它们实际上是行业标准),如果你能找到便宜的。你只需要搜索哪一个有滚动球的声音。

        5
  •  3
  •   datageist    15 年前

    我真的很喜欢这篇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

    我不确定你是否能让它在智能手机上运行,但是有了一个足够有效的卷积程序/近似值,你也许能做一些有趣的事情……

        6
  •  2
  •   hhafez    15 年前

    我的问题是“为什么?”-你觉得这有什么好处,还是只是为了好玩?你的问题意味着你对你正在使用的wav不满意,但我强烈认为合成你自己的wav听起来要差得多。

    如果你的wav样本听起来不正确,我建议你再找一个样本。合成一个声音是不容易的,而且听起来永远不会像你的样品那样逼真。

    实时合成可能需要更多的处理和计算资源。你很可能最终会将合成的声音预渲染成一个wav文件并执行回放。

    如果你想模拟不同材料的声音,那么你可以使用一些DSP,甚至是一些简单的技巧,比如放慢或加快wav的播放速度。最简单的方法是在另一个应用程序中预渲染这些文件,并为每次使用存储一个文件副本。