C#.NET7 多线程播放mp3/wav音频|winmm.dll winapi播放音乐文件|C/S开发框架
测试
C# 全选
var filePath = Path.Combine(System.Windows.Forms.Application.StartupPath, @"sound\歌曲.wav");
//播放系统声音:多线程可正常播放
System.Media.SystemSounds.Beep.Play();
Thread.Sleep(1000);
//播放wav/mp3声音文件:多线程可正常播放
MySoundPlayer.PlayMusic(filePath);
MySoundPlayer.StopMusic(filePath);
//播放wav/mp3声音文件:多线程播放无效,单线程有效
System.Windows.Media.MediaPlayer mr = new System.Windows.Media.MediaPlayer();
mr.Open(new Uri(filePath));
mr.Play();
mr.Close();MySoundPlayer/ 使用 winmm.dll winapi播放音乐文件
C# 全选
public class MySoundPlayer
{
public static uint SND_ASYNC = 0x0001;
public static uint SND_FILENAME = 0x00020000;
[DllImport("winmm.dll")]
public static extern uint mciSendString(string lpstrCommand, string lpstrReturnString, uint uReturnLength, uint hWndCallback);
public static void PlayNmusinc(string path)
{
mciSendString(@"close temp_alias", null, 0, 0);
mciSendString(@"open """ + path + @""" alias temp_alias", null, 0, 0);
mciSendString("play temp_alias repeat", null, 0, 0);
}
/// <summary>
/// 播放音乐文件(重复)
/// </summary>
/// <param name="p_FileName">音乐文件名称</param>
public static void PlayMusic_Repeat(string p_FileName)
{
try
{
mciSendString(@"close temp_music", " ", 0, 0);
mciSendString(@"open " + p_FileName + " alias temp_music", " ", 0, 0);
mciSendString(@"play temp_music repeat", " ", 0, 0);
}
catch
{ }
}
/// <summary>
/// 播放音乐文件
/// </summary>
/// <param name="p_FileName">音乐文件名称</param>
public static void PlayMusic(string p_FileName)
{
try
{
mciSendString(@"close temp_music", " ", 0, 0);
//mciSendString(@"open " + p_FileName + " alias temp_music", " ", 0, 0);
mciSendString(@"open """ + p_FileName + @""" alias temp_music", null, 0, 0);
mciSendString(@"play temp_music", " ", 0, 0);
}
catch
{ }
}
/// <summary>
/// 停止当前音乐播放
/// </summary>
/// <param name="p_FileName">音乐文件名称</param>
public static void StopMusic(string p_FileName)
{
try
{
mciSendString(@"close " + p_FileName, " ", 0, 0);
}
catch { }
}
}
参考文档:
.NET7 .NETCore运行环境下载|C/S开发框架
CSFramework.WebapiV3(.NET7/NetCore) 系统安全及Token令牌介绍|C/S开发框架
VS2022 .NET7手动更改组件类型(TextEdit改为ComboBoxEdit)|C/S开发框架
WinFormsApp窗体应用快速开发框架(.NET7+EFCore+VS2022)
FastReport.NET2023破解版去除水印DEMO VERSION (2025.1.14/2023.2.18版本)|C/S开发框架
CSFrameworkV6.1前端+WebApiV3后端测试报告(前后端分离)|C/S开发框架
最新MES系统快速开发平台(Winform+NET8+EFCore)|C/S开发框架
.NET8 .NETCore运行环境下载|C/S开发框架
VS2022不能打开窗体设计器解决方案(无法设计窗体)|C/S开发框架
CSFrameworkV6旗舰版开发框架客户交接文件清单|C/S开发框架
CSFrameworkV6开发框架升级VS2022+.NET8+DevExpress24.1操作步骤|C/S开发框架
踩坑日记 | DevExpress GridView.GetSelectedRows方法返回无效的RowHandle行号|C/S开发框架
CSFrameworkV6.0旗舰版开发框架 | 成功案例|C/S开发框架
CSFrameworkV6.0旗舰版开发框架升级更新日志|C/S开发框架
软件开发团队使用ERP系统快速开发框架的优势
ERP,MES软件快速开发平台(Winform+VS2022+C#+.NET7)
.NET7 .NETCore运行环境下载|C/S开发框架
CSFramework.WebapiV3(.NET7/NetCore) 系统安全及Token令牌介绍|C/S开发框架
VS2022 .NET7手动更改组件类型(TextEdit改为ComboBoxEdit)|C/S开发框架
WinFormsApp窗体应用快速开发框架(.NET7+EFCore+VS2022)
FastReport.NET2023破解版去除水印DEMO VERSION (2025.1.14/2023.2.18版本)|C/S开发框架
CSFrameworkV6.1前端+WebApiV3后端测试报告(前后端分离)|C/S开发框架
最新MES系统快速开发平台(Winform+NET8+EFCore)|C/S开发框架
.NET8 .NETCore运行环境下载|C/S开发框架
VS2022不能打开窗体设计器解决方案(无法设计窗体)|C/S开发框架
CSFrameworkV6旗舰版开发框架客户交接文件清单|C/S开发框架
CSFrameworkV6开发框架升级VS2022+.NET8+DevExpress24.1操作步骤|C/S开发框架
踩坑日记 | DevExpress GridView.GetSelectedRows方法返回无效的RowHandle行号|C/S开发框架
CSFrameworkV6.0旗舰版开发框架 | 成功案例|C/S开发框架
CSFrameworkV6.0旗舰版开发框架升级更新日志|C/S开发框架
软件开发团队使用ERP系统快速开发框架的优势
ERP,MES软件快速开发平台(Winform+VS2022+C#+.NET7)
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
