Получение/анализ метаданных ShoutCast

В настоящее время я делаю простой музыкальный плеер и хотел бы транслировать онлайн-радио. Мне удалось транслировать радио ShoutCast, но проблема в том, что я понятия не имею, как проанализировать название и исполнителя из потоковых метаданных. Вот мой код.

Player.cs

    public string[] GetTags(bool streaming)
    {
        if (streaming == true)
        {
            IntPtr tag = Bass.BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_META);
            string[] tags = Utils.IntPtrToArrayNullTermUtf8(tag);
            if (tags != null)
            {
                return tags;
            }            
        }
        return null;
    }

Main.cs

  private void btnLoadURL_Click(object sender, EventArgs e)
    {
        p.LoadURL(tbFile.Text);
        string[] tags = p.GetTags(true);
        if (tags != null) 
        {
            foreach (String tag in tags)
            {
                lblStatus.Text = tag;
            }
        }
    }

В настоящее время мне нужно перебрать tags, чтобы получить метаданные в формате StreamTitle='xxx';StreamUrl='xxx';. Я хотел бы разобрать это на;

Название: ХХХ

Исполнитель: ххх

и полностью удалите StreamUrl.

Спасибо!


person Zerocchi    schedule 04.09.2014    source источник


Ответы (1)


Мой собственный подход заключается в объединении массива строк в строку с использованием метода String.Join.

string conTitle = String.Join("", tags);

затем, используя регулярное выражение, я могу извлечь исполнителя и песню из строки:

if (tags != null)
            {
                string ConTitle = String.Join("", tags);
                string FullTitle = Regex.Match(ConTitle,
                  "(StreamTitle=')(.*)(';StreamUrl)").Groups[2].Value.Trim();
                string[] Title = Regex.Split(FullTitle, " - ");
                return Title;
            }          

В Main.cs я перебираю возвращаемое значение и присваиваю переменную в соответствии с индексом string[]

if (tags != null) 
        {
            foreach (string tag in tags)
            {
                lblArtist.Text = tags[0];
                lblTitle.Text = tags[1];
            }
        }

Вот изображение игрока, так как у меня недостаточно представителей, чтобы загрузить его< /s> Теперь у меня достаточно представителей, так что вот изображение.

Хотя мне нужно заглянуть в регулярное выражение, так как там также появилось название альбома.

EDIT: вот измененное регулярное выражение:

Regex.Match(ConTitle, "(StreamTitle=')(.*)(\\(.*\\)';StreamUrl)").Groups[2].Value.Trim();

Теперь больше нет скобок с названием альбома после названия песни.

person Zerocchi    schedule 04.09.2014
comment
Просто имейте в виду, что значение StreamTitle не всегда имеет формат Artist - Title. Это просто соглашение, которому часто следуют, но часто нет. Я предполагаю, что это работает примерно в 70% случаев, но не выше. - person Brad; 04.09.2014
comment
Да, вы правы, думаю, я должен найти способ разобрать их независимо от формата, в котором они находятся. Спасибо за внимание! - person Zerocchi; 05.09.2014