2011-04-25 55 views
3

Hy!
我想從C#(wpf)中的音頻文件(標題,藝術家等)中獲取一些信息。該MediaElement的不提供這個選項,所以我用這個代碼(直接讀取的字節):WPF C#,從音頻文件中獲取信息

public string[] GetAudioFileInfo(string path) 
    { 
     path = Uri.UnescapeDataString(path); 

     byte[] b = new byte[128]; 
     string[] infos = new string[5]; //Title; Singer; Album; Year; Comm; 
     bool isSet = false; 

     //Read bytes 
     try 
     { 
      FileStream fs = new FileStream(path, FileMode.Open); 
      fs.Seek(-128, SeekOrigin.End); 
      fs.Read(b, 0, 128); 
      //Set flag 
      String sFlag = System.Text.Encoding.Default.GetString(b, 0, 3); 
      if (sFlag.CompareTo("TAG") == 0) isSet = true; 

      if (isSet) 
      { 
       infos[0] = System.Text.Encoding.Default.GetString(b, 3, 30); //Title 
       infos[1] = System.Text.Encoding.Default.GetString(b, 33, 30); //Singer 
       infos[2] = System.Text.Encoding.Default.GetString(b, 63, 30); //Album 
       infos[3] = System.Text.Encoding.Default.GetString(b, 93, 4); //Year 
       infos[4] = System.Text.Encoding.Default.GetString(b, 97, 30); //Comm 
      } 
      fs.Close(); 
      fs.Dispose(); 
     } 
     catch (IOException ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

     return infos; 
    } 

這段代碼的問題,有時它沒有給予充分的標題或僅代表小立方體。 (如果我在MeidaPlayer中打開媒體,比我可以看到完整的標題)
我不確定GetString(byte [],int,int)的參數,也許我在那裏犯錯誤。

在我prgram:This is the result
在媒體播放器:enter image description here

+0

什麼文件格式?你在哪裏得到你在GetString調用中使用的數字? – Justin 2011-04-25 20:05:13

+0

mp3和wav。我嘗試了幾次不同的值,但通過這個值,我得到了立方體。 – SeBee 2011-04-25 20:15:06

回答

2

您正在閱讀的ID3v1 header,這限制了標題爲30個字符。另外,比這更短的任何東西都會填充空格或零,後者將轉換爲您看到的框。你需要使用類似剝奪那些關:

myString = myString.Replace("\0", "") 

機會是媒體播放器讀取的ID3v1擴展標籤,這是您正在閱讀的頭之前。有關更多信息,請參閱上面的鏈接。但是,它實際上是在讀取128個字節之前的227個字節。

在擴展標題中,標題(和其他)限制爲60個字符,而不是30.

+0

謝謝你的答案:)現在它的工作 – SeBee 2011-04-25 20:48:53

相關問題