Как получить информацию о треке musicbrainz из аудиофайла

Может ли кто-нибудь сказать мне, как получить информацию о треке из базы данных MusicBrainz из аудиофайла (mp3, wav, wma, ogg, и т. д ...) с использованием аудиодактилоскопии. Я использую библиотеку MusicBrainz Sharp, но подойдет и любая другая библиотека.

Я видел, что вы должны использовать библиотеку libofa, что вы не можете использовать MusicBrainz Sharp для получения puid из аудиофайла, но я не могу понять, как использовать libofa с C #.

Пожалуйста, покажите мне несколько примеров и фрагментов кода, потому что я нигде не могу их найти.

Заранее спасибо!


person Baki    schedule 02.01.2011    source источник


Ответы (2)


Дело в том, что вы, вероятно, можете использовать libofa, чтобы получить отпечаток аудиофайла. , но если в файле нет PUID, вы застрянете и нужно будет использовать что-то вроде genpuid, чтобы отправить отпечаток аудио на AmpliFIND и подождите около суток, чтобы получить PUID.

При этом я пробовал нечто подобное около двух лет назад, но как бы потерял интерес к проекту, когда мне не удалось написать теги IDv3, если я правильно помню. Однако исходный код доступен на Bitbucket.

Я в основном завернул libofa используя DllImport, а также обернутый genpuid (т. Е. Прочитать выходной XML), чтобы иметь возможность прочитать отпечаток пальца и отправить файл для снятия отпечатков, если я не получил его от libofa. Я также написал код, который считывает информацию из MusicBrainz с помощью MusicBrainz Sharp.

Ну, по крайней мере, я думаю, что тогда это было то, что я планировал. :) Я надеюсь, что это поможет вам решить вашу проблему, и я хотел бы увидеть обновления по этому поводу.

Изменить: я только что заметил, что создал отчет об ошибке для меня, который в основном говорит о том, что мне все еще нужна реализация для моего decoder, вероятно, поэтому я создал Этот вопрос в SO. Думаю, я не реализовал genpuid fingerprinter, чтобы иметь возможность сделать отпечаток пальца / получить руководство, потому что я не получил libofa fingerprinter для правильной работы.

person hangy    schedule 02.01.2011
comment
@Baki: Это помогло или вам нужны дополнительные советы? - person hangy; 11.01.2011
comment
Чтобы написать теги ID3 (вы действительно имеете в виду ID3v3? Или id3v2?), Вы можете использовать taglib. Есть nuget, и им действительно приятно пользоваться. - person JP Hellemons; 14.04.2017
comment
TagLib на самом деле не слишком хорошо работал с .NET в 2008 году (а NuGet не существовало;)), но я полагаю, что он стал лучше справляться со своей задачей. :) - person hangy; 18.04.2017

Я применил метод обертывания 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 "";
        }
    }
person Der Wolf    schedule 22.07.2011