我希望编写一个可以播放WAV文件的C#WinForms应用程序。播放文件时,它会显示波形(类似于示波器)。
同时,用户可以通过麦克风录制声音,尝试跟随播放的原始声音(如卡拉OK)。程序实时显示录制声音的波形,因此可以从原始波形显示中看到比较 波形文件和用户记录的文件。比较将按照原始和录制声音的时间差(延迟)进行。波形显示不一定非常先进(不需要剪切,复制或粘贴);能够用时间轴看到它就足够了。
我希望这很清楚。如果不清楚,请不要犹豫,要求进一步澄清。非常感谢你。
答案 0 :(得分:2)
你可以用C#做你想做的事,但它不会像你想的那样工作。在示波器类型显示器中记录看起来与如何将声音发送到人耳之间实际上没有任何关系。因此,例如,如果我向您展示示波器显示屏中显示的两个WAV文件,并告诉您一个录音是大号演奏而另一个是讲一个句子的人,您可能不知道哪个只是从看起来在他们身上。
如果您想将用户的声音与预先录制的WAV进行比较,您必须更加复杂并对两者进行FFT分析并比较频谱,但即使这样也不会对您正在尝试的内容起作用要做。
更新:经过一番思考后,我认为我完全不同意上述陈述。如果您想要做的是使用示波器类型效果来比较WAV的音高(或频率)和人的声音,那么您想要做的事情可能会有所不同。如果您将示波器调谐为一次显示相对较少的波长(例如20),则用户将能够快速看到提高或降低其声音音高的效果。
我有一个小样本C#应用程序,我在大约2年前做过这样的事情,它只是显示了一个FFT制作的光谱仪而不是示波器(差别基本上是光谱仪显示频域信息)而示波器显示时域信息)。它是实时的,因此您可以在麦克风中进行通话/唱歌/观看,并观察光谱仪动态变化。
如果你愿意,我可以把它挖出来并在这里发布代码。或者如果您想要自己完成这一切的乐趣,我可以发布一些指向您需要的代码资源的链接。
答案 1 :(得分:1)
NAudio library有很多功能可以(可能)为您提供所需的功能。我过去曾经用过一些简单的操作,但它比我需要使用的功能强大得多。
答案 2 :(得分:0)
@ZombieSheep Naudio确实很有用,但它有局限性。例如,对波形显示没有太多控制,无法再次清除和重绘。此外,如果它太长,则无法向后滚动以查看前部的波形。还有一件事是它只能用于播放声音,但不能用于录制声音。 谢谢。