VB.net 如何同时播放多个资源文件内的wav

我用My.Computer.Audio.Play(变量,AudioPlayMode.Background)只能播放一个声音,如果播放下一个声音,前一个马上就关闭了。我也试... 我用My.Computer.Audio.Play(变量, AudioPlayMode.Background)只能播放一个声音,如果播放下一个声音,前一个马上就关闭了。
我也试过开多线程了,依然不行。我新建第2个窗口再播放,也还是不行。
申明:我不是要本地文件调用播放2个声音,那个丢2个控件就行了简单得要死。我要的是资源文件调用播放,注意是资源文件里的调用播放。
我想要实现的功能就是先播放一个BGM,再根据情况播放播放别的音效。
最好直接发源码:talenttzsbu@163.com,我知道几句话是说不清楚的,跪求。
展开
 我来答
魔法软糖™
2016-12-07 · TA获得超过837个赞
知道小有建树答主
回答量:822
采纳率:94%
帮助的人:147万
展开全部

用API mciSendString可以同时播放多个声音,需要提供路径。

资源文件很麻烦,要用反射读取出来,再用IO写到磁盘路径。

你是做游戏把?软糖建议是不要使用资源文件,而使用本地文件。

用个BGM文件夹保存背景音乐,用SE文件夹保存音效(学习RPG Maker的做法)

API代码奉上,具体实现模块字数超过最大值,请下载附件

Imports System.Text
    ''' <summary>
    ''' 可播放MPEG,AVI,WAV,MP3,MID,WMA等格式的音频文件,*不支持OGG
    ''' </summary>
    Public Class 音频设备
    '声明API函数: mciSendString
    <System.Runtime.InteropServices.DllImport("winmm.dll", EntryPoint:="mciSendString")>
    Public Shared Function mciSendString(strCommand As String,
                                              strReturn As StringBuilder,
                                              iReturnLength As Integer,
                                              hwndCallback As Integer) As Integer
    End Function
    '声明API函数: mciGetErrorString
    <System.Runtime.InteropServices.DllImport("winmm.dll", EntryPoint:="mciSendString")>
        Public Shared Function mciGetErrorString(errCode As Integer,
                                                 errMsg As StringBuilder,
                                                 buflen As Integer) As Integer

调用方法

Public Class Form1
    Dim 音频设备 As New 音频设备
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim 路径 = "F:\音乐文件名.mp3"
        音频设备.打开("自定义名称1", 路径)
        音频设备.播放("自定义名称1")
        '音频设备.暂停("自定义名称1")
        '音频设备.继续("自定义名称1")
        '音频设备.关闭("自定义名称1")
    End Sub
End Class


如满意,请采纳,还有不懂的请追问,谢谢。

追问
我不是做游戏啊,就一个不到12M的小软件,只是有一个按钮想要插入音效而已。
真的没办法全用资源文件么?我使用您这个代码,配合我本来就有的单资源声音调用,果然实现了2个声音同步,而且我资源调用播放的BGM也没有因此被中断。而且顺道一提您这个代码真好用,N个声音一起播放都没问题...
不过使用您这个代码我遇到了一个问题,循环播放怎么开启?“音频设备.循环播放("sound")”我这样调用,结果无效...
追答
循环播放我试了半天,后缀repeat确实无效,我也是从网上查来的API用法写的。看来只好用个Timer每秒检查一次 状态是否为停止,如停止再次调用把~~~
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式