C#中MciSendString實(shí)現(xiàn)播放音樂(支持WAV/MP3等多格式音樂播放)與PlaySound不同
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
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); //重復(fù)播放 mciSendString("play temp_alias", null, 0, 0); //單次播放 } mciSendString的常用命令 要求在qt下用c++寫一個(gè)程序,要打開光驅(qū),就插到了mciSendString函數(shù)。不過都是xp平臺(tái)下的,呵呵,不過不怕。在qt的代碼里引用windows.h就好了,然后記得用msiSendStringA或者msiSendStringW。 順便貼下msiSendString函數(shù)的用法,感覺還挺不錯(cuò)的。另外越來越覺得qt的強(qiáng)大,開源的好處了,逐漸遠(yuǎn)離vs2005拉。 mciSendString是用來播放多媒體文件的API指令,可以播放MPEG,AVI,WAV,MP3,等等,下面介紹一下它的使用方法: 該函數(shù)有四個(gè)參數(shù): 第一個(gè)參數(shù):要發(fā)送的命令字符串。字符串結(jié)構(gòu)是:[命令][設(shè)備別名][命令參數(shù)]. 第二個(gè)參數(shù):返回信息的緩沖區(qū),為一指定了大小的字符串變量. 第三個(gè)參數(shù):緩沖區(qū)的大小,就是字符變量的長(zhǎng)度. 第四個(gè)參數(shù):回調(diào)方式,一般設(shè)為零 返回值:函數(shù)執(zhí)行成功返回零,否則返回錯(cuò)誤代碼 一、常用命令 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,后續(xù)操作只要指明別名即可 parent %u 源 Style %u 風(fēng)格、樣式 notify 通知 2.播放: mciSendString "play movie", 0&, 0, 0 mciSendString "play movie fullscreen", 0&, 0, 0 ’全屏播放 3.暫停: mciSendString "pause movie", 0&, 0, 0 4.繼續(xù): mciSendString "resume movie", 0&, 0, 0 5.停止: mciSendString "stop movie", 0&, 0, 0 6.關(guān)閉: mciSendString "close movie", 0&, 0, 0 7.前進(jìn)到下一個(gè)位置: mciSendString "step movie", 0&, 0, 0 8.后退到上一個(gè)位置: mciSendString "step movie reverse", 0&, 0, 0 9.前進(jìn)或后退 N 個(gè)位置(其中 N<0 即表示后退) mciSendString "step movie by " & str(N), 0&, 0, 0 10.獲取當(dāng)前播放位置: Dim ST As String*64 mciSendString "status movie position", st, len(st), 0 11. 獲取媒體的總長(zhǎng)度: mciSendString "status movie length", st, len(st), 0 l=val(st) ’L就是所播放文件的長(zhǎng)度 12.獲取播放信息: Dim ST As String*64 mciSendString "status movie mode", ST, Len(ST), 0 If Left(ST, 7) = "stopped" Then (處理代碼) ’播放完畢 13.循環(huán)播放: 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是設(shè)置的音量值 mcisendstring("set all audio left on",nil,0,handle); //左 mcisendstring("set all audio all off",nil,0,handle); //關(guān)閉 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是設(shè)置的亮度值 四、到指定的位置播放。 Dim P1 as Long, P2 as Long P1 = 100: P2 = 3000 mciSendString "seek movie to ", P1, 0, 0 ’P1是當(dāng)前起始位置,單位:毫秒 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 是控件的句柄 執(zhí)行上述命令之后,影片會(huì)被放置在控件的左上角,且影片的大小不受控件大小的影響,如果想要改變 影片播放的位置及大小,可以在執(zhí)行 play 指令前先執(zhí)行 put 指令,格式如下: mciendString "put AVI 文件名 window at X Y [Width Height]“, 0&, 0, 0 其中 X 及 Y 參數(shù)須填入位置,而 Width 及 Height 參數(shù)則填入影片顯示出來的寬度及高度 六、錄音設(shè)置: 錄音前,用以下語(yǔ)句初始化 1.設(shè)為8位: mciSendString "set wave bitpersample 8″, "", 0, 0 2.設(shè)為11025Hz mciSendString "set wave samplespersec 11025″, "", 0, 0 3.設(shè)為立體聲: mciSendString "set wave channels 2″, "", 0, 0 4.實(shí)現(xiàn)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 七、開關(guān)光驅(qū): mciSendString "set cdaudio door open", "", 0, 0 ’打開 該文章在 2021/2/19 17:51:50 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |