2011-03-03 62 views
1

我希望編寫一個可以播放WAV文件的C#WinForms應用程序。播放文件時,它會顯示一個波形(類似於示波器)。C#WinForms應用程序顯示回放波形和錄製的聲音

與此同時,用戶可以通過麥克風錄製聲音,嘗試跟蹤播放的原始聲音(如卡拉OK)。該程序實時顯示錄製的聲音波形,因此可以從原始波形文件的波形顯示和用戶錄製的波形顯示中查看比較結果。比較將按照原始和錄製聲音的時間差異(延遲)完成。波形顯示不必非常先進(不需要剪切,複製或粘貼);只要能夠用時間表來看就足夠了。

我希望這已經夠清楚了。如果不明確,請不要猶豫,要求進一步澄清。非常感謝你。

回答

2

你可以用C#做​​你想做的事,但它不會像你想象的那樣工作。在示波器型顯示器中記錄看起來和記錄聽起來如何人耳之間完全沒有關係。因此,例如,如果我向您展示了示波器顯示屏中顯示的兩個WAV文件,並告訴您一個錄音是大號演奏,另一個錄音是一個人說一個句子,您不知道哪一個是從看在他們身上。

如果要將用戶的聲音與預先錄製的WAV進行比較,您必須先熟練掌握並對FFT進行FFT分析並比較頻譜,但即使這樣也無法滿足您的要求試圖去做。

更新:經過一番思考,我不認爲我完全同意我的上述說法。如果您想要做的是使用示波器類型的效果來比較WAV的音高(或頻率)和人的聲音,則您想要做的事情可能會有所不同。如果您調整示波器一次顯示相對較少的波長數量(例如可能爲20),用戶將能夠快速看到提高或降低其語音音調的效果。

我有一個小樣本的C#應用​​程序,我在2年前寫了一些類似的東西,只顯示了FFT生成的攝譜儀而不是示波器(差別基本上是光譜儀顯示頻域信息,而示波器顯示時域信息)。這是實時的,所以你可以通過麥克風來談話/唱歌/看什麼,並動態觀察光譜儀的變化。

如果你喜歡,我可以在這裏找到併發布代碼。或者,如果你想自己做這件事的樂趣,我可以發佈一些鏈接到你需要的代碼資源。

+0

非常感謝,MusiGenesis。假設播放和錄製的聲音都是在(音樂)鍵盤上播放的簡單音符;那麼比較延遲比比如說聲音和音樂曲目要容易得多。 如果沒有太多的麻煩,您可以發佈您的C#應用​​程序嗎?謝謝! – Gnubie 2011-03-07 12:23:14

+0

@Gnubie:我今晚將發佈它。它不會完全符合你的要求,但它將包含你需要做的大部分代碼示例 - 包括使用waveInOpen API記錄音頻,並執行從時域到音頻的基於FFT的轉換。頻域。 – MusiGenesis 2011-03-07 14:34:54

+0

請做!期待它,謝謝。 – Gnubie 2011-03-09 12:43:52

1

NAudio library有很多功能,可能會(可能)給你你需要的東西。我過去曾經使用它進行一些簡單的操作,但它比我需要使用的功能強大得多。

+0

謝謝,正如你所寫,NAudio非常強大,而且非常複雜。我希望有一個更簡單的解決方案。 – Gnubie 2011-03-07 12:26:10

0

@ ZombieSheep Naudio確實有用,但它有一定的侷限性。例如,對波形顯示沒有太多的控制,它不能被清除並重新繪製。此外,如果時間太長,則無法回滾以查看前部的波形。還有一件事是,它只適用於播放聲音,但不適用於錄製聲音。 謝謝。