C# 如何从音频文件中获取musicbrainz曲目信息

C# 如何从音频文件中获取musicbrainz曲目信息,c#,audio,fingerprinting,audio-fingerprinting,musicbrainz,C#,Audio,Fingerprinting,Audio Fingerprinting,Musicbrainz,谁能告诉我如何使用音频指纹从音频文件(mp3、wav、wma、ogg等)的数据库中获取曲目信息。我正在使用MusicBrainz Sharp库,但任何其他库都可以 我已经看到,您必须使用libofa库,不能使用MusicBrainz Sharp从音频文件获取puid,但我不知道如何将libofa与C#一起使用 请展示一些示例和代码片段来帮助我,因为我在任何地方都找不到它们 提前谢谢 问题是,您可能可以使用来获取音频文件的指纹,但如果该文件没有可用的指纹,您将被卡住,必须使用类似于将音频指纹提交到

谁能告诉我如何使用音频指纹从音频文件(mp3、wav、wma、ogg等)的数据库中获取曲目信息。我正在使用MusicBrainz Sharp库,但任何其他库都可以

我已经看到,您必须使用libofa库,不能使用MusicBrainz Sharp从音频文件获取puid,但我不知道如何将libofa与C#一起使用

请展示一些示例和代码片段来帮助我,因为我在任何地方都找不到它们


提前谢谢

问题是,您可能可以使用来获取音频文件的指纹,但如果该文件没有可用的指纹,您将被卡住,必须使用类似于将音频指纹提交到的东西,然后等待大约一天才能获取指纹

话虽如此,大约两年前我尝试过类似的方法,但如果我没记错的话,当我没能编写IDv3标签时,我对这个项目失去了兴趣。但是,源代码是可用的

我基本上使用了
DllImport
,并且(即读取输出XML)能够读取指纹,并在没有从libofa获得指纹的情况下提交指纹文件。我还写了一篇文章,用它从MusicBrainz读取信息

好吧,我想,至少那是我当时的计划我希望这有助于你解决你的问题,我希望看到这方面的更新


编辑:我刚刚注意到我为自己创建了一个,这基本上是说我仍然需要一个实现,这可能就是为什么我在中创建了。因此,我想我没有实现只是为了能够进行指纹识别/获取guid,因为我没有使正确工作。

我使用了上面建议的包装genpuid方法

    private string GetPUID(string fileName)
    {

        Process p;
        ProcessStartInfo si;
        string outRow;
        string puidReturned;

        string gendPuidPath = @"C:\Program Files\genpuid\genpuid.exe";
        string gendPuidKey = "your key here";
        System.Text.RegularExpressions.Regex puidRex = new System.Text.RegularExpressions.Regex( @"puid: (\S+)" ); // sample:  puid: 3c62e009-ec93-1c0f-e078-8829e885df67
        System.Text.RegularExpressions.Match m;

        if (File.Exists(gendPuidPath))
        {
            try
            {
                si = new ProcessStartInfo(gendPuidPath, gendPuidKey + " \"" + fileName + "\"");
                si.RedirectStandardOutput = true;
                si.UseShellExecute = false;

                p = new Process();
                p.StartInfo = si;
                p.Start();

                puidReturned = "";
                while ((outRow = p.StandardOutput.ReadLine()) != null)
                {
                    m = puidRex.Match(outRow);
                    if (m.Success)
                        puidReturned = m.Groups[1].Value;
                    Debug.WriteLine(outRow);
                }
                p.WaitForExit();
                p.Close();

                return puidReturned;
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                Debug.WriteLine(ex.StackTrace);
                throw new Exception("Unexpexted Error obtaining PUID for file: " + fileName, ex);
            }
        }
        else
        {
            Debug.WriteLine("genpuid.exe not found");
            return "";
        }
    }

@Baki:这有帮助吗?或者你需要进一步的建议吗?要写ID3标签(你真的是指ID3v3?还是id3v2?),你可以使用taglib。有一个nuget,使用它真的很好。在2008年,TagLib实际上在.NET中工作得不太好(nuget并不存在;),但我认为它在工作上做得更好了。:)