Windows程序设计课程作业三

一、功能说明

实现音乐播放器的在线功能

二、实现思路

操作步骤:

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 格式的音频文件。
  • 使用 VorbisWaveReaderWaveOutEvent 类来播放选定的 .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 文件和在线音频。它利用了 NAudioUn4seen.Bass 这两个库来处理不同格式的音频文件,并通过 WebBrowser 控件来实现在线音频的播放。界面简单直观,用户可以通过按钮来控制音乐的播放、停止和切换,同时可以调节音量。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值