从.mp3文件中获取“初始密钥”值

时间:2019-07-04 20:05:36

标签: c# id3 taglib-sharp

  

我找不到从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}";

感谢您的任何帮助或建议! :)

3 个答案:

答案 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;
    }

有关MusicProperties对象的文档,请参见here;有关有效音乐属性,请参见here