zoukankan      html  css  js  c++  java
  • 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 GetMusicLength
    49 {
    50 get
    51 {
    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 hwndCallback
    69 );
    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、内存中文本最大长度。

     

  • 相关阅读:
    PC上图标显示异常 白色框框处理方案
    判断Javascript变量是否为空 undefined 或者null(附样例)
    MySQL双版本共存解决方案
    跨境电商进口业务的通关模式
    史上最完整跨境电商投资分析报告!
    Fastcgi_Finish_Request 提高页面响应速度
    浏览器工作原理
    thinkphp 命名规范
    git diff ^M的消除
    git简明教程
  • 原文地址:https://www.cnblogs.com/studyplay/p/2281783.html
Copyright © 2011-2022 走看看