C#調用Windows Api播放midi音頻


導入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());


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM