任何人都可以告诉我如何使用音频指纹从音频文件(mp3,wav,wma,ogg等)中获取MusicBrainz数据库中的曲目信息。我正在使用MusicBrainz Sharp库,但其他任何库都可以。
我已经看到你必须使用libofa库,你不能使用MusicBrainz Sharp从音频文件中获取puid,但我无法弄清楚如何在C#中使用libofa。
请显示一些示例和代码段来帮助我,因为我无法在任何地方找到它们。
提前致谢!
答案 0 :(得分:1)
问题是您可以使用libofa获取音频文件的指纹,但如果文件没有PUID可用,您将被卡住并将不得不使用类似{ {3}}将音频指纹提交至genpuid并等待一天以获得AmpliFIND。
话虽这么说,我在两年前尝试过类似的东西,但是当我没有写下IDv3标签时,如果我没记错的话,对项目失去了兴趣。但是,源代码可用PUID。
我基本上on Bitbucket使用DllImport
和wrapped libofa(即读取输出XML)以便能够读取指纹并提交指纹,如果我没有得到一个来自libofa。我还写了wrapped genpuid,使用some code从MusicBrainz读取信息。
嗯,至少那是我当时的计划,我想。 :)我希望这可以帮助您解决问题,我希望看到更新。
编辑:我刚刚注意到我为自己创建了一个MusicBrainz Sharp,这基本上说我仍然需要我bug report的实现,这可能就是我创建的原因{在SO中{3}}。所以我想我没有实现decoder只是为了能够做指纹/获取guid,因为我没有让this question正常工作。
答案 1 :(得分:0)
我做了上面提到的包裹的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 "";
}
}