You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bass.Net替换AxWindowsMediaPlayer获取歌曲标题并显示到TextBox1

替换WMP为Bass.Net实现网络电台播放及歌曲标题获取

前期准备

  • 通过NuGet安装Bass.Net包
  • 在Form类中声明Bass流变量:
    private int _streamHandle = 0;
    

修改ListBox选中事件代码

替换原有WMP调用逻辑,改为Bass.Net播放逻辑并添加歌曲标题获取逻辑:

public void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    // 停止当前播放的流
    if (_streamHandle != 0)
    {
        Bass.StreamFree(_streamHandle);
        _streamHandle = 0;
    }

    // 解析选中项的电台地址
    string swahl = listBox1.Items[listBox1.SelectedIndex].ToString();
    string[] spalten = swahl.Split('\t');
    string addr = spalten[1];

    // 初始化Bass(可移至Form_Load中仅执行一次)
    if (!Bass.Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, Handle))
    {
        MessageBox.Show("Bass初始化失败: " + Bass.ErrorGetCode());
        return;
    }

    // 打开网络音频流并播放
    _streamHandle = Bass.StreamCreateURL(addr, 0, BASSFlag.BASS_STREAM_AUTOFREE | BASSFlag.BASS_STREAM_STATUS, null, IntPtr.Zero);
    if (_streamHandle == 0)
    {
        MessageBox.Show("无法打开音频流: " + Bass.ErrorGetCode());
        return;
    }
    Bass.ChannelPlay(_streamHandle, false);

    // 定时更新歌曲标题
    var titleTimer = new System.Windows.Forms.Timer();
    titleTimer.Interval = 5000; // 每5秒刷新一次
    titleTimer.Tick += (s, args) =>
    {
        // 尝试获取Meta标签
        string metaTag = Bass.ChannelGetTags(_streamHandle, BASSTag.BASS_TAG_META);
        if (!string.IsNullOrEmpty(metaTag))
        {
            // 解析标准格式的StreamTitle
            if (metaTag.StartsWith("StreamTitle='"))
            {
                string cleanTitle = metaTag.Substring(13, metaTag.IndexOf("';") - 13);
                TextBox1.Invoke((MethodInvoker)(() => TextBox1.Text = cleanTitle));
            }
            else
            {
                TextBox1.Invoke((MethodInvoker)(() => TextBox1.Text = metaTag));
            }
            return;
        }

        // 若Meta标签无效,尝试获取ICY标签
        string icyTag = Bass.ChannelGetTags(_streamHandle, BASSTag.BASS_TAG_ICY);
        if (icyTag != null)
        {
            foreach (var part in icyTag.Split(';'))
            {
                if (part.StartsWith("StreamTitle="))
                {
                    string cleanTitle = part.Substring(12).Trim('\'');
                    TextBox1.Invoke((MethodInvoker)(() => TextBox1.Text = cleanTitle));
                    break;
                }
            }
        }
    };
    titleTimer.Start();
}

补充:Form关闭时释放资源

在Form的关闭事件中添加资源释放逻辑,避免内存泄漏:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (_streamHandle != 0)
    {
        Bass.StreamFree(_streamHandle);
    }
    Bass.Free();
}

内容的提问来源于stack exchange,提问作者user26381234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 00:50:12