游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3954|回复: 15

[问题]请问怎样循环放一些音乐

[复制链接]

1

主题

29

帖子

29

积分

注册会员

Rank: 2

积分
29
发表于 2006-1-23 14:54:00 | 显示全部楼层 |阅读模式
我想放MIDI的音乐

不知道该什么办啊

SNDPLAYSOUND好象不能放MIDI的

听说有DIRECTSOUND和DIRECTMUSIC的

但是我不会用

还恳请大虾们指教~~~~~

[em10] [em10] [em17] [em24] [em23]

130

主题

2714

帖子

2714

积分

金牌会员

Rank: 6Rank: 6

积分
2714
发表于 2006-1-23 15:06:00 | 显示全部楼层

Re:[问题]请问怎样循环放一些音乐

我用一个检测MIDI是否到结尾的API函数来做的:
先建一个TIMER和一个按钮控件,2.MID,3.MID是音乐名字。
这个程序可以无限首循环MIDI音乐:
如果加上MUSP=3是第3首,MUSP=4是第4首
If MUSP > 3 Then MUSP = 1  或  If MUSP > 4 Then MUSP = 1
再不明白到我网站。


' VB6循环播放多首MIDI音乐程序   2005.9.19      游戏之家作品
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength _
As Long, ByVal hwndCallback As Long) As Long
Dim Res As Integer, Ret As String * 1024

Private Declare Function mciGetDeviceID Lib "winmm.dll" Alias "mciGetDeviceIDA" (ByVal lpstrName As String) As Long
Private Declare Function mciGetCreatorTask Lib "winmm.dll" (ByVal wDeviceID As Long) As Long

Dim ID As Long
Dim SOUNDNAME As String
Dim MUSKEY, MUSP As Integer

Private Sub Form_Load()
Timer1.Enabled = False
MUSKEY = 1: MUSP = 1
SOUNDNAME = "2.MID"
If MUSKEY = 1 Then Res = mciSendString("play " & SOUNDNAME, Ret, 1024, 0): Timer1.Enabled = True: MUSKEY = 0
End Sub

Private Sub Command2_Click()
'停止
Timer1.Enabled = False
Res = mciSendString("close all", Ret, 1024, 0)
End Sub

Private Sub Timer1_Timer()
If MUSP = 1 Then SOUNDNAME = "2.MID"
If MUSP = 2 Then SOUNDNAME = "3.MID"
If MUSKEY = 1 Then Res = mciSendString("play " & SOUNDNAME, Ret, 1024, 0): Timer1.Enabled = True: MUSKEY = 0
ID = mciGetDeviceID(SOUNDNAME)
If mciGetCreatorTask(ID) = 0 Then MUSP = MUSP + 1: MUSKEY = 1
If MUSP > 2 Then MUSP = 1
End Sub

1

主题

29

帖子

29

积分

注册会员

Rank: 2

积分
29
 楼主| 发表于 2006-1-23 15:32:00 | 显示全部楼层

Re:[问题]请问怎样循环放一些音乐

谢谢这位大虾

你的网站是多少?

130

主题

2714

帖子

2714

积分

金牌会员

Rank: 6Rank: 6

积分
2714
发表于 2006-1-23 16:59:00 | 显示全部楼层

Re:[问题]请问怎样循环放一些音乐

http://www.vbgamediy.com

20

主题

451

帖子

470

积分

中级会员

Rank: 3Rank: 3

积分
470
发表于 2006-1-23 17:06:00 | 显示全部楼层

Re:[问题]请问怎样循环放一些音乐

用dmusic可以实现的

1

主题

29

帖子

29

积分

注册会员

Rank: 2

积分
29
 楼主| 发表于 2006-1-23 19:07:00 | 显示全部楼层

Re:[问题]请问怎样循环放一些音乐

dmusic?

API吗?

有例子吗?谢谢!

26

主题

537

帖子

537

积分

高级会员

Rank: 4

积分
537
发表于 2006-1-24 12:43:00 | 显示全部楼层

Re:[问题]请问怎样循环放一些音乐

最简单的是用AudioVedioPlayBack,属于Managed DirectX 9.0,只有几个函数

130

主题

2714

帖子

2714

积分

金牌会员

Rank: 6Rank: 6

积分
2714
发表于 2006-1-24 12:52:00 | 显示全部楼层

Re:[问题]请问怎样循环放一些音乐

好心你们发例子了.

20

主题

451

帖子

470

积分

中级会员

Rank: 3Rank: 3

积分
470
发表于 2006-1-24 17:05:00 | 显示全部楼层

Re:[问题]请问怎样循环放一些音乐

游戏之家把昨天的帖子改了?
昨天晚上断网了,没把例子贴上来,下面是例子~
vb.net里Dmusic和Dshow都被封装到了audiovideoplayback类里面了,用法如下:

Private WithEvents aa As Microsoft.DirectX.AudioVideoPlayback.Audio = New Audio("bk1.mid")


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        aa.Play()
    End Sub
    Private Sub Ending(ByVal sender As Object, ByVal e As System.EventArgs) Handles aa.Ending
        If Not (aa Is Nothing) Then
            aa.Stop()
            aa.Play()
        End If
    End Sub

vb6我不知道怎么调用dx9,dx7的dmusic接口跟9不一样,所以我就没写vb6的例子了

130

主题

2714

帖子

2714

积分

金牌会员

Rank: 6Rank: 6

积分
2714
发表于 2006-1-24 17:08:00 | 显示全部楼层

Re:[问题]请问怎样循环放一些音乐

改贴是因为有错别字, 我把MID写成MIDI了,别的没动。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-23 08:02

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表