2011-11-09 35 views
15

我想在C#中构建一个虚拟钢琴,并且想要一种从头开始创建音符的音阶的方法。如何从头开始创建一个声音C#

我知道我可以简单地找到或创建一堆.wav文件,每个音符1个,但是这会在用户的硬盘上创建太多空间,并且对于我自己将来不太直观。

那么有没有一种方法可以在C#中创建一个合适的声音 - 例如B平面,而不使用.wav文件,全部在代码中,如果不是,有没有办法以不同的语言来实现 - C++。

谢谢,我尽量使其尽可能清晰。

+2

+1的一个很酷的问题 - 我知道这是可能的,但我没有丝毫的想法如何做到这一点:)祝你好运! –

+0

虽然'.wav'文件不占用太多空间,但是必须有一种方法可以在没有它们的情况下执行 – Dani

+1

[Wikipedia](http://en.wikipedia.org/wiki/Note#Note_frequency_.28hertz.29)录入如何将音符转换为您可以插入声音发生器的频率。 – user786653

回答

7

我想,这看起来像它应该让你开始:

http://blogs.msdn.com/b/dawate/archive/2009/06/24/intro-to-audio-programming-part-3-synthesizing-simple-wave-audio-using-c.aspx

编辑:我要补充一点,产生声音没有.WAV样本和模拟钢琴都在互相争吵。

如果你想获得'真正'的钢琴音色,最好使用样品(如果你不想将它们保存在文件系统中,将它们保存在内存中)。如果你只是想要一种简单的方式发出精确的音符(这听起来不像真正的钢琴),那么以编程的方式进行演奏就是一种方法!

+0

谢谢,这似乎是我需要的东西。我前进的道路很漫长! –

+0

+1主要是因为你的名字是对我最喜欢的音乐之一的致敬... –

+0

@Dommer谢谢,我也是。假设你指的是他最着名的_Toccata_当然! – Widor

0

你可能想看看MIDI。

有一个windows API你可以用C++包装,然后公开一个你可以在C#中使用的托管接口。

0

也许使用MIDI库可以提供帮助吗?我没有遇到这个问题,但如果你不想使用音频文件,那么这是我唯一想到的。有一个关于它的问题here

0

Here你可以找到一篇文章,内容包括如何从头开始创建至少一个八度音符的钢琴音色的源代码(它是可扩展的)。

4

如果您想特别模拟钢琴,您只有两种选择,其中一种是使用样品,另一种是physical modelling。物理建模需要一些相当先进的DSP知识(过滤,卷积等),钢琴将是一个具有挑战性的工具来解决,但它已经完成了像Pianoteq

关于样本的主题,创建一个钢琴,在任何接近令人信服的模拟音色的情况下,理想情况下,对于不同速度,每音符需要多于一个样本并在它们之间进行交叉渐变,但您可能会在有限范围的音符上使用样本,以减少样本总数。