【问题标题】:How to synthesize piano sounds in android/java如何在 android/java 中合成钢琴音色
【发布时间】:2010-12-03 17:13:02
【问题描述】:

我已经在 android 上制作了一些简单的应用程序,并认为是时候做一些更复杂的事情了。所以,我想我会尝试一些已经存在的东西,但要从头开始构建它。

这个想法是创建一个应用程序,允许用户通过按下显示屏上的虚拟键来弹奏钢琴。但我不确定如何合成每个音符的声音,是否最好将每个音符的副本存储在文件中,或者是否有更动态的方式来动态合成音符和和弦。

我使用过 C++,所以 NDK 的东西也可以。 感谢您的帮助。

【问题讨论】:

  • 题名真的和题关系不大。你真的在问如何在 java 中合成声音。此外,您几乎肯定不想使用 ndk 执行此操作
  • 我在看ccrma.stanford.edu/software/stk。我想把我需要的部分放入 NDK,然后从那里开始。或类似的东西。

标签: java android audio synthesis


【解决方案1】:

声音播放(移交缓冲区)几乎必须通过 Android java api 完成

合成可以在本机或 java 中完成,无论它喜欢哪个。

可以重复播放短(未压缩)样本,但您可能还想要一个瞬态攻击。也许你可以有一个起音、延音和释音,只要琴键按下就重复延音。理想情况下,每个样本应该是其基本分量的整数周期长,这样当您在起音到维持或维持到衰减之间切换时,您不会得到瞬态。

我确信您可以在某处找到 FM 或其他合成器的代码...您可能希望在将缓冲区移交给 java 代码以传递给音频 api 的本机库中实现。

可惜的是android已经有一个内部的midi合成器,但是显然缺少一个动态接口,所以它只能播放midi文件。

【讨论】:

  • 我也在考虑相同的思路(初始声音、延音、渐变),但我认为尝试在代码中实现它可能比简单地记录所有音符更有趣。感谢您的信息。
【解决方案2】:

到目前为止,最简单的解决方案是记录钢琴上每个音符的声音,并在按下琴键时播放。许多专业的虚拟钢琴乐器都以这种方式工作,以多种速度录制钢琴上的每个音符。显然,这可能会占用数 GB 的磁盘空间,但对于手机应用程序,您可能会在一个八度音阶中对每个音符进行一次 MP3 录音。

实际上,通过算法合成钢琴的声音非常困难,直到最近,很少有人能够令人信服地做到这一点(pianoteq 是当前最好的实现之一)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-23
    • 2011-10-20
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多