我找不到从mp3文件中读取“初始键”属性以在应用程序中使用歌曲信息的方法。
我已经尝试找到可以为我完成工作的库。我发现TagLib#是一个非常酷的解决方案,用于获取不同文件格式的标签/属性。 (包括mp3)。
我可以使用该库来获取标题,艺术家,每分钟的节拍等。.不幸的是,只有我缺少的初始键值没有使用。
我还试图找到其他支持初始键属性的解决方案,但我还没有找到。
我已经找到了一个似乎可以解决相同问题的资源,并使用TagLib#解决了这个问题,但是我不知道他是如何解决这个问题的。 使用Ctrl + F并搜索“初始”以查找代码块。 您可以找到链接here
我将发布代码的一小段内容,该代码可用于确定有关某首歌曲的不同信息,其格式如下:([“ bpm”]“ title”-“ artist”)
var file = TagLib.File.Create(filePath);
return $"[{file.Tag.BeatsPerMinute}]{file.Tag.Title} - {file.Tag.FirstPerformer}";
感谢您的任何帮助或建议! :)
答案 0 :(得分:0)
您可以使用命令行管理程序读取所有MP3属性。
在Windows 10 VS 2015上测试=>
attr_accessor
答案 1 :(得分:0)
只需从nuget: mono TaglibSharp借用代码:
var tfile = TagLib.File.Create(@"..");
string initialKey = null;
if (tfile.GetTag(TagTypes.Id3v2) is TagLib.Id3v2.Tag id3v2)
{
/*
// test: add custom Initial Key tag
var frame = TextInformationFrame.Get(id3v2, "TKEY", true);
frame.Text = new[] {"qMMM"};
frame.TextEncoding = StringType.UTF8;
tfile.Save();
*/
var frame = TextInformationFrame.Get(id3v2, "TKEY", false);
initialKey = frame?.ToString();
}
答案 2 :(得分:0)
尝试一下:
public static void Main(string[] args)
{
var path = …
var file = TagLib.File.Create (path);
var id3tag = (TagLib.Id3v2.Tag)file.GetTag (TagTypes.Id3v2);
var key = ReadInitialKey (id3tag);
Console.WriteLine ("Key = " + key);
}
static string ReadInitialKey(TagLib.Id3v2.Tag id3tag)
{
var frame = id3tag.GetFrames<TextInformationFrame>().Where (f => f.FrameId == "TKEY").FirstOrDefault();
return frame.Text.FirstOrDefault() ;
}
在Windows 10上,您还可以使用:
async Task<string> ReadInitialKey(string path)
{
StorageFile file = await StorageFile.GetFileFromPathAsync(path);
Windows.Storage.FileProperties.MusicProperties musicProperties = await file.Properties.GetMusicPropertiesAsync();
var props = await musicProperties.RetrievePropertiesAsync(null);
var inkp = props["System.Music.InitialKey"];
return (string)inkp;
}