【问题标题】:How to create a sound from scratch C#如何从头开始创建声音 C#
【发布时间】:2011-12-25 12:07:34
【问题描述】:

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

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

那么有没有办法在 C# 中创建正确的声音,而不使用 .wav 文件,全部在 C# 中的代码,如果没有,有没有办法在不同的语言中做到这一点 - C++ .

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

【问题讨论】:

  • +1 提出一个很酷的问题 - 我知道这是可能的,但我一点也不知道该怎么做 :) 祝你好运!
  • +1 虽然.wav 文件不会占用太多空间,但一定有办法不用它们
  • Wikipedia 有关如何将音符转换为可以插入声音发生器的频率的条目。
  • @Dani 同意,wav 不应该是唯一的方法

标签: c# c++ file audio audio-player


【解决方案1】:

我认为这看起来应该让你开始:

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

编辑:我应该补充一点,在没有 .wav 样本的情况下生成声音和模拟钢琴是相互矛盾的。

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

【讨论】:

  • 谢谢,这似乎是我需要的东西。我还有很长的路要走!
  • @Dommer 谢谢,我也是。当然,假设您指的是他最著名的托卡塔
  • @Widor 我同意,这主要是一个实验,看看如何做到这一点。还有 1 点,你能用 DirectSound 吗?
  • @JBellamy 我对此的回答是“是的,你可以”,但我没有亲自做过,我不得不建议你问一个 DirectSound 特定的问题以获得更好的答案!跨度>
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    你可能想看看 MIDI。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2017-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-21
          • 2021-04-12
          • 2021-11-18
          相关资源
          最近更新 更多