本文主要是介绍C# 调用 winmm.dll 播放 midi 文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在C#中调用 winmm.dll(Windows Multimedia Library)来播放 MIDI 文件通常涉及使用mciSendString 函数,该函数是 winmm.dll 中提供的一个函数,用于发送 MCI(Media Control Interface)命令给MCI设备。
但是,需要注意的是,直接通过 mciSendString 播放 MIDI 文件可能需要一些特定的设置和配置,因为MIDI通常是通过MIDI输出设备(如声卡上的MIDI端口或MIDI合成器)来播放的,而不是通过默认的音频输出设备。
以下是一个简单的示例 play_mid.cs,说明如何在C#中使用 P/Invoke 调用 mciSendString 函数来尝试播放 MIDI 文件:
using System;
using System.Text;
using System.Runtime.InteropServices; class MidiPlayer
{ // 导入 mciSendString 函数 [DllImport("winmm.dll")] private static extern int mciSendString(string command, StringBuilder buffer, int bufferSize, IntPtr hwndCallback); // 播放MIDI文件的函数 public static void PlayMidi(string midiFileName) { const int bufferSize = 128; StringBuilder returnBuffer = new StringBuilder(bufferSize); // 构建MCI命令来打开并播放MIDI文件 string command = "open \"" + midiFileName + "\" type sequencer alias myMid"; if (mciSendString(command, returnBuffer, bufferSize, IntPtr.Zero) != 0) { Console.WriteLine("Error open MIDI file: " + returnBuffer.ToString()); return; } // 构建MCI命令来播放MIDI文件 command = "play myMid"; if (mciSendString(command, returnBuffer, bufferSize, IntPtr.Zero) != 0) { Console.WriteLine("Error play MIDI file: " + returnBuffer.ToString()); return; } // 如果你想要等待MIDI播放完成,你可能需要轮询状态或使用其他同步机制 } static void Main(string[] args) { if (args.Length <1){Console.WriteLine(" usage: play_mid.exe file1.mid ");return;} string midiFilePath = args[0];Console.WriteLine("play: " + midiFilePath);PlayMidi(midiFilePath); Console.ReadLine();}
}
where csc
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe
编译 csc play_mid.cs
运行 play_mid.exe test1.mid
C# 直接调用 OpenFileDialog,打开文件夹,选择*.mid文件,并播放。
编写 open_mid.cs 如下
// open a midi file
using System;
using System.Diagnostics;
using System.Windows.Forms;public class OpenMidFile
{[STAThread]public static void Main(){OpenFileDialog ofd = new OpenFileDialog();// 设置对话框属性ofd.Title = "请选择.mid文件";// 设置初始目录ofd.InitialDirectory = "D:\\Music";// 设置文件过滤器ofd.Filter = "mid files (*.mid)|*.mid";ofd.FilterIndex = 1; // 设置默认的文件过滤器索引ofd.RestoreDirectory = true; // 设置在关闭对话框前还原目录if (ofd.ShowDialog() == DialogResult.OK) // 显示对话框{// 获取选中的文件路径string filePath = ofd.FileName;//Console.WriteLine("playing: " +filePath);ProcessStartInfo startInfo = new ProcessStartInfo("play_mid.exe");startInfo.Arguments = " " +filePath;startInfo.UseShellExecute = false;Process process = Process.Start(startInfo);process.WaitForExit();} else {Console.WriteLine("Select null");}}
}
编译 csc /r:System.Windows.Forms.dll /target:winexe open_mid.cs
运行 open_mid.exe
这篇关于C# 调用 winmm.dll 播放 midi 文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!