VB.net 如何同时播放多个资源文件内的wav
我用My.Computer.Audio.Play(变量,AudioPlayMode.Background)只能播放一个声音,如果播放下一个声音,前一个马上就关闭了。我也试...
我用My.Computer.Audio.Play(变量, AudioPlayMode.Background)只能播放一个声音,如果播放下一个声音,前一个马上就关闭了。
我也试过开多线程了,依然不行。我新建第2个窗口再播放,也还是不行。
申明:我不是要本地文件调用播放2个声音,那个丢2个控件就行了简单得要死。我要的是资源文件调用播放,注意是资源文件里的调用播放。
我想要实现的功能就是先播放一个BGM,再根据情况播放播放别的音效。
最好直接发源码:talenttzsbu@163.com,我知道几句话是说不清楚的,跪求。 展开
我也试过开多线程了,依然不行。我新建第2个窗口再播放,也还是不行。
申明:我不是要本地文件调用播放2个声音,那个丢2个控件就行了简单得要死。我要的是资源文件调用播放,注意是资源文件里的调用播放。
我想要实现的功能就是先播放一个BGM,再根据情况播放播放别的音效。
最好直接发源码:talenttzsbu@163.com,我知道几句话是说不清楚的,跪求。 展开
1个回答
展开全部
用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每秒检查一次 状态是否为停止,如停止再次调用把~~~
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询