C#中MciSendString實現播放音樂(支持WAV/MP3等多格式音樂播放)與PlaySound不同
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
using System.Runtime.InteropServices;
public static uint SND_ASYNC = 0x0001; public static uint SND_FILENAME = 0x00020000; [DllImport("winmm.dll")] public static extern uint mciSendString(string lpstrCommand, string lpstrReturnString, uint uReturnLength, uint hWndCallback); public void Play(string music_path) { mciSendString(@"close temp_alias", null, 0, 0); mciSendString("open \"" + music_path + "\" alias temp_alias", null, 0, 0); //mciSendString("play temp_alias repeat", null, 0, 0); //重復播放 mciSendString("play temp_alias", null, 0, 0); //單次播放 } mciSendString的常用命令 要求在qt下用c++寫一個程序,要打開光驅,就插到了mciSendString函數。不過都是xp平臺下的,呵呵,不過不怕。在qt的代碼里引用windows.h就好了,然后記得用msiSendStringA或者msiSendStringW。 順便貼下msiSendString函數的用法,感覺還挺不錯的。另外越來越覺得qt的強大,開源的好處了,逐漸遠離vs2005拉。 mciSendString是用來播放多媒體文件的API指令,可以播放MPEG,AVI,WAV,MP3,等等,下面介紹一下它的使用方法: 該函數有四個參數: 第一個參數:要發送的命令字符串。字符串結構是:[命令][設備別名][命令參數]. 第二個參數:返回信息的緩沖區,為一指定了大小的字符串變量. 第三個參數:緩沖區的大小,就是字符變量的長度. 第四個參數:回調方式,一般設為零 返回值:函數執行成功返回零,否則返回錯誤代碼 一、常用命令 1.打開: Dim mName as string mName = "f:""mpeg""mpeg1.avi" mciSendString "open mName type MPEGVideo Alias movie parent %u Style %u notify",0&, 0, 0 其中: open 操作命令 mName 全路徑文件名 type MPEGVideo 是指打開MPEG,AVI等類型,如果不加這一句,就是打開WAV,MP3等 Alias movie 定義了該操作的別名為movie,后續操作只要指明別名即可 parent %u 源 Style %u 風格、樣式 notify 通知 2.播放: mciSendString "play movie", 0&, 0, 0 mciSendString "play movie fullscreen", 0&, 0, 0 ’全屏播放 3.暫停: mciSendString "pause movie", 0&, 0, 0 4.繼續: mciSendString "resume movie", 0&, 0, 0 5.停止: mciSendString "stop movie", 0&, 0, 0 6.關閉: mciSendString "close movie", 0&, 0, 0 7.前進到下一個位置: mciSendString "step movie", 0&, 0, 0 8.后退到上一個位置: mciSendString "step movie reverse", 0&, 0, 0 9.前進或后退 N 個位置(其中 N<0 即表示后退) mciSendString "step movie by " & str(N), 0&, 0, 0 10.獲取當前播放位置: Dim ST As String*64 mciSendString "status movie position", st, len(st), 0 11. 獲取媒體的總長度: mciSendString "status movie length", st, len(st), 0 l=val(st) ’L就是所播放文件的長度 12.獲取播放信息: Dim ST As String*64 mciSendString "status movie mode", ST, Len(ST), 0 If Left(ST, 7) = "stopped" Then (處理代碼) ’播放完畢 13.循環播放: mciSendString "play movie repeat", 0&, 0, 0 二、控制聲音大小: Dim V As Long mciSendString "status movie volume", V, 0, 0 ’V是獲取的音量大小值。 V = 50 mciSendString "setaudio movie volume to " & V, &0, 0, 0 ’V是設置的音量值 mcisendstring("set all audio left on",nil,0,handle); //左 mcisendstring("set all audio all off",nil,0,handle); //關閉 mcisendstring("set all audio right on",nil,0,handle); // 右 mcisendstring("set all audio all on",nil,0,handle); //立體 三、控制亮度(如果是播放視頻) Dim B As Long mciSendString "status movie brightness", B, 0, 0 ’B是獲取的亮度值。 B = 50 mciSendString "setvideo movie brightness to " & B, &0, 0, 0 ’B是設置的亮度值 四、到指定的位置播放。 Dim P1 as Long, P2 as Long P1 = 100: P2 = 3000 mciSendString "seek movie to ", P1, 0, 0 ’P1是當前起始位置,單位:毫秒 mciSendString "seek movie to start", 0&, 0, 0 ’定位到開頭位置 mciSendString "play movie", 0&, 0, 0 ’定位后再播放 或者: mciSendString "play movie FROM P1 to P2″,0&, 0, 0 ’P1是起始位置,P2是停止位置。單位:毫秒 mciSendString "seek movie to end", 0&, 0, 0 ’定位到最后位置 五、在指定控件上播放視頻: mciSendString "open AVI 文件名 parent hWnd style child", 0&, 0, 0 其中,hWnd 是控件的句柄 執行上述命令之后,影片會被放置在控件的左上角,且影片的大小不受控件大小的影響,如果想要改變 影片播放的位置及大小,可以在執行 play 指令前先執行 put 指令,格式如下: mciendString "put AVI 文件名 window at X Y [Width Height]“, 0&, 0, 0 其中 X 及 Y 參數須填入位置,而 Width 及 Height 參數則填入影片顯示出來的寬度及高度 六、錄音設置: 錄音前,用以下語句初始化 1.設為8位: mciSendString "set wave bitpersample 8″, "", 0, 0 2.設為11025Hz mciSendString "set wave samplespersec 11025″, "", 0, 0 3.設為立體聲: mciSendString "set wave channels 2″, "", 0, 0 4.實現PCM格式(不一定正確): MCISENDSTRING "set wave format tag pcm","", 0, 0 5.開始錄音: mciSendString "close movie",0&,0,0 mciSendString "open new type WAVEAudio alias movie",0&,0,0 mciSendString "record movie",0&,0,0 6.保存錄音到c:"123.wav mciSendString "stop movie",0&,0,0 mciSendString "save movie C:""123.wav",0&,0,0 mciSendString "close movie",0&,0,0 七、開關光驅: mciSendString "set cdaudio door open", "", 0, 0 ’打開 該文章在 2021/2/19 17:51:50 編輯過 |
關鍵字查詢
相關文章
正在查詢... |