VB.net DirectSound 中 New SecondaryBuffer 多个实例 如何控制其中某个指定实例或者全部实例?

sfuu1986 2015-07-06 11:37:09
在VB.net中引用DirectSound创建一个窗体应用,点击按钮会播放sound\1.wav。
不停的点击Button1,会重叠播放声音。
点击Button2,会停止播放。

我的问题是:
每次点击Button2时只有最后一个New产生的SecondaryBuffer实例会停止,之前的SecondaryBuffer仍然会继续播放,无论点击多少次Button2,也不会停止。
可能是因为Buf = New SecondaryBuffer("sound\1.wav", desc, ad) 这条语句建立的多个实例全部都叫"Buf",当执行Buf.Stop()时就不知道Stop的是哪个实例了。

那么请问使用NEW创建的多个同名的实例,是否有序号?是否能够根据序号单独控制某个特定的实例?
或者有什么其他的方法?谢谢大家了。


代码如下:
Imports Microsoft.DirectX.DirectSound

Public Class Form1

Dim ad As Device '创建设备
Dim Buf As SecondaryBuffer '创建缓冲
Dim desc As BufferDescription '创建缓冲

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ad = New Device '实力化设备对象
ad.SetCooperativeLevel(Me.Handle, CooperativeLevel.Normal) '关联
desc = New BufferDescription
desc.GlobalFocus = True
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Buf = New SecondaryBuffer("sound\1.wav", desc, ad) '实力化缓冲区
Buf.Play(0, BufferPlayFlags.Default) '播放,同时指定开始位置跟方式
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Buf.stop()
End Sub

End Class
...全文
234 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sfuu1986 2015-07-06
  • 打赏
  • 举报
回复
引用 3 楼 Z65443344 的回复:
比如你的对象类型是A 那么定义一个全局List<A> Alist=new List<A>(); 然后每次new一个对象,不要丢弃,把它加入list A a=new A(); Alist.Add(a); 然后你就可以遍历List去操作每一个实例化出来的对象了
十分感谢!
於黾 2015-07-06
  • 打赏
  • 举报
回复
对应你的代码,应该是 Dim DList As List<Device>=new List<Device>() ad = New Device; DList.Add(ad);
於黾 2015-07-06
  • 打赏
  • 举报
回复
比如你的对象类型是A 那么定义一个全局List<A> Alist=new List<A>(); 然后每次new一个对象,不要丢弃,把它加入list A a=new A(); Alist.Add(a); 然后你就可以遍历List去操作每一个实例化出来的对象了
sfuu1986 2015-07-06
  • 打赏
  • 举报
回复
引用 1 楼 Z65443344 的回复:
放进List里啊
谢谢,能不能告诉我下详细的方法?
於黾 2015-07-06
  • 打赏
  • 举报
回复
放进List里啊

16,553

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧