如何从头开始创建一个声音c#
How to create a sound from scratch C#
我正在尝试在c#中构建一个虚拟钢琴,并且想要一种从头开始创建音符音阶的方法。
我知道我可以简单地找到或创建一堆。wav文件,每个音符1个,但这会在用户硬盘上创建太多空间,并且在将来对我自己来说不是很直观。
那么有没有一种方法来创建一个适当的声音-例如,B平面,在c#中不使用。wav文件,所有的代码通过c#,如果没有,有没有一种方法来做这个在不同的语言- c++。
谢谢,我已经尽量说清楚了。
我想这看起来应该可以让你开始:
http://blogs.msdn.com/b/dawate/archive/2009/06/24/intro-to-audio-programming-part-3-synthesizing-simple-wave-audio-using-c.aspx编辑:我应该补充一下,在没有。wav样本的情况下产生声音和模拟钢琴是不一致的。
如果你想要得到一个"真正的"钢琴声音,最好使用样本(如果你不想把它们保存在文件系统中,就把它们保存在内存中)。如果你只是想用一种简单的方法来发出准确的音符(听起来一点也不像真正的钢琴),那么用程序来做就是最好的方法!
如果你想模拟钢琴,你只有两个选择,其中一个是使用样本,另一个是物理建模。物理建模需要一些相当高级的DSP知识(滤波,卷积等),钢琴将是一个具有挑战性的乐器,但它已经完成了像Pianoteq
关于样本的主题,要创建一个接近令人信服的模拟的钢琴,理想情况下,您需要每个音符的不同速度和它们之间的交叉淡出的多个样本,但是您可能可以在有限的音符范围内使用样本来减少样本总数。
你可能想看看MIDI。
你可以用c++封装一个windows API,然后公开一个可以在c#中使用的托管接口。
也许使用MIDI库可以帮助?我对这个问题不感兴趣,但如果你不想使用音频文件,这是我想到的唯一办法。这里有一个问题
这里有一篇文章,包括如何从头开始创建至少一个八度音符的钢琴声音(它是可扩展的)。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 预处理器:插入结构名称中的前一个行号
- 我在c++代码中生成了一个运行时#3异常
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 从链接列表c++中删除一个项目
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '