c#小软件(SaveClassic)开发手记--(3)基础类(MP3播放类MP3Player)
为什么要有该类的存在呢?音乐的好处很多,不在一一赘述。我只说一点,在阅读的时候如果有轻音乐相伴,有时候会事半功倍,提高工作效率,愉悦心情。所以编写此类。这只是一个辅助作用。该类的全部代码如下所示。
1 using System.Runtime.InteropServices; 2 using System; 3 namespace Common 4 { 5 public class MP3Player 6 { 7 /// <summary> 8 /// 文件地址 9 /// </summary>10 public string FilePath;11 /// <summary> 12 /// 播放音乐 13 /// </summary>14 public void Play()15 {16 string tmepstr="";17 tmepstr = tmepstr.PadLeft(128, Convert.ToChar(" "));18 mciSendString("close all", "", 0, 0);19 mciSendString("open " + FilePath + " alias media", tmepstr, tmepstr.Length, 0); mciSendString("play media", "", 0, 0); 20 }21 22 /// <summary> 23 /// 暂停 24 /// </summary>25 public void Pause()26 {27 mciSendString("pause media", "", 0, 0);28 }29 30 /// <summary> 31 /// 停止 32 /// </summary>33 public void Stop()34 {35 mciSendString("close media", "", 0, 0);36 }37 /// <summary> 38 /// 继续播放 39 /// </summary>40 public void Resume()41 {42 string TemStr = "";43 TemStr = TemStr.PadLeft(128, Convert.ToChar(" "));44 mciSendString("resume media", TemStr, TemStr.Length, 0);45 }46 47 //获取音乐长度48 public int GetMusicLength49 {50 get51 {52 string durLength = "";53 durLength = durLength.PadLeft(128, Convert.ToChar(" "));54 mciSendString("status media length", durLength, durLength.Length, 0);55 durLength = durLength.Trim();56 if (durLength == "" || durLength == "\0") return 0;57 return (int)(Convert.ToDouble(durLength));58 }59 }60 /// <summary> 61 /// API函数 62 /// </summary>63 [DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]64 private static extern int mciSendString(65 string lpstrCommand,66 string lpstrReturnString,67 int uReturnLength,68 int hwndCallback69 );70 }71 }
该类主要利用WINMM.dll实现播放MP3。方法也十分简单,不在详细赘述,我只说明一点,也是我在开发 当中遇到的棘手的问题。就是在同一个文件夹下面有的MP3能播放,有的不能放。开始我以为是MP3中文路径的问题,但是我测试过多次,把文件全部都改成英文,问题依旧。通过搜索引擎不停的搜索答案,问题始终没有解决,曾经想放弃使用winmm.dll,使用别的方法来实现MP3。但是功夫不负有心人,最后还是在朋友的帮助下,找到了问题的原因,并解决了此问题。原来这个问题的原因主要还是文件路径的问题,但不是中文的问题,而是winmm.dll播放在window下播放MP3短路径没有任何问题,如果是长路径必须把长路径转化成DOS下的短路径表示方法才能正常播放。该方法的具体代码如下所示。
[DllImport("kernel32.dll ", CharSet = CharSet.Auto)]public static extern int GetShortPathName([MarshalAs(UnmanagedType.LPTStr)] string path,[MarshalAs(UnmanagedType.LPTStr)] StringBuilder shortPath,int shortPathLength);StringBuilder shortMusicPath = new StringBuilder(80);int result = GetShortPathName(mymp3list[0], shortMusicPath, shortMusicPath.Capacity);string s = shortMusicPath.ToString();
GetShortPathName参数说明:1、MP3路径;2、返回的短路径;3、内存中文本最大长度。
转载于:https://www.cnblogs.com/studyplay/archive/2011/12/09/2281783.html
c#小软件(SaveClassic)开发手记--(3)基础类(MP3播放类MP3Player)相关推荐
- c#小软件(SaveClassic)开发手记--(1)前言
做了这么久程序员,一直是被动开发(纯属于体力劳动者,完成软件设计人员设计的软件).雁过留声人过留名,总想自己开发点东西留给自己.也许过几年回头看看,不至于遗憾,至少我还有点东西是自己.所以我现在就动手 ...
- [转载]小软件项目开发的管理(好长)
小软件项目开发的管理 创建成功的工程 成功项目管理的秘密 更好地领导一个项目的诀窍 参与变革,走向成功 CMM/TSP/PSP讲义稿 开发流程中的可用性 软件开发的管理和控制 如何组织软件开发团队 软 ...
- 利用DirectShow开发C#版的MP3播放器(一)
因工作需要,近期开始接触DirectShow开发的相关技术,由于本人较青睐于C#,因此从网上找了一些关于.NET版的DirectShow库及实例,之后参考相关源码编写了一个用于测试的MP3播放器,源码 ...
- 利用DirectShow开发C#版的MP3播放器(二)
继上一次利用DirectShow编写了一个C#版的简单MP3播放器之后,这两天利用空余时间对其作了初步的完善,主要工作如下: 1.对原有的代码进行拆分,主要拆分成五个类,包括一个Form类Fr ...
- 小D学blend-----优美简洁的mp3播放器
运行环境:blend 4.0或者visual studio 2010(silverlgiht开发环境需要安装好) 本例实现了mp3的一些基本功能:如播放.暂停.停止.循环播放.静音.调节音量等! 下面 ...
- linux ipod驱动程序,佳能 iPod Classic 驱动程序下载-更新佳能软件(MP3播放器)
Apple iPod Classic 驱动程序下载 如何手动下载和更新: iPod Classic 设备的默认驱动程序版本可以通过 %%os%% 或 Windows® 更新获取. 内置驱动程序支持Cl ...
- 微信小程序开发手记1.0
腾讯小程序还是很屌的,最近一波小游戏把小程序推到了风口,我司也抓住机会想来试一试水.于是我开发了一个红包小程序,从学习架构语法接口到最后完成第一版,用时一个月.遇到了无数的坎坷,无数摇头叹气想骂人.所 ...
- 软件项目开发模式_小晓_同学__新浪博客
螺旋开发模式:部分模块开发还可以再继续开发别的模块,适合于项目前期需求不确定的情况 对于每一个模块一个个开发:分析.设计.编码.测试.上线: 好处:有效的降低软件项目风险,(做出的产品要尽量满足客户需 ...
- C#/Csharp桌面应用开发小作业小程序,类似微信登录功能的小软件
(七) 微信APP是一款非常流行的及时通讯类应用软件,请利用所学的桌面应用开发知识,仿照完成一个类似微信登录功能的小软件,功能要求如下所示,最终效果见Demo文件夹: 软件需求及编码提示: 该软件 ...
最新文章
- 目标立体检测 红外图像_一种有效的红外小目标检测方法
- 苹果笔记本怎么找文件夹_求解答mac怎么找文件路径
- 中科微研携手-农业大健康·李喜贵:从玉农业谋定功能性农业
- 机器学习中的参数调整
- 做机器人,必过的一道坎!
- 为什么别人年底购物,同学们年底考证?
- PCL——连接两个点云的字段
- Android攻城狮——五布局
- 刚刚用鸿蒙跑了个“hello world”!跑通后,我特么开始怀疑人生....
- C# 打开指定的目录 记住路径中 / 与 \ 的使用方法
- linux 内核移植(七)――rest_init函数分析
- python word2vec使用_使用Python可视化Word2vec的结果
- BLDC无刷直流电机的原理及驱动基础
- matlab共轭梯度法解线性方程组,计算方法——共轭梯度法求解线性方程组.pdf
- 第四章 Sysrepo连接与会话
- RFID资产管理|超高频RFID技术在医院资产管理项目中的应用-铨顺宏
- android vrs技术,步步高 vivo V1/Y1 智能手机音质测评报告 VRS[vivo signal
- elasticsearch7.1的一些自问自答
- java 获取回车字符_java回车键的字符
- 全球及中国盐酸氟西汀行业行业需求态势与投资战略规划研究报告2022-2028年