Как получить информацию о треке musicbrainz из аудиофайла - PullRequest
3 голосов
/ 02 января 2011

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

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

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

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

Ответы [ 2 ]

1 голос
/ 02 января 2011

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

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

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

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

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

0 голосов
/ 22 июля 2011

Я применил подход упакованного 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 "";
        }
    }
...