我在android上制作了一些简单的应用程序,并认为现在是时候让事情变得更复杂了。所以,我想我会尝试一些已经存在的东西,但是从头开始构建它。
我们的想法是创建一个应用程序,允许用户通过按下显示屏上的虚拟键来弹钢琴。但是我不确定如何合成每个音符的声音,最好是将每个音符的副本存储在文件中,还是有动态合成音符和和弦的动态方式。
我使用过C ++,所以NDK的东西也没关系。
谢谢你的帮助。
答案 0 :(得分:2)
声音播放(切换缓冲区)几乎必须从Android java apis
完成可以在native或java中进行合成,无论哪种方式。
可以重复播放短(未压缩)的样本,但您可能还需要一次攻击瞬态。也许你可以进行攻击,延续和释放,只要钥匙熄火就重复持续。理想情况下,每个样本应该是其基本分量的整数周期,这样当您在攻击之间进行维持或维持衰减时,您就不会出现瞬态变化。
我确信你可以在FM或其他合成器的某个地方找到代码......你可能希望在本地库中实现,将缓冲区交给java代码传递给音频apis。
有什么不好的是android已经有一个内部midi合成器,但显然缺少动态接口,所以它只能播放midi文件。
答案 1 :(得分:1)
到目前为止,最简单的解决方案是在钢琴上录制每个音符的声音,并在按下琴键时播放。许多专业的虚拟钢琴乐器以这种方式工作,以多种速度录制钢琴上的每个音符。显然这可能需要几千兆字节的磁盘空间,但对于手机应用程序,您可能会在一个八度音程中单独录制每个音符的MP3录音。
实际上,通过算法合成钢琴的声音非常困难,直到最近,很少有人令人信服地完成它(pianoteq是当前最好的实现之一)。