使用 C# 弹奏钢琴音色

Posted

技术标签:

【中文标题】使用 C# 弹奏钢琴音色【英文标题】:playing piano tones using C# 【发布时间】:2011-11-13 02:39:07 【问题描述】:

我正在尝试用 C# 制作一个简单的钢琴应用程序。

它应该是一架非常简单的钢琴(最多 5 或 6 个键)。我找到了不同的替代方案,到目前为止我发现的有:

consol.beep ();但我觉得它的声音不像钢琴的音色 保存和播放 WAV 文件。我想获得钢琴音色的 wav 文件,但我觉得这样做很难,而且它不会卖得很好,可能会占用很多不需要的空间

是否有一个库可以演奏类似钢琴的音调或不同乐器的任何不同音调?

【问题讨论】:

【参考方案1】:

查看 Mike Gold 的 Virtual Piano in C# 的可下载源。我想它有你要找的东西。

您可能还想查看这篇文章:Is it possible to generate a constant sound in C# while adjusting its frequency?。基本思想是你有一个单一的样本,你可以通过编程方式操纵声音文件的频率,从而生成不同的音符。

至于可以帮助你的库,你可以看看:

NAudio@codeplex C# MIDI Toolkit@codeproject Wrapper Library for Windows MIDI API@codeproject

【讨论】:

【参考方案2】:

你考虑过使用 MIDI 吗?

这很有用。

见http://grouplab.cpsc.ucalgary.ca/cookbook/index.php/VisualStudio/HowToPlayMIDIInstruments

这个很有趣,它可以让你以这样一种简单的方式播放声音:

MidiPlayer.Play( new NoteOn( 0, 1, "C4", 127 ) );

您还可以查看此代码项目页面。 见http://www.codeproject.com/KB/audio-video/MIDIToolkit.aspx

【讨论】:

grouplab.cpsc.ucalgary.ca 页面不再指向可行的库。【参考方案3】:

保存和播放 WAV 文件我想到了获取钢琴的 wav 文件 音调,但我觉得这样做很难,而且不会有任何销售 可能会占用很多不需要的空间

我不知道您在寻求什么级别的真实感,但高端数码钢琴的每个键都有几个数字样本来表示硬/软按键的不同动态,所以我不排除这种可能性.一个重要的考虑因素是复音,即一次可以听到多少个音符。

细微的音高调整可以减少所需的样本数量,例如一个音符通常可以上/下几个半音而不会造成太大的降级。

或者,您可以考虑播放 MIDI 样本。几乎所有现代声卡都有基本的 128 个 MIDI 补丁,尽管质量可能差别很大。

【讨论】:

以上是关于使用 C# 弹奏钢琴音色的主要内容,如果未能解决你的问题,请参考以下文章

用钢琴来把圆周率弹奏出来是什么体验?

如何用五千块的电脑弹奏出价值十万钢琴的效果

如何用五千块的电脑弹奏出价值十万钢琴的效果

如何用五千块的电脑弹奏出价值十万钢琴的效果

钢琴八级厉害吗?

一起用Python做个自动化弹钢琴脚本,我竟然弹出了《天空之城》!