如何用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
相关产品推荐
相关产品推荐

