程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c#小軟件(SaveClassic)開發手記--(3)基礎類(MP3播放類MP3Player)

c#小軟件(SaveClassic)開發手記--(3)基礎類(MP3播放類MP3Player)

編輯:C#入門知識

 

  為什麼要有該類的存在呢?音樂的好處很多,不在一一贅述。我只說一點,在閱讀的時候如果有輕音樂相伴,有時候會事半功倍,提高工作效率,愉悅心情。所以編寫此類。這只是一個輔助作用。該類的全部代碼如下所示。

 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函數  www.2cto.com

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、內存中文本最大長度。

作者 zhaoyang

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved