C#使用SoundPlayer类同步与异步播放WAV文件
在.NET开发中,播放本地WAV音频通常使用 System.Media.SoundPlayer。为了规范操作并避免重复代码,可以通过封装一个静态工具类来实现同步播放、异步加载播放以及停止播放功能。
核心逻辑与准备
操作WAV音频文件主要依赖 System.Media 命名空间下的 SoundPlayer 类。该类提供了 LoadAsync()(异步加载)、PlaySync()(同步播放)和 Play()(异步播放)等方法。在使用前,请确保引用了正确的 DLL 库。
实现步骤
第1步:创建多媒体处理公共类
目的:构建一个可复用的 MediaHandler 类,内部包含对 SoundPlayer 的封装方法,支持传入文件路径或现有的 SoundPlayer 实例。
关键代码说明:
syncPlayWAV:用于阻塞当前线程直到播放完成,适用于需要等待音效结束的场合。aSyncPlayWAV:立即返回主线程控制权,适合背景音乐或非强制同步的音效。stopWAV:安全停止正在进行的音频播放。
using System;
using System.Media;
namespace DotNet.Utilities
{
/// <summary>
/// 处理多媒体的公共类
/// </summary>
public class MediaHandler
{
#region 同步播放wav文件
/// <summary>
/// 以同步方式播放wav文件 (重载:传入实例)
/// </summary>
public static void SyncPlayWAV(SoundPlayer sp, string wavFilePath)
{
try
{
//设置wav文件的路径
sp.SoundLocation = wavFilePath;
//使用异步方式加载wav文件到内存
sp.LoadAsync();
//检查是否加载完成
if (sp.IsLoadCompleted)
{
//使用同步方式播放
sp.PlaySync();
}
}
catch (Exception ex)
{
throw new Exception("同步播放失败: " + ex.Message);
}
}
/// <summary>
/// 以同步方式播放wav文件 (重载:直接传入路径)
/// </summary>
public static void SyncPlayWAV(string wavFilePath)
{
try
{
//创建一个SoundPlayer对象,并设置wav文件的路径
SoundPlayer sp = new SoundPlayer(wavFilePath);
//使用异步方式加载wav文件
sp.LoadAsync();
//确认加载成功后再播放
if (sp.IsLoadCompleted)
{
sp.PlaySync();
}
}
catch (Exception ex)
{
throw new Exception("同步播放初始化失败: " + ex.Message);
}
}
#endregion
#region 异步播放wav文件
/// <summary>
/// 以异步方式播放wav文件 (重载:传入实例)
/// </summary>
public static void ASyncPlayWAV(SoundPlayer sp, string wavFilePath)
{
try
{
sp.SoundLocation = wavFilePath;
sp.LoadAsync();
if (sp.IsLoadCompleted)
{
//异步播放,不阻塞当前线程
sp.Play();
}
}
catch (Exception ex)
{
throw new Exception("异步播放失败: " + ex.Message);
}
}
/// <summary>
/// 以异步方式播放wav文件 (重载:直接传入路径)
/// </summary>
public static void ASyncPlayWAV(string wavFilePath)
{
try
{
SoundPlayer sp = new SoundPlayer(wavFilePath);
sp.LoadAsync();
if (sp.IsLoadCompleted)
{
sp.Play();
}
}
catch (Exception ex)
{
throw new Exception("异步播放初始化失败: " + ex.Message);
}
}
#endregion
#region 停止播放wav文件
/// <summary>
/// 停止当前的音频播放
/// </summary>
public static void StopWAV(SoundPlayer sp)
{
if (sp != null)
{
sp.Stop();
}
}
#endregion
}
}
使用注意事项
- 加载状态判断:
SoundPlayer是异步设计的,必须调用LoadAsync()并通过IsLoadCompleted判断加载完成后,再进行播放,否则可能因文件未就绪而无声或报错。 - 异常处理:在实际项目中建议捕获具体异常,上述代码简化了错误信息传递。
- 资源释放:
SoundPlayer实现了IDisposable接口,建议在不再需要时将其置于using语句块中,以便及时释放非托管音频资源。
以上就是 C# 使用 SoundPlayer 类实现 WAV 文件同步与异步播放的详细内容,更多关于 C# 音频处理的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









