科技
C# 使用mciSendString播放声音
摘要
mciSendString 播放MP3
MCI(Media Control Interface,媒体控制接口)函数中,有些只适用于一种接口方式,有些则两种接口都可以用。mciSendString只适用于命令串接口方式(命令串中不区分大小写)。
正文
声明
[DllImport("winmm.dll")]
private static extern uint mciSendString(string command,StringBuilder returnValue,int returnLength,IntPtr winHandle);
基本功能实现
注意temp_alias 这个是对应别名
/// <summary>
/// 播放
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnPlay_Click(object sender, EventArgs e)
{
StringBuilder path = new StringBuilder();
path.Append(@"D:\MyProject\白泽\Bz.Platform\wavplay\a.mp3");
mciSendString(@"close temp_alias", null, 0, IntPtr.Zero);
mciSendString(@"open """ + path + @""" alias temp_alias", null, 0, IntPtr.Zero);
mciSendString("play temp_alias repeat", null, 0, IntPtr.Zero);
}
/// <summary>
/// 停止
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnStop_Click(object sender, EventArgs e)
{
mciSendString("stop temp_alias", new StringBuilder(), 0, IntPtr.Zero);
}
/// <summary>
/// 暂停
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnPause_Click(object sender, EventArgs e)
{
mciSendString("pause temp_alias", new StringBuilder(), 0, IntPtr.Zero);
}
/// <summary>
/// 继续
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnResume_Click(object sender, EventArgs e)
{
mciSendString("resume temp_alias", new StringBuilder(), 0, IntPtr.Zero);
}
/// <summary>
/// 取得音频长度
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnLength_Click(object sender, EventArgs e)
{
StringBuilder lengthBuf = new StringBuilder(32);
mciSendString("status temp_alias length", lengthBuf, lengthBuf.Capacity, IntPtr.Zero);
long len = long.Parse(lengthBuf.ToString());
MessageBox.Show((len / 1000.0f/60.0f).ToString());
}
//调整声音1-1000
private void tbVoice_Scroll(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder(32);
sb.Append(tbVoice.Value.ToString());
mciSendString("setaudio temp_alias volume to "+ tbVoice.Value.ToString(), sb, sb.Capacity, IntPtr.Zero);
}
/// <summary>
/// 取得当前位置
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnCurrent_Click(object sender, EventArgs e)
{
StringBuilder lengthBuf = new StringBuilder(32);
mciSendString("status temp_alias position", lengthBuf, lengthBuf.Capacity, IntPtr.Zero);
long len = long.Parse(lengthBuf.ToString());
MessageBox.Show((len / 1000.0f / 60.0f).ToString());
}
总结
在本文中,我们介绍了如何在 C# 中使用 mciSendString
函数播放声音。我们声明了 mciSendString
函数,并演示了一些常用的属性和方法,包括播放声音、暂停和继续播放、停止播放以及获取声音状态。