1

我希望编写一个可以播放 WAV 文件的 C# WinForms 应用程序。在播放文件时,它会显示一个波形(类似于示波器)。

同时,用户可以通过麦克风录制声音,尝试跟随播放的原始声音(如卡拉 OK)。程序实时显示录制声音的波形,因此用户可以从原始波形文件的波形显示和录制的波形显示进行比较。将根据原始声音和录制声音的时间差(延迟)进行比较。波形显示不必很高级(无需剪切、复制或粘贴);只需能够通过时间线看到它就足够了。

我希望这足够清楚。如果不清楚,请随时要求更多说明。非常感谢你。

4

3 回答 3

2

你可以用 C# 做你想做的事,但它不会像你想象的那样工作。实际上,录音在示波器型显示器中的外观与录音在人耳中的声音效果之间根本没有任何关系。因此,例如,如果我向您展示显示在示波器显示屏上的两个 WAV 文件,并告诉您一个录音是大号演奏的,另一个是一个人说话的录音,您将不知道哪个是哪个在他们。

如果您想将用户的声音与预先录制的 WAV 进行比较,您必须变得更加复杂并对两者进行 FFT 分析并比较频谱,但即使这样也不会真正适用于您想要做的事情。

更新: 经过一番思考,我认为我并不完全同意我的上述陈述。如果您想要做的是使用示波器类型的效果来比较 WAV 的音高(或频率)和人的声音,那么您想要做的可能有点工作。如果您将示波器调整为一次显示相对较少数量的波长(可能是 20 个),用户将能够快速看到提高或降低他们声音的音高的效果。

我有一个大约 2 年前编写的小型 C# 应用程序示例,它执行类似这样的操作,只是它显示 FFT 生成的光谱仪而不是示波器(区别基本上是光谱仪显示频域信息,而示波器显示时域信息)。它是实时的,因此您可以对着麦克风说话/唱歌/随便什么,并观察光谱仪的动态变化。

如果您愿意,我可以将其挖掘出来并在此处发布代码。或者,如果您想享受自己做这一切的乐趣,我可以发布一些指向您需要的代码资源的链接。

于 2011-03-03T13:57:37.227 回答
1

NAudio有很多功能可以(可能)为您提供所需的功能。我过去曾将它用于一些简单的操作,但它比我需要使用的功能强大得多。

于 2011-03-03T14:01:33.137 回答
0

@ZombieSheep Naudio 确实很有用,但它有局限性。比如对波形显示没有太多控制,不能清除重绘。此外,如果它太长,则无法向后滚动以查看前面的波形。另一件事是它仅适用于播放声音,但不适用于录制声音。谢谢你。

于 2011-03-04T01:38:33.363 回答