1

我目前正在制作简单的音乐播放器,并想流式传输在线广播。我设法流式传输 ShoutCast 广播,但问题是我不知道如何从流式元数据中解析标题和艺术家。这是我的代码。

播放器.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;
    }

主文件

  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

谢谢!

4

1 回答 1

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];
            }
        }

这是播放器图片,因为我还没有足够的代表来上传一张 我现在有足够的代表,所以这是图像。

虽然我必须查看正则表达式,因为专辑标题也出现在那里。

编辑:这是修改后的正则表达式:

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

现在歌曲标题后不再有专辑标题的括号。

于 2014-09-04T05:58:36.580 回答