VB.NET如何同时播放多个音频?多种尝试方案无效求解决方法
各方案问题排查与可行实现方案
1. mciSendString方案错误原因
- 你复用了同一个别名
myWAV,每次播放前执行close操作会销毁前一个音频实例,多音频同时播放需要为每个音频分配独立的别名。 - 播放wav格式时
type mpegvideo参数适配性差,建议改为type waveaudio,也可以捕获mciSendString的返回值判断执行状态,返回0为执行成功,非0可对应查询MCI错误码定位问题。
修正后可运行的示例代码:
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _ (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _ ByVal uReturnLength As Integer, ByVal hwndCallback As Integer) As Integer ' 播放第一个音频 Dim fileName1 As String = IO.Path.Combine(Application.StartupPath, "Sound\Sound file1.wav") mciSendString($"open ""{fileName1}"" type waveaudio alias myWAV1", Nothing, 0, 0) mciSendString("play myWAV1", Nothing, 0, 0) ' 播放第二个音频 Dim fileName2 As String = IO.Path.Combine(Application.StartupPath, "Sound\Sound file2.wav") mciSendString($"open ""{fileName2}"" type waveaudio alias myWAV2", Nothing, 0, 0) mciSendString("play myWAV2", Nothing, 0, 0)
使用完成后调用mciSendString("close myWAV1", Nothing, 0, 0)对应释放每个别名的资源即可。
2. SoundPlayer/My.Computer.Audio方案错误原因
System.Media.SoundPlayer、My.Computer.Audio底层均为单实例播放逻辑,同一时间仅支持播放一个音频,新的Play调用会自动终止上一个正在播放的音频,属于类的原生限制,无法通过修改代码实现多音频同时播放。
3. DirectX方案错误原因
旧版Microsoft.DirectX.DirectSound托管包已停止维护,仅兼容低版本.NET Framework,高版本运行时不支持,且该方案对于仅播放2-3个音频的场景冗余度过高。
4. NAudio方案错误原因
你仅转换了LoopStream工具类代码,未完成前置配置:
- 首先需要通过NuGet包管理器安装NAudio库,否则WaveStream等基础类型会报找不到的错误
- 无需使用LoopStream也可实现基础多音频播放,极简实现代码如下:
Imports NAudio.Wave ' 初始化两个音频读取器 Dim reader1 As New AudioFileReader("音频1路径") Dim reader2 As New AudioFileReader("音频2路径") ' 创建混音器 Dim mixer As New MixingSampleProvider({reader1.ToSampleProvider(), reader2.ToSampleProvider()}) ' 初始化播放设备并播放 Dim outputDevice As New WaveOutEvent() outputDevice.Init(mixer) outputDevice.Play()
5. MediaElement方案错误原因
System.Windows.Controls.MediaElement是WPF框架专属控件,WinForm项目默认未引用WPF相关程序集因此找不到该类。如果是WinForm项目,可添加多个AxWindowsMediaPlayerCOM控件实例,分别绑定不同音频地址播放,也可实现同时播放效果。
最优方案选择
- 如果不想引入第三方依赖,直接使用修正后的mciSendString方案即可,原生系统API稳定可靠,足够满足2-3个音频同时播放的需求。
- 如果需要支持更多音频格式、更灵活的混音控制,使用NAudio方案,引入成本低,代码量小,性能开销也很低。
内容的提问来源于stack exchange,提问作者user15904414
相关产品推荐
相关产品推荐

