一、功能说明
实现音乐播放器的在线功能
二、实现思路
操作步骤:
1.添加一个新的按钮到你的表单上,用于触发在线播放
2.处理按钮点击事件,调用播放在线音频的方法
3.实现使用WebBrowser控件播放在线音频的功能。
三、代码实现
3.1命名空间和引用
using NAudio.Wave;
using NAudio.Vorbis;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Un4seen.Bass;
NAudio 和 Un4seen.Bass:这些是音频处理库,用于播放和处理音频文件。NAudio
主要用于 WAV、MP3 等格式的音频文件,Un4seen.Bass
用于更高级的音频处理,支持更多的音频格式和效果处理。
3.2Form1 类
public partial class Form1 : Form
{
string[] files;
List<string> localmusiclist = new List<string> { };
3.3构造函数和初始化
public Form1()
{
InitializeComponent();
InitializeWebBrowser(); // 初始化WebBrowser控件
}
private void InitializeWebBrowser()
{
webBrowser1 = new WebBrowser();
webBrowser1.Dock = DockStyle.Fill;
Controls.Add(webBrowser1);
}
-
构造函数
Form1()
:- 调用
InitializeComponent()
初始化窗体组件。 - 调用
InitializeWebBrowser()
方法初始化WebBrowser
控件。
- 调用
-
InitializeWebBrowser()
方法:- 创建一个新的
WebBrowser
控件。 - 将
WebBrowser
控件添加到窗体的控件集合中。
- 创建一个新的
3.4播放本地音乐和其他功能方法
private void musicplay(string filename)
{
axWindowsMediaPlayer1.URL = filename;
string extension = Path.GetExtension(filename);
if (extension == ".ogg")
{
Console.WriteLine("这是ogg文件。"); // 仅仅是打印信息
}
else
{
axWindowsMediaPlayer1.Ctlcontrols.play(); // 播放其他格式的音乐文件
}
}
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "选择音频|*.mp3;*.flac;*.wav";
openFileDialog1.Multiselect = true;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
localmusiclist.Clear();
listBox1.Items.Clear();
if (files != null)
{
Array.Clear(files, 0, files.Length);
}
files = openFileDialog1.FileNames;
string[] array = files;
foreach (string x in array)
{
listBox1.Items.Add(x);
localmusiclist.Add(x);
}
}
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (localmusiclist.Count > 0)
{
axWindowsMediaPlayer1.URL = localmusiclist[listBox1.SelectedIndex];
musicplay(axWindowsMediaPlayer1.URL);
label1.Text = Path.GetFileNameWithoutExtension(localmusiclist[listBox1.SelectedIndex]);
}
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
axWindowsMediaPlayer1.settings.volume = trackBar1.Value;
}
private void button2_Click(object sender, EventArgs e)
{
axWindowsMediaPlayer1.Ctlcontrols.stop();
}
private void button3_Click(object sender, EventArgs e)
{
if (localmusiclist.Count > 0)
{
int index = listBox1.SelectedIndex + 1;
if (index >= localmusiclist.Count()) { index = 0; }
axWindowsMediaPlayer1.URL = localmusiclist[index];
musicplay(axWindowsMediaPlayer1.URL);
label1.Text = Path.GetFileNameWithoutExtension(localmusiclist[index]);
listBox1.SelectedIndex = index;
}
}
-
根据文件扩展名播放音乐文件。如果是
.ogg
格式,只输出一条信息到控制台;否则使用axWindowsMediaPlayer1
控件播放音乐。 -
button1_Click
:打开文件对话框,允许用户选择多个音频文件,并将选中的文件路径添加到listBox1
控件和localmusiclist
列表中。 listBox1_SelectedIndexChanged
:当用户选择listBox1
中的音乐文件时,将选中的文件路径赋给axWindowsMediaPlayer1.URL
,并调用musicplay
方法播放音乐,同时更新label1
显示当前音乐文件名。trackBar1_Scroll
:调节音量滑动条时,设置音量。button2_Click
:停止播放按钮,停止当前正在播放的音乐。button3_Click
:下一曲按钮,切换到listBox1
中的下一个音乐文件并播放。
3.5播放本地 .ogg 文件方法
private void button4_Click(object sender, EventArgs e)
{
string oggFilePath = "";
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "播放音频|*.ogg";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
oggFilePath = openFileDialog.FileName;
}
if (string.IsNullOrEmpty(oggFilePath))
{
MessageBox.Show("请选择一个有效的ogg文件。");
return;
}
try
{
using (var vorbisReader = new VorbisWaveReader(oggFilePath))
{
using (var outputDevice = new WaveOutEvent())
{
outputDevice.Init(vorbisReader);
outputDevice.Play();
// 等待播放完成
while (outputDevice.PlaybackState == PlaybackState.Playing)
{
System.Threading.Thread.Sleep(1000);
}
}
}
}
catch (Exception ex)
{
MessageBox.Show("播放失败: " + ex.Message);
}
}
button4_Click
方法:- 打开文件对话框,允许用户选择一个
.ogg
格式的音频文件。 - 使用
VorbisWaveReader
和WaveOutEvent
类来播放选定的.ogg
文件。 - 在播放过程中,通过循环等待播放完成。
3.6播放在线音频方法
private void button5_Click(object sender, EventArgs e)
{
string onlineAudioUrl = "http://your-online-audio-url_here"; // 替换为在线音频的URL
PlayOnlineAudio(onlineAudioUrl);
}
private void PlayOnlineAudio(string audioUrl)
{
// 构造HTML字符串,包含一个audio标签,用于播放音频
string html = $@"
<html>
<body style='margin:0;padding:0;'>
<audio controls autoplay>
<source src='{audioUrl}' type='audio/mpeg'>
Your browser does not support the audio element.
</audio>
</body>
</html>";
// 将HTML字符串加载到WebBrowser控件中
webBrowser1.DocumentText = html;
}
-
button5_Click
方法: -
设置一个在线音频的 URL,然后调用
PlayOnlineAudio
方法来播放该音频。 -
PlayOnlineAudio(string audioUrl)
方法: -
构造包含
<audio>
标签的 HTML 字符串,指定src
属性为传入的audioUrl
。 -
将构造的 HTML 字符串加载到
WebBrowser
控件中,从而在窗体中播放在线音频。
四、分析总结
这段代码实现了一个简单的音乐播放器应用程序,支持从本地选择音频文件并播放,以及播放本地 .ogg
文件和在线音频。它利用了 NAudio
和 Un4seen.Bass
这两个库来处理不同格式的音频文件,并通过 WebBrowser
控件来实现在线音频的播放。界面简单直观,用户可以通过按钮来控制音乐的播放、停止和切换,同时可以调节音量。