为什么要有该类的存在呢?音乐的好处很多,不在一一赘述。我只说一点,在阅读的时候如果有轻音乐相伴,有时候会事半功倍,提高工作效率,愉悦心情。所以编写此类。这只是一个辅助作用。该类的全部代码如下所示。

 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)相关推荐

  1. c#小软件(SaveClassic)开发手记--(1)前言

    做了这么久程序员,一直是被动开发(纯属于体力劳动者,完成软件设计人员设计的软件).雁过留声人过留名,总想自己开发点东西留给自己.也许过几年回头看看,不至于遗憾,至少我还有点东西是自己.所以我现在就动手 ...

  2. [转载]小软件项目开发的管理(好长)

    小软件项目开发的管理 创建成功的工程 成功项目管理的秘密 更好地领导一个项目的诀窍 参与变革,走向成功 CMM/TSP/PSP讲义稿 开发流程中的可用性 软件开发的管理和控制 如何组织软件开发团队 软 ...

  3. 利用DirectShow开发C#版的MP3播放器(一)

    因工作需要,近期开始接触DirectShow开发的相关技术,由于本人较青睐于C#,因此从网上找了一些关于.NET版的DirectShow库及实例,之后参考相关源码编写了一个用于测试的MP3播放器,源码 ...

  4. 利用DirectShow开发C#版的MP3播放器(二)

    继上一次利用DirectShow编写了一个C#版的简单MP3播放器之后,这两天利用空余时间对其作了初步的完善,主要工作如下:     1.对原有的代码进行拆分,主要拆分成五个类,包括一个Form类Fr ...

  5. 小D学blend-----优美简洁的mp3播放器

    运行环境:blend 4.0或者visual studio 2010(silverlgiht开发环境需要安装好) 本例实现了mp3的一些基本功能:如播放.暂停.停止.循环播放.静音.调节音量等! 下面 ...

  6. linux ipod驱动程序,佳能 iPod Classic 驱动程序下载-更新佳能软件(MP3播放器)

    Apple iPod Classic 驱动程序下载 如何手动下载和更新: iPod Classic 设备的默认驱动程序版本可以通过 %%os%% 或 Windows® 更新获取. 内置驱动程序支持Cl ...

  7. 微信小程序开发手记1.0

    腾讯小程序还是很屌的,最近一波小游戏把小程序推到了风口,我司也抓住机会想来试一试水.于是我开发了一个红包小程序,从学习架构语法接口到最后完成第一版,用时一个月.遇到了无数的坎坷,无数摇头叹气想骂人.所 ...

  8. 软件项目开发模式_小晓_同学__新浪博客

    螺旋开发模式:部分模块开发还可以再继续开发别的模块,适合于项目前期需求不确定的情况 对于每一个模块一个个开发:分析.设计.编码.测试.上线: 好处:有效的降低软件项目风险,(做出的产品要尽量满足客户需 ...

  9. C#/Csharp桌面应用开发小作业小程序,类似微信登录功能的小软件

    (七) 微信APP是一款非常流行的及时通讯类应用软件,请利用所学的桌面应用开发知识,仿照完成一个类似微信登录功能的小软件,功能要求如下所示,最终效果见Demo文件夹: 软件需求及编码提示:  该软件 ...

最新文章

  1. 目标立体检测 红外图像_一种有效的红外小目标检测方法
  2. 苹果笔记本怎么找文件夹_求解答mac怎么找文件路径
  3. 中科微研携手-农业大健康·李喜贵:从玉农业谋定功能性农业
  4. 机器学习中的参数调整
  5. 做机器人,必过的一道坎!
  6. 为什么别人年底购物,同学们年底考证?
  7. PCL——连接两个点云的字段
  8. Android攻城狮——五布局
  9. 刚刚用鸿蒙跑了个“hello world”!跑通后,我特么开始怀疑人生....
  10. C# 打开指定的目录 记住路径中 / 与 \ 的使用方法
  11. linux 内核移植(七)――rest_init函数分析
  12. python word2vec使用_使用Python可视化Word2vec的结果
  13. BLDC无刷直流电机的原理及驱动基础
  14. matlab共轭梯度法解线性方程组,计算方法——共轭梯度法求解线性方程组.pdf
  15. 第四章 Sysrepo连接与会话
  16. RFID资产管理|超高频RFID技术在医院资产管理项目中的应用-铨顺宏
  17. android vrs技术,步步高 vivo V1/Y1 智能手机音质测评报告 VRS[vivo signal
  18. elasticsearch7.1的一些自问自答
  19. java 获取回车字符_java回车键的字符
  20. 全球及中国盐酸氟西汀行业行业需求态势与投资战略规划研究报告2022-2028年

热门文章

  1. php人员权限管理(RBAC)
  2. ubuntu 下 Could not get lock /var/lib/dpkg/lock解决方案
  3. 基于 tcp协议完成的上传下载
  4. 屏蔽firefox浏览器连接失败页面的广告
  5. 创建包含CRUD操作的Web API接口-第一部
  6. Django项目之小博客
  7. C# 动态执行批处理命令
  8. delphi 插入表格HTML代码
  9. (转)Linux系统调用和库函数调用的区别
  10. RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决)