我目前正在制作简单的音乐播放器,并想流式传输在线广播。我设法流式传输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';
的元数据。我想把它解析成;
标题:xxx
艺术家:xxx
并完全删除StreamUrl
。
谢谢!
答案 0 :(得分: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 中,我迭代返回的值并根据字符串[]索引
分配变量if (tags != null)
{
foreach (string tag in tags)
{
lblArtist.Text = tags[0];
lblTitle.Text = tags[1];
}
}
Here's the player image since I don't have enough rep yet to upload one
虽然我必须回顾正则表达,因为专辑标题也出现在那里。
编辑:这是修改过的正则表达式:
Regex.Match(ConTitle, "(StreamTitle=')(.*)(\\(.*\\)';StreamUrl)").Groups[2].Value.Trim();
现在没有更多支持歌曲标题后的专辑标题。