#c# #wpf #audio #file-io #encoding
#c# #wpf #Аудио #file-io #кодирование
Вопрос:
Привет!
Я хотел бы получить некоторую информацию из аудиофайла (название, исполнитель и т.д.) На 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), возможно, я допускаю там ошибки.
В моей программе:
В медиаплеере:
Комментарии:
1. Какой формат файла? Откуда вы взяли числа, которые вы использовали в вызовах getString?
2. mp3 и wav. Я несколько раз пробовал разные значения, но вместо этого значения я получаю кубы.
Ответ №1:
Вы читаете заголовок ID3v1, который ограничивает заголовок 30 символами. Кроме того, все, что короче этого, дополняется пробелами или нулями, последнее из которых переводится в поля, которые вы видите. Вам нужно было бы удалить их, используя что-то вроде:
myString = myString.Replace("", "")
Скорее всего, медиаплеер считывает расширенный тег ID3v1, который помещается перед заголовком, который вы читаете. Смотрите ссылку выше для получения дополнительной информации. Но фактически это 227 байт до 128 байт, которые вы читаете.
В расширенном заголовке заголовок (и другие) ограничен 60 символами вместо 30.