Hy!
Я хотел бы получить некоторую информацию из аудиофайла (название, исполнитель и т. Д.) В C # (wpf). MediaElement не предоставляет эту опцию, поэтому я использовал этот код (читайте байты напрямую):
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), возможно, я ошибаюсь там.
В моей программе:
В медиаплеере: