【问题标题】:C# WinForms application to display waveforms of playback and recorded soundC# WinForms 应用程序显示播放和录制声音的波形
【发布时间】:2011-03-03 13:44:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# record microphone graphing waveform


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • @MusiGenesis 代表 Gnubie,'如果你想做的是使用示波器类型的效果来比较 WAV 的音高(或频率),那么你想做的可能有点工作和人的声音。',这是正确的。如果您可以在此处发布代码,我会很高兴,这样我就可以查看并分析它的运行情况。非常感谢。
    • 非常感谢,MusiGenesis。让我们假设回放和录制的声音都是在(音乐)键盘上演奏的简单音符;与语音和音乐曲目相比,比较延迟会容易得多。如果不是太麻烦,您能否发布您的 C# 应用程序?谢谢!
    • @Gnubie:我会在今晚发布。它不会完全按照您的要求执行,但会包含您需要执行此操作的大部分代码示例 - 包括使用 waveInOpen API 录制音频以及执行从时域到时域的基于 FFT 的音频转换频域。
    • 如果这是对问题的评论,请将其发布为作为对问题的评论,而不是作为答案。如果它旨在作为对 MusiGenesis 答案的评论,请在此处发布。谢谢!
    • @Timwi:他需要 50 分才能这样做......而且这是一种补充答案。
    【解决方案2】:

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

    【讨论】:

    • 谢谢,正如您所写,N​​Audio 非常强大,因此也非常复杂。我希望有一个更简单的解决方案。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-07
      • 2015-11-01
      • 2013-01-18
      • 1970-01-01
      相关资源
      最近更新 更多