获取媒体标记(.mp3,m4a)

时间:2014-05-20 02:21:09

标签: c# metadata media id3

我正在编写一个程序,用于从所选的媒体文件中收集信息。我想得到的东西:艺术家,专辑,流派,时间,年。所有基本的东西。现在我已经搜索了Stack以找到另一个形式的帖子,就像我正在创建的那个帖子一样,没有人有这样的帖子,所以这里什么都没有。

我想在不使用任何第三方库的情况下检索所有这些信息。

但我发现了这段代码。

byte[] b = new byte[128];
string sTitle;
string sSinger;
string sAlbum;
string sYear;
string sComm;

FileStream fs = new FileStream(@"D:\Music\Led Zeppelin - Discography\01. Studio albums\04. Led Zeppelin IV (1971)\01. Black Dog.mp3", FileMode.Open);
fs.Seek(-128, SeekOrigin.End);
fs.Read(b, 0, 128);
bool isSet = false;
String sFlag = System.Text.Encoding.Default.GetString(b, 0, 3);
if (sFlag.CompareTo("TAG") == 0)
 {
  System.Console.WriteLine("Tag   is   setted! ");
  isSet = true;
 }

if (isSet)
 {
//get   title   of   song; 
 sTitle = System.Text.Encoding.Default.GetString(b, 3, 30);
 System.Console.WriteLine("Title: " + sTitle);
//get   singer; 
 sSinger = System.Text.Encoding.Default.GetString(b, 33, 30);
System.Console.WriteLine("Singer: " + sSinger);
//get   album; 
 sAlbum = System.Text.Encoding.Default.GetString(b, 63, 30);
 System.Console.WriteLine("Album: " + sAlbum);
//get   Year   of   publish; 
 sYear = System.Text.Encoding.Default.GetString(b, 93, 4);
 System.Console.WriteLine("Year: " + sYear);
//get   Comment; 
 sComm = System.Text.Encoding.Default.GetString(b, 97, 30);
 System.Console.WriteLine("Comment: " + sComm);
}
 System.Console.Read();

我不明白如何获取它获得的信息。

怎么样?
sTitle = System.Text.Encoding.Default.GetString(b, 3, 30);

获取歌曲标题。

此外,当我收到信息时,我想自定义它,然后再次设置它。

任何帮助,谢谢:)

2 个答案:

答案 0 :(得分:1)

此处描述了MP3 ID标签结构:http://en.wikipedia.org/wiki/ID3

Field   Length      Description
header  3       "TAG"
title   30      30 characters of the title
artist  30      30 characters of the artist name
album   30      30 characters of the album name
year    4       A four-digit year
comment     28 or 30    The comment.
zero-byte   1       If a track number is stored, this byte contains a binary 0.
track   1       The number of the track on the album, or 0. Invalid, if previous byte is not a binary 0.
genre   1       Index in a list of genres, or 255

编辑 - 要再次覆盖字符串,您将要执行以下操作:

FileStream fs = new FileStream(@"D:\Music\Led Zeppelin - Discography\01. Studio albums\04. Led Zeppelin IV (1971)\01. Black Dog.mp3", FileMode.Open);
fs.Seek(-128 + 3, SeekOrigin.End);  //-128 to ID tag, +3 to title
byte[] title = System.Text.Encoding.Default.GetBytes("Black Dog");
fs.Write(title, 0, title.Length);

答案 1 :(得分:0)

b是我创建的字节,它是MetaData存储在mp3中的位置。它存储在文件的最后128个字节中。 b之后的数字是偏移量。基本上,某些信息存储在.MP3文件中。

Field      Length    Offsets
Tag        3           0-2
Songname   30          3-32
Artist     30         33-62
Album      30         63-92
Year       4          93-96
Comment    30         97-126
Genre      1           127