匯入winmm.dll中的函式mciSendString
[DllImport("winmm.dll")]
static extern Int32 mciSendString(String command, StringBuilder buffer, Int32 bufferSize, IntPtr hwndCallback);需要注意的是,所有命令需要在同一個執行緒中,才可以對同一個midi實體進行控制,該函式通過字串向聲卡發送指令,常見的用于播放midi檔案的指令有以下:
1.打開檔案
mciSendString($"open {file} type {device} alias {alias}", null, 0, new IntPtr());
{file}: 檔案名,需要打開的midi檔案路徑;
{device}: 設備名稱,一般填寫”sequencer”,不過筆者發現填寫”mpegvideo”會顯著提高加載midi的速度;
{alias}: 別名,用于后續對該midi的控制,
2.播放檔案
mciSendString($"play {alias} [repeat]", null, 0, new IntPtr());
{alias}: 前文提到的別名;
[repeat]: 可選指令,可以回圈播放,
3.獲取檔案時長
mciSendString("set {alias} time format milliseconds", null, 0, new IntPtr());
mciSendString("status {alias} length", result, 100, new IntPtr());首先將時間格式設定為毫秒,然后將時間讀取到result變數中,
4.停止播放
mciSendString($"stop {alias}", null, 0, new IntPtr());
5.關閉檔案
mciSendString($"close {alias}", null, 0, new IntPtr());
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/111736.html
標籤:Windows
上一篇:ubuntu下搭建nfs服務器,mac和windows客戶端相互亂碼
下一篇:關于PCIE驅動移植的問題
