2013-11-01 46 views

回答

1

讀取(和修改/寫入)WMA元數據屬性的一種方法是使用the Windows Media Format SDK。特別是IWMHeaderInfo界面具有您想要的功能:GetAttributeByName,GetAttributeCountGetAttributeByIndex。您必須在C#中編寫P/Invoke代碼才能使用此基於COM的API。

另一個可能更簡單的方法是使用NAudio這樣的庫,它具有用於讀寫WMA文件的WindowsMediaFormat程序集。使用NAudio,閱讀屬性的任務變得非常簡單。

using (var wmaStream = new NAudio.WindowsMediaFormat.WmaStream(fileName)) 
{ 
    titleAttribute = wmaStream["Title"]; 
    authorAttribute = wmaStream["Author"]; 
    // ... 
    // read other meta tag attributes 
} 

在我寫的文章中可以找到更多details about reading and writing WMA meta tags using NAudio

1

有一個簡單的解決方案,沒有任何奇怪的框架使用。 所以我建議剛讀取文件按字節使用純天然的.Net:

using System.IO;  
... 
string metaStr = string.Empty; 

      using (FileStream fs = File.OpenRead(wmaUrl)) 
      { 
       byte[] b = new byte[3000]; 

       fs.Read(b, 0, b.Length); 

       metaStr = Encoding.UTF8.GetString(b, 0, 3000);     
       metaStr = metaStr.Replace("\0", ""); 

       int metaStart = metaStr.IndexOf("<?xml version"); 
       metaStr = metaStr.Substring(metaStart); 

       int metaEnd = metaStr.IndexOf("</recordingDetails>"); 
       metaStr = metaStr.Substring(0, metaEnd) + "</recordingDetails>";    
      } 

現在metaStr包含的WMA文件的描述,通常被稱爲一個音頻文件元數據的註釋字段。

請記住,這個Comment字段可以被其他用戶更新,並且可以包含其他標籤(不像上面顯示的「recordingDetails」),因此您應該使用自己的自定義子字符串來定義必要的元數據邊界。

+0

謝謝。解析看起來對我來說很不穩定...... – ChrisJJ