2014-09-20 170 views
0

我正在C#/ Asp.net/JavaScript(作爲網站)寫音頻可視化器。由於我的動畫應該隨着音樂順暢移動,所以我認爲在後面的代碼中預處理MP3會更有意義,將值/頻率寫入文本文件或其他東西,然後使用javascript讀取值並相應地修改動畫。基本上我想要做一些像這樣的事情吧:https://lh4.ggpht.com/Qhm4EeDUgVlvLcX4MiZ1idGDUo5cD5PmLAIZIfnJlilzU789OPXAUK_emJSOT3CK4Vs=h900 我需要某種數值來作爲酒吧的高度,它應該隨着音樂的繼續而改變。 我爲此使用Naudio。這裏是我的代碼:音頻可視化器C#

using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using NAudio; 
using System.IO; 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     MP3toWAV(MapPath("~/Music/UctfnI6yUPM.mp3"), MapPath("~/Music/UctfnI6yUPM.wav")); 
     Strip(MapPath("~/Music/UctfnI6yUPM.wav")); 
    } 
    public void MP3toWAV(string file,string output) 
    { 
     using (NAudio.Wave.Mp3FileReader reader = new NAudio.Wave.Mp3FileReader(file)) 
     { 
      NAudio.Wave.WaveFileWriter.CreateWaveFile(output, reader); 
     } 
    } 
    public void Strip(string path) 
    { 
     NAudio.Wave.WaveChannel32 wave = new NAudio.Wave.WaveChannel32(new NAudio.Wave.WaveFileReader(path)); 
     byte[] buffer = new byte[8192]; 
     int read = 0; 
     StreamWriter writer = new StreamWriter(MapPath("~/Result.txt")); 
     while (wave.Position < wave.Length) 
     { 
      read = wave.Read(buffer, 0, 8192); 
      for (int i = 0; i < read/4; i++) 
      { 
       writer.Write(BitConverter.ToSingle(buffer, i * 4)); 
      } 
     } 
    } 
} 

這裏有引擎收錄輸出的一部分:http://pastebin.com/Ve5tym20 我無法複製整個事情,因爲它是一個〜90MB的文本文件。 我不太清楚我應該如何使用這些數據,以及這是否是正確的數據。 我花了幾天的時間查找如何做到這一點。我已經看過Mark Heath關於自動調諧的文章,並且我也看了BandedSpectrumAnalyzer項目。我從文章中得到了很多我的代碼,但BandedSpectrumAnalyzer項目讓我感到困惑(我不知道它的部分是什麼) 幫助請???

回答

1

由於您想在瀏覽器中構建EQ可視化文件,我建議您使用WebAudio HTML5 API代替服務器端方法。您可以使用WebAudio API輕鬆操作MP3和其他文件類型

您可以在線找到許多示例如何使用API​​。這裏列出了一些很好的示例: http://webaudio.github.io/demo-list/

該API目前僅在Chrome,Firefox和Safari中受支持。我相信IE很快會跟進。 http://caniuse.com/#feat=audio-api

下面是一個例子,應該是對你的情況有幫助,並支持所有瀏覽器: http://www.smartjava.org/content/exploring-html5-web-audio-visualizing-sound