当前位置: 首页 > news >正文

C#/WPF 播放音频文件

C#播放音频文件的方式:

  • 播放系统事件声音
  • 使用System.Media.SoundPlayer播放wav
  • 使用MCI Command String多媒体设备程序接口播放mp3,wav,avi等
  • 使用WindowsMediaPlayer的COM组件来播放(可视化)
  • 使用DirectX播放音频文件
  • 使用Speech播放(朗读器,可朗读文本)

这里讲不需要引用dll就能播放音频的几种方式:

1、播放系统事件声音

System.Media.SystemSounds.Asterisk.Play();      //星号
System.Media.SystemSounds.Beep.Play();          //提示音
System.Media.SystemSounds.Exclamation.Play();   //感叹
System.Media.SystemSounds.Hand.Play();          //协助
System.Media.SystemSounds.Question.Play();      //问题

2、使用MCI Command String播放音频文件,可以支持多种格式(mp3,wav,avi),且不需要额外引用dll,可以循环播放音频

    public class AudioPlayer{public AudioPlayer(){}//定义API函数使用的字符串变量 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]private string Name = "";[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]private string durLength = "";[MarshalAs(UnmanagedType.LPTStr, SizeConst = 128)]private string TemStr = "";int ilong;//定义播放状态枚举变量public enum State{mPlaying = 1,mPuase = 2,mStop = 3};//结构变量public struct structMCI{public bool bMut;public int iDur;public int iPos;public int iVol;public int iBal;public string iName;public State state;};public structMCI mc = new structMCI();//取得播放文件属性public string FileName{get{return mc.iName;}set{try{TemStr = "";TemStr = TemStr.PadLeft(127, Convert.ToChar(" "));Name = Name.PadLeft(260, Convert.ToChar(" "));mc.iName = value;ilong = APIClass.GetShortPathName(mc.iName, Name, Name.Length);Name = GetCurrPath(Name);Name = "open " + Convert.ToChar(34) + Name + Convert.ToChar(34) + " alias media";ilong = APIClass.mciSendString("close all", TemStr, TemStr.Length, 0);ilong = APIClass.mciSendString(Name, TemStr, TemStr.Length, 0);ilong = APIClass.mciSendString("set media time format milliseconds", TemStr, TemStr.Length, 0);mc.state = State.mStop;}catch{}}}//播放public void play(){TemStr = "";TemStr = TemStr.PadLeft(127, Convert.ToChar(" "));APIClass.mciSendString("play media", TemStr, TemStr.Length, 0);              //单次播放//APIClass.mciSendString("play media repeat", TemStr, TemStr.Length, 0);     //循环播放mc.state = State.mPlaying;}//停止public void StopT(){TemStr = "";TemStr = TemStr.PadLeft(128, Convert.ToChar(" "));ilong = APIClass.mciSendString("close media", TemStr, 128, 0);ilong = APIClass.mciSendString("close all", TemStr, 128, 0);mc.state = State.mStop;}public void Puase(){TemStr = "";TemStr = TemStr.PadLeft(128, Convert.ToChar(" "));ilong = APIClass.mciSendString("pause media", TemStr, TemStr.Length, 0);mc.state = State.mPuase;}private string GetCurrPath(string name){if (name.Length < 1) return "";name = name.Trim();name = name.Substring(0, name.Length - 1);return name;}//总时间public int Duration{get{durLength = "";durLength = durLength.PadLeft(128, Convert.ToChar(" "));APIClass.mciSendString("status media length", durLength, durLength.Length, 0);durLength = durLength.Trim();if (durLength == "") return 0;return (int)(Convert.ToDouble(durLength) / 1000f);}}//当前时间public int CurrentPosition{get{durLength = "";durLength = durLength.PadLeft(128, Convert.ToChar(" "));APIClass.mciSendString("status media position", durLength, durLength.Length, 0);mc.iPos = (int)(Convert.ToDouble(durLength) / 1000f);return mc.iPos;}}}public class APIClass{[DllImport("kernel32.dll", CharSet = CharSet.Auto)]public static extern int GetShortPathName(string lpszLongPath,string shortFile,int cchBuffer);[DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]public static extern int mciSendString(string lpstrCommand,string lpstrReturnString,int uReturnLength,int hwndCallback);}

其他请参考:

https://kernel.blog.csdn.net/article/details/50845805

C#播放语音和字幕实列:

https://download.csdn.net/download/lvxingzhe3/88657604

相关文章:

C#/WPF 播放音频文件

C#播放音频文件的方式&#xff1a; 播放系统事件声音使用System.Media.SoundPlayer播放wav使用MCI Command String多媒体设备程序接口播放mp3&#xff0c;wav&#xff0c;avi等使用WindowsMediaPlayer的COM组件来播放(可视化)使用DirectX播放音频文件使用Speech播放(朗读器&am…...

如何使用宝塔面板+Discuz+cpolar内网穿透工具搭建可远程访问论坛服务

文章目录 前言1.安装基础环境2.一键部署Discuz3.安装cpolar工具4.配置域名访问Discuz5.固定域名公网地址6.配置Discuz论坛 前言 Crossday Discuz! Board&#xff08;以下简称 Discuz!&#xff09;是一套通用的社区论坛软件系统&#xff0c;用户可以在不需要任何编程的基础上&a…...

【HBase】——简介

1 HBase 定义 Apache HBase™ 是以 hdfs 为数据存储的&#xff0c;一种分布式、可扩展的 NoSQL 数据库。 2 HBase 数据模型 • HBase 的设计理念依据 Google 的 BigTable 论文&#xff0c;论文中对于数据模型的首句介绍。 Bigtable 是一个稀疏的、分布式的、持久的多维排序 m…...

JAVA 有关PDF文件和图片文件合并并生产一个PDF

情景&#xff1a; 1.文件列表包含多个图片和PDF时需要对文件进行合并 2.合并时保持文件顺序 开淦&#xff1a; 一、导入POM <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</ve…...

八股文打卡day10——计算机网络(10)

面试题&#xff1a;HTTP1.1和HTTP2.0的区别&#xff1f; 我的回答&#xff1a; 1.多路复用&#xff1a;HTTP1.1每次请求响应一次都得建立一次连接&#xff0c;HTTP1.1引入了持久连接Connection&#xff1a;Keep-Alive&#xff0c;可以建立一次连接&#xff0c;进行多次请求响…...

Spring Boot学习:Flyway详解

Flyway Flyway 是一款开源的数据库版本管理工具&#xff0c;用于管理和自动化数据库结构的变更。它可以跟踪和管理数据库的版本控制&#xff0c;并在应用程序启动时自动执行升级或回滚操作。 使用Flyway&#xff0c;你可以将数据库的变更以可重复且可控的方式应用到不同环境中…...

Spark编程实验三:Spark SQL编程

目录 一、目的与要求 二、实验内容 三、实验步骤 1、Spark SQL基本操作 2、编程实现将RDD转换为DataFrame 3、编程实现利用DataFrame读写MySQL的数据 四、结果分析与实验体会 一、目的与要求 1、通过实验掌握Spark SQL的基本编程方法&#xff1b; 2、熟悉RDD到DataFram…...

文献研读|Prompt窃取与保护综述

本文介绍与「Prompt窃取与保护」相关的几篇工作。 目录 1. Prompt Stealing Attacks Against Text-to-Image Generation Models&#xff08;PromptStealer&#xff09;2. Hard Prompts Made Easy: Gradient-Based Discrete Optimization for Prompt Tuning and Discovery&#…...

cfa一级考生复习经验分享系列(十四)

首先说一下自己的背景&#xff0c;一个和金融没有半毛钱关系的数据分析师&#xff0c;之前考出了FRM。这次用一个半月突击12月的1级考试拿到了9A1B的成绩&#xff0c;纯属运气。以下纯属经&#xff08;chě&#xff09;验&#xff08;dn&#xff09;&#xff0c;请看看就好&…...

vue本地缓存搜索记录(最多4条)

核心代码 //保存到搜索历史&#xff0c;最多存四个 item.name和item.code格式为&#xff1a;塞力斯000001var history uni.getStorageSync(history) || [];console.log("history", history)var index history.findIndex((items) > {return item.name items.nam…...

Linux创建Macvlan网络

最近在看Docker的网络&#xff0c;测试Macvlan部分时&#xff0c;发现Docker创建Macvlan与预期测试结果不一样。所以查阅了Linux下配置Macvlan&#xff0c;记录如下。 参考 1.Linux Macvlan 2.图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN 3.创建ma…...

从企业级负载均衡到云原生,深入解读F5

上世纪九十年代&#xff0c;Internet快速发展催生了大量在线网站&#xff0c;Web访问量迅速提升。在互联网泡沫破灭前&#xff0c;这个领域基本是围绕如何对Web网站进行负载均衡与优化。从1997年F5发布了BIG-IP&#xff0c;到快速地形成完整ADC产品线&#xff0c;企业级负载均衡…...

什么是redis雪崩

Redis雪崩是指在使用Redis作为缓存数据库时&#xff0c;由于某种原因导致Redis服务器不可用或性能严重下降&#xff0c;从而导致大量的请求集中到数据库服务器上&#xff0c;甚至直接导致数据库服务器崩溃。 当Redis服务器出现雪崩时&#xff0c;原本应该被缓存的数据无法从缓…...

[足式机器人]Part2 Dr. CAN学习笔记-Ch00 - 数学知识基础

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-Ch00 - 数学知识基础 1. Ch0-1矩阵的导数运算1.1标量向量方程对向量求导&#xff0c;分母布局&#xff0c;分子布局1.1.1 标量方程对向量的导数1.1.2 向量方程对向量的导数 1.2 案例分析&#xf…...

Jmeter、postman、python 三大主流技术如何操作数据库?

只要是做测试工作的&#xff0c;必然会接触到数据库 1、前言 只要是做测试工作的&#xff0c;必然会接触到数据库&#xff0c;数据库在工作中的主要应用场景包括但不限于以下&#xff1a; 功能测试中&#xff0c;涉及数据展示功能&#xff0c;需查库校验数据正确及完整性&…...

IRIS、Cache系统类汉化

文章目录 系统类汉化简介标签说明汉化系统包说明效果展示类分类%Library包下的类重点类非重点类弃用类数据类型类工具类 使用说明 系统类汉化 简介 帮助小伙伴更加容易理解后台系统程序方法使用&#xff0c;降低代码的难度。符合本土化中文环境的开发和维护&#xff0c;有助于…...

【三维生成】稀疏重建、Image-to-3D方法(汇总)

系列文章目录 总结一下近5年的三维生成算法&#xff0c;持续更新 文章目录 系列文章目录一、LRM&#xff1a;单图像的大模型重建&#xff08;2023&#xff09;摘要1.前言2.Method3.实验 二、SSDNeRF&#xff1a;单阶段Diffusion NeRF的三维生成和重建&#xff08;ICCV 2023&am…...

Java基础知识:单元测试和调试技巧

在Java编程中&#xff0c;单元测试和调试是提高代码质量和开发效率的重要环节。通过单元测试&#xff0c;我们可以验证代码的正确性&#xff0c;而调试则帮助我们找出并修复代码中的错误。本文将介绍Java中的单元测试和调试技巧&#xff0c;并提供相关示例代码&#xff0c;帮助…...

[c]扫雷

题目描述 扫雷游戏是一款十分经典的单机小游戏。在n行m列的雷区中有一些格子含有地雷&#xff08;称之为地雷格&#xff09;&#xff0c;其他格子不含地雷&#xff08;称之为非地雷格&#xff09;。 玩家翻开一个非地雷格时&#xff0c;该格将会出现一个数字——提示周围格子中…...

数据结构-十大排序算法

数据结构十大排序算法 十大排序算法分别是直接插入排序、折半插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序、外部排序。 其中插入排序包括直接插入排序、折半插入排序、希尔排序&#xff1b;交换排序包括冒泡排序、快速排序&#xff1…...

从BMP文件头到像素遍历:手把手教你用C语言和VS2022读取图片的RGB数据

从BMP文件头到像素遍历&#xff1a;手把手教你用C语言和VS2022读取图片的RGB数据 在数字图像处理领域&#xff0c;理解图像数据的底层存储结构是开发者必须掌握的核心技能。BMP作为Windows系统中最基础的位图格式&#xff0c;其简单的文件结构使其成为学习图像处理的理想起点。…...

硬件工程师效率翻倍:我是如何让Cadence OrCAD导出的PDF自动生成清晰书签目录的

硬件工程师效率革命&#xff1a;用OrCAD打造智能PDF文档工作流 在硬件设计领域&#xff0c;一份结构清晰的原理图PDF文档往往能大幅提升团队协作效率。想象一下这样的场景&#xff1a;当你将精心设计的电路方案交付给客户或跨部门同事时&#xff0c;对方打开的是一个带有智能书…...

你的Nmap脚本库该更新了!手把手教你管理、调试与编写自定义NSE脚本

从使用者到创造者&#xff1a;Nmap脚本引擎(NSE)深度管理指南 在渗透测试和安全评估领域&#xff0c;Nmap早已超越了简单的端口扫描工具定位&#xff0c;其强大的脚本引擎(NSE)使其成为网络安全专业人员的瑞士军刀。但大多数用户仅停留在基础脚本调用层面&#xff0c;未能充分释…...

Python之rf-phate包语法、参数和实际应用案例

一、RF‑PHATE 包核心功能 RF‑PHATE 是一个有监督降维与可视化包&#xff0c;核心是把随机森林&#xff08;RF&#xff09;特征重要性与 PHATE&#xff08;基于热扩散的流形嵌入&#xff09; 结合&#xff0c;生成标签导向的低维嵌入&#xff0c;凸显与响应变量相关的结构、抑…...

STM32F407用HAL库驱动42步进电机,从CubeMX配置到代码调试的完整避坑指南

STM32F407 HAL库驱动42步进电机实战&#xff1a;从CubeMX配置到高效调试的完整指南 第一次用STM32F407的HAL库驱动42步进电机时&#xff0c;我花了整整三天时间才让电机转起来。最让我抓狂的是明明CubeMX配置看起来一切正常&#xff0c;TIM1通道就是死活不出PWM波形。后来才发现…...

3分钟掌握智慧职教刷课脚本:全平台自动学习解决方案

3分钟掌握智慧职教刷课脚本&#xff1a;全平台自动学习解决方案 【免费下载链接】auto-play-course 简单好用的刷课脚本[支持平台:职教云,智慧职教,资源库] 项目地址: https://gitcode.com/gh_mirrors/hc/auto-play-course 还在为重复的网课学习任务烦恼吗&#xff1f;智…...

【RT-DETR实战】060、解码器(Decoder)的简化与加速:从一次深夜调试说起

昨晚实验室的服务器又跑满了,监控告警提示显存溢出。跑到机房一看,又是RT-DETR在推理时卡在了解码器阶段。盯着屏幕上缓慢增长的处理进度条,我突然意识到——这个解码器,该动刀了。 问题出在哪 RT-DETR原本的解码器设计得很“学院派”,六层Transformer解码层堆叠,每层都…...

RK3568与RK3399深度对比:从架构到实战,边缘计算如何选型?

1. 项目概述&#xff1a;为什么我们需要重新审视RK3568与RK3399&#xff1f;最近在给一个边缘计算项目做硬件选型&#xff0c;客户的需求很明确&#xff1a;需要一块性能足够、接口丰富、功耗可控且长期供货稳定的核心板。在国产处理器的候选名单里&#xff0c;瑞芯微的RK3399和…...

3步解锁Godot游戏黑盒:PCK资源解包实战指南

3步解锁Godot游戏黑盒&#xff1a;PCK资源解包实战指南 【免费下载链接】godot-unpacker godot .pck unpacker 项目地址: https://gitcode.com/gh_mirrors/go/godot-unpacker 还在为Godot游戏的神秘资源包而困惑吗&#xff1f;面对那些看似不可访问的.pck文件&#xff0…...

AI Scientist-v2论文撰写流程:从实验结果到ICLR格式论文的自动化转换

AI Scientist-v2论文撰写流程&#xff1a;从实验结果到ICLR格式论文的自动化转换 【免费下载链接】AI-Scientist-v2 The AI Scientist-v2: Workshop-Level Automated Scientific Discovery via Agentic Tree Search 项目地址: https://gitcode.com/GitHub_Trending/ai/AI-Sci…...