15

我正在尝试用 C# 构建一个虚拟钢琴,并且想要一种从头开始创建音阶的方法。

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

那么有没有办法在 C# 中创建适当的声音而不使用 .wav 文件,所有的代码都通过 c# 来创建正确的声音,如果没有,有没有办法用不同的语言 - C++ 来做到这一点。

谢谢,我已经尽量说清楚了。

4

5 回答 5

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 样本的情况下生成声音和模拟钢琴是相互矛盾的。

如果您想获得“真实”的钢琴声音,最好使用样本(如果您不想将它们保存在文件系统中,请将它们保存在内存中)。如果您只是想要一种发出准确音符的简单方法(听起来不像真正的钢琴),那么以编程方式进行就是要走的路!

于 2011-11-09T17:09:43.500 回答
4

如果你想专门模拟一架钢琴,你只有两种选择,一种是使用样本,另一种是物理建模。物理建模需要一些非常先进的 DSP 知识(过滤、卷积等),钢琴将是一个具有挑战性的乐器,但它已经由Pianoteq之类的公司完成

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

于 2011-11-09T17:33:57.087 回答
0

你可能想看看 MIDI。

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

于 2011-11-09T17:11:29.007 回答
0

也许使用 MIDI 库会有所帮助?我不喜欢这件事,但如果你不想使用音频文件,那是我唯一想到的。这里有个问题。

于 2011-11-09T17:12:38.537 回答
0

在这里,您可以找到一篇文章,其中包含有关如何从头开始为至少一个八度音阶的音符创建钢琴声音的资源(它是可扩展的)。

于 2011-11-09T17:13:03.677 回答