You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 18:15:06