WinForm+C#小案例--->写一个音乐播放器

C#学习 winform实现简单音乐播放器 c# winform 音乐播放器 阅读详情

需求如下:

1. 点击音乐文件按钮,打开本地音乐文件,可以实现单选也可以多选音乐文件
2. 当选择后音乐文件名称添加到ListBox列表框中,双击歌曲名称实现音乐播放,同时在右侧展示对应的歌手图像
3. 点击上一曲和下一曲按钮,可以实现音乐切换并自动播放,同时在右侧展示对应歌手图
像

效果预览

创建 Winform 项目并设计界面

编写代码实现切换逻辑
using System;
using System.Drawing;
using System.IO;
using System.Media;
using System.Windows.Forms;

namespace 第5题
{
    public partial class Form1 : Form
    {
        // 存储选中的音乐文件完整路径(替换原静态变量,避免全局污染)
        private string[] _musicPaths;
        // 存储歌手图片文件完整路径(与音乐文件一一对应)
        private string[] _singerImagePaths;
        // 当前播放的音乐索引(默认从0开始)
        private int _currentMusicIndex = 0;
        // 音乐播放器对象(仅支持WAV格式,MP3需用NAudio等第三方库)
        private readonly SoundPlayer _soundPlayer = new SoundPlayer();

        public Form1()
        {
            InitializeComponent();
            button4.Text = "播放";
        }

        // 绑定一个窗体加载事件
        private void Form1_Load(object sender, EventArgs e)
        {
            string imageFolder = "E:\\桌面\\音乐播放器案例素材\\imgs";
            //检查图片文件夹是否存在
            if (!Directory.Exists(imageFolder))
            {
                MessageBox.Show($"歌手图片文件夹不存在:{imageFolder}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            // 加载所有歌手图片路径
            _singerImagePaths = Directory.GetFiles(imageFolder);
            // 检查图片数量是否不为空
            if (_singerImagePaths.Length == 0)
            {
                MessageBox.Show($"歌手图片文件夹中无图片:{imageFolder}", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }


        //打开音乐
        private void button1_Click(object sender, EventArgs e)
        {
            //创建文件选择对话框
            OpenFileDialog ofd = new OpenFileDialog();
            // 存储歌曲文件的完整路径
            ofd.InitialDirectory = "E:\\桌面\\音乐播放器案例素材\\mp3";
            ofd.Filter = "音乐文件|*.mp3;*.wav;*.wma|所有文件|*.*";
            ofd.Multiselect = true; // 允许多选文件
            ofd.Title = "选择音乐文件";
            //显示对话框
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                // 清空原有列表
                listBox1.Items.Clear();
                // 记录新选择的音乐路径
                _musicPaths = ofd.FileNames;
                // 重置当前播放索引(新文件从第一首开始)
                _currentMusicIndex = 0;

                foreach (string filePath in _musicPaths)
                {
                    //原文件名"a七里香.wav" → 去掉扩展名→"a七里香" → 去掉第一个字符→"七里香"
                    listBox1.Items.Add(Path.GetFileNameWithoutExtension(filePath).Substring(1)); // 列表显示文件名                    
                }
            }
        }

        //给列表绑定双击事件 双击也播放音乐
        private void listBox1_DoubleClick(object sender, EventArgs e)
        {
            if (listBox1.SelectedIndex < 0 || _musicPaths == null || _musicPaths.Length == 0)
            {
                MessageBox.Show("请先选择音乐文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            // 更新当前播放索引为选中项
            _currentMusicIndex = listBox1.SelectedIndex;
            // 播放选中的音乐
            PlayCurrentMusic();
        }

        //上一曲
        private void button2_Click(object sender, EventArgs e)
        {
            //判断是否有音乐文件
            if (_musicPaths == null || _musicPaths.Length == 0)
            {
                MessageBox.Show("请先选择音乐文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            _currentMusicIndex--;
            if (_currentMusicIndex < 0)
            {
                _currentMusicIndex = _musicPaths.Length - 1;
            }

            listBox1.SelectedIndex = _currentMusicIndex;
            PlayCurrentMusic();
        }

        //下一曲
        private void button3_Click(object sender, EventArgs e)
        {
            //判断是否有音乐文件
            if (_musicPaths == null || _musicPaths.Length == 0)
            {
                MessageBox.Show("请先选择音乐文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            // 下一曲逻辑:索引+1,若到末尾则跳转到第一首
            _currentMusicIndex++;
            if (_currentMusicIndex >= _musicPaths.Length)
            {
                _currentMusicIndex = 0;
            }

            // 选中ListBox对应项
            listBox1.SelectedIndex = _currentMusicIndex;
            // 播放当前音乐
            PlayCurrentMusic();
        }


        //暂停
        private void button4_Click(object sender, EventArgs e)
        {
            if (_soundPlayer.IsLoadCompleted == false)
            {
                MessageBox.Show("请先选择并播放音乐!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            // 状态切换:暂停→播放,播放→暂停
            if (button4.Text.Equals("暂停"))
            {
                _soundPlayer.Stop(); // 暂停播放
                button4.Text = "播放";
            }
            else
            {
                _soundPlayer.Play(); // 继续播放
                button4.Text = "暂停";
            }
        }


        /// <summary>
        /// 工具方法:播放当前索引对应的音乐,并显示对应歌手图片
        /// 作用:避免上一曲/下一曲/双击列表的代码重复
        /// </summary>
        private void PlayCurrentMusic()
        {
            try
            {
                // 加载并播放当前音乐
                _soundPlayer.SoundLocation = _musicPaths[_currentMusicIndex];
                _soundPlayer.Play(); // 异步播放
                button4.Text = "暂停"; // 播放时按钮显示"暂停"

                //加载并显示对应歌手图片(音乐索引与图片索引一一对应)
                if (_singerImagePaths != null && _singerImagePaths.Length > _currentMusicIndex)
                {
                    // 释放旧图片资源,避免内存泄漏
                    if (pictureBox1.Image != null)
                    {
                        pictureBox1.Image.Dispose();
                    }
                    // 加载新图片并自适应显示
                    pictureBox1.Image = Image.FromFile(_singerImagePaths[_currentMusicIndex]);
                    pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                }
                else
                {
                    MessageBox.Show("当前歌曲无对应歌手图片!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                // 捕获播放/图片加载异常
                MessageBox.Show($"操作失败:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        //窗体关闭事件

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            // 停止播放并释放音乐播放器
            _soundPlayer.Stop();
            _soundPlayer.Dispose();

            // 释放歌手图片资源
            if (pictureBox1.Image != null)
            {
                pictureBox1.Image.Dispose();
            }
        }
    }
}
效果演示

希望对大家有所帮助。感谢大家的关注和点赞。

c#程序设计 音乐播放器 这次c#程序设计我们小组设计的是音乐播放器,其中我负责的是音乐的播放。其中涉及文件的读取和歌曲的播放以及控件的显示。 阅读详情

相关推荐

C# WinForm 音乐播放器源码

目前网络上很多C#做的音乐播放器,但是功能不尽人意。本人通过网上的播放器源码结合自身的知识做出一个比较好的播放器,供大家交流。如图: 以下是播放器界面代码,新建一个项目CmTTPlayer,窗体文件名为Frm; namespace CmTTPlayer {     partial class Frm     {         ///         ///

黑色♂草莓的专栏 6912

C#播放音乐的5种方式

1. 播放系统事件声音 System.Media.SystemSounds.Asterisk.Play(); System.Media.SystemSounds.Beep.Play(); System.Media.SystemSounds.Exclamation.Play(); System.Media.SystemSounds.Hand.Play(); System.Media.SystemS

子丰的博客 1万+

C#简单音乐播放器(三)

简单音乐播放器(三) 一、前言 时隔一年,终于回来填坑了。前段时间把这个以前写的东西拿出来大改了UI,然后用去作为数字媒体开发课的作业交了,课上演示效果还不错。因为到了要找实习的时间了,最近的半年主要精力都花在学Java了,C#用得也少了许多。 这次主要是把项目的UI进行了美化,自己重绘了两个控件,现在的界面不再是小白框了。(先上界面) (专辑封面界面) (播放列表界面) 对于使...

Rhine 1万+

C#音乐播放器(WinForm简约小项目)

为什么使用Windows Media Player COM组件Windows Media Player控件可以播放当前最流行的音频、视频文件和大多数混合型的多媒体文件。Windows Media Player COM组件功能丰富,适配windowsWindows Media Player 控件的对象模型在 .NET Framework 与非托管代码和脚本中的对象模型基本相同,这为开发者提供了丰富的 API 来控制媒体播放和管理媒体库2。OGG:用于读取OGG后缀的音乐文件,并载入右侧的列表。

weixin_73767660的博客 1860

C#音乐播放器(可播放wav &mp3格式)

C#音乐播放器 大二写的一个小项目(未联网),基本功能都实现了,基本功能主要包括歌曲切换、歌词展示、添加本地歌曲、用户登录注册(登录进去进行收藏)等等一些功能,下面总结一下各项功能的一些实现思路。 源码地址 ...

m0_48863007的博客 6534

C#使用axWindowsMediaPlayer实现音乐播放器

1 加载COM组件,把Windows Media Player控件拖放到Winform窗体中 工具--》选择工具箱项--》COM组件--》Windows Media Player 2 音乐播放器  public partial class Form1 : Form { public Form1() { Initia

1万+

C# 《WinForm》简约版“音乐播放器”小项目

今天下午时分,学习了一个简单的音乐播放器,现在先下了给C#Winform萌新练练手! 效果图: 需要使用到的命名空间: using System.Collections.Generic; :泛型List using System.IO;:返回文件名和后缀名Path.GetFileName using System.Media;:播放.wav类型的音乐类SoundPlayer using System.Windows.Forms;:打开对话框OpenFileDialog 首先在设计页面托四个按钮

cpp_learner的博客 2723

C#编写的音乐播放器:实现简单的音乐播放功能

打开Visual Studio,选择"新建项目",然后选择"C#控制台应用程序"模板。请注意,上述代码并不涵盖错误处理和异常处理,仅用于演示基本的音乐播放功能。在实际应用中,你可能需要添加适当的错误处理和异常处理机制。在本文中,我将展示如何使用C#编写一个简单的音乐播放器。这个音乐播放器将具有基本的播放、暂停和停止功能,并可以选择和播放音乐文件。根据用户的选择,我们调用不同的方法实现相应的功能。使用上述代码,我们可以实现一个简单的音乐播放器。你可以在控制台中选择操作选项来播放、暂停和停止音乐。

AhTf__的博客 766

winform制作音乐播放器

winform制作音乐播放器 本文利用C# 调用Windows自带的Windows Media Player 打造一款属于自己的音乐播放器,以供学习分享使用,如有不足之处,还请指正。 概述 Windows Media Player是微软公司出品的一款免费的播放器,属于Microsoft Windows的一个组件,通常简称"WMP",支持通过插件增强功能。版本Windows Media Player 12 随 Windows 7及以上提供。可以播放MP3,WMA,WAV等音频文件。本文音乐播放器,主要是MP3

dotNet全栈开发 1387

基于C#制作一个音乐播放器

此文主要基于C#制作音乐播放器,可实现导入本地歌曲、音乐播放、音量设置、歌词显示等。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 5567

C# WinForm音乐播放器实战项目

Windows多媒体库(WINMM.DLL)是Windows操作系统提供的一个用于处理音频和视频的底层API集合。它提供了一组丰富的接口,允许开发者实现音频的播放、录制和控制等功能。由于它作为Windows系统的一部分,因此无需额外安装,可以直接在应用程序中引用和使用。WINMM.DLL广泛应用于游戏开发、多媒体应用程序以及需要音频控制的软件中。在现代用户界面中,滑动条(Slider)是一种常见的控件,用于提供一种直观的方式来选择一个范围内的值,尤其是在调节音量、亮度或选择时间点等场景中。

weixin_35749786的博客 1185

C#:一个多格式、可下载音乐文件的音乐播放器MusicPlayer

本程序通过 WinForm 实现了一个多媒体播放器,用户可以通过简洁的图形界面播放 MP3 和 OGG 音乐文件,同时支持通过网络链接进行音乐文件的下载。程序设计充分考虑了易用性、兼容性和异常处理,旨在提供稳定且用户友好的音乐播放体验。

m0_74139412的博客 1998

用C#打造WinForm圆形按钮控件

本文还有配套的精品资源,点击获取 简介:在Windows Forms开发中,自定义控件是满足特定项目需求的关键。本文介绍了如何用C#创建一个具有圆形外观和音乐播放器样式按钮功能的自定义控件。从控件基础到自定义绘制,再到事件处理和控件封装,详细说明了圆形按钮控件的设计实现过程,使得开发者能够通过自定义控件提升WinForm应用的用户体验。 1. WinForm控件基础介...

weixin_26907223的博客 4511

WinForm窗体程序——C#音乐播放器

/存储音频名称//用于存储多个文件//创建输出设备。

qq_74878985的博客 1731

Anroid8.1 强制修改系统可以adb remount

在Android6.0 (Android M)user版本上,发现使用adb root后再adb remount系统之后会提示这样信息:remount of /system failed: Read-only file system,这是不能对system分区进行操作,提示没有写权限,为只读文件系统Read-only file system,因为系统本身在user就不支持可写操作,我们就不能adb push来调试apk,如果想调试apk就需要修改system、vendor权限问题。 如下现象: C:\Use

wq892373445的博客 1408

GitHub 镜像站点

国内访问 GitHub 有时会遇到速度慢或不稳定的情况,这时 GitHub 镜像站点就能帮上忙。它们通过代理或缓存机制,让你更顺畅地浏览仓库、下载资源甚至克隆代码。希望这些信息能帮你更顺畅地访问 GitHub 资源。下面表格汇总了一些常见的镜像站及其主要用途。

BillKu的博客 6万+

winform制作简易音乐播放器

1. 程序应能够读取MP3,ogg文件,并播放其中的音频。2. 程序应能够处理可能出现的异常,如文件不存在、文件读取错误等。3. 程序应具有良好的用户界面,方便用户进行操作。4. 程序应具有良好的兼容性,能在不同版本的C#中正常运行。

random574的博客 1069

基于51单片机的校园一卡通系统(仿真)

本次设计利用LCD1604设计可视化界面,矩阵按键执行交互,继电器模拟门的开关,系统集成考勤系统、门禁系统、消费系统、充值系统。同时利用LED灯、蜂鸣器进行指示,方便用户查看状态。

MGT_9796的博客 1554

C#实现简单音乐播放器

C#实现简单音乐播放器 1、简单音乐播放器实现 (1)新建WINFORM程序,窗体上添加三个按钮:打开:b_open;上一曲:b_up;下一曲:b_next。然后添加一个listbox控件。 要实现的功能:点击打开按钮,打开对话框选择多个音乐文件,可以将文件添加到ListBox控件中,双击ListBox控件中音乐文件名可以进行播放。点击上一曲可以切换到上一曲歌进行播放,点击下一曲可以切换到下

liyuqian199695的博客 2万+

新疆地形数据下载:30米、12.5米、5米DEM地形数据

新疆是我国陆地面积最大的省级行政区,总面积达166万平方公里。新疆的地形也十分的复杂,新疆的地形呈山脉与盆地相间排列,盆地被高山环抱,,俗称“三山夹两盆”。三山指阿尔泰山、昆仑山、天山,两盆是指塔里木盆地和准噶尔盆地。 对精度要求不高的话,可以直接使用图新地球下载 新疆30米地形数据 大小:9.26GB 来自ASTER v3的新疆30米地形数据 30米地形数据下载 新疆12.5米地形数据 12.5米DEM数据由于精度比较高,一般不会用到全省的数据,通常用的是一个地区的,因此,可以单独分

LocaSpace的博客 3495

【YOLO26实战全攻略】19——智慧交通(一):高速抛洒物与事故检测全流程落地

在智慧交通领域,高速公路抛洒物、交通事故等突发状况常导致二次事故与大规模拥堵,传统人工监控存在响应滞后、覆盖有限等痛点。本文基于Ultralytics YOLO26算法,结合ByteTrack多目标跟踪技术,构建从数据准备、模型训练到边缘部署的全栈式智慧交通检测系统。核心内容包括:多车型专属数据集构建、抛洒物检测模型优化、ByteTrack轨迹跟踪集成、异常事件(违停/逆行/碰撞)识别逻辑实现,以及NVIDIA Jetson边缘设备部署方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1491

使用C#构建音乐播放器

代码实现了基本的功能,包括文件选择、音乐播放、暂停和停止等。通过使用控件和库,实现了对不同格式音乐文件的播放支持。程序对可能出现的异常情况进行了处理,但错误信息仅以弹窗和日志文件形式显示,可以更友好地提供用户反馈。界面简洁明了,缺乏一些美观性,可以根据自我需求,考虑改进界面设计,提升体验。代码结构清晰。

2301_80956920的博客 1546

OpenClaw进阶实战(二十三):微信公众号接入——被动回复、客服消息、素材管理

本文介绍了将OpenClaw接入微信公众号的完整方案,重点包含以下内容: 接入方案选型:对比官方插件、三方服务和自建中转三种方式,选择自建Node.js中转服务实现灵活控制 核心原理:通过中转服务器完成微信消息协议转换,处理5秒超时限制和异步回复机制 实战开发: 搭建Express中转服务 实现Token管理和消息处理 采用内存缓存对话历史 通过客服接口异步回复 官方插件方案:介绍2026年发布的ClawBot插件,支持文本/图片/文件收发 进阶功能:包括素材管理接口调用示例 该方案适用于需要深度定制公众号

PeterPan的博客 142

c#使用NAudio和WebClient构建一个多功能的音乐播放器

通过上述代码实现,我们展示了如何在 C# 环境下使用 NAudio 和 WebClient 实现音乐的播放和下载功能。这些功能不仅提升了用户体验,还展示了如何利用异步编程和后台任务来处理音频文件的读取、下载和播放操作,为应用程序增添了更多实用性和功能性。

qq_74303514的博客 1239

【数据结构】期末考试复习(考点+例题)

1.线性表定义及其存储实现:顺序表和链接表,优缺点分析(顺序存储可随 机访问,链式存储可灵活利用空间),相关操作的时间复杂度。 2.链表的插入删除操作 3.两种特殊的线性表及其应用:栈、队列 4.栈、队列上的(插入/删除)操作及其特点 5.循环队列满和空的条件 6.能够定义线性表、栈、队列的数据存储结构,能够实现相关操作的算法并 分析时间复杂度(例如插入、删除及其它应用等) 7.理解线性结构的应用( 如根据要求能灵活定义线性表结构,能根据线性表 的插入、删除操作解决实际问题) 二叉树基本概念与性质(高

Molly 的博客 9371

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

上一篇: WinForm+C#小案例--->写一个记事本程序
下一篇: WinForm+C#小案例--->用代码实现窗体设计的水果购物车小案例
MM_MS
博客等级 码龄1年 58粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MM_MS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值