Files
Client/Library/dxx8/samples/Multimedia/VBSamples/DirectMusic/PlayAudio/frmAudio.frm
LGram16 e067522598 Initial commit: ROW Client source code
Game client codebase including:
- CharacterActionControl: Character and creature management
- GlobalScript: Network, items, skills, quests, utilities
- RYLClient: Main client application with GUI and event handlers
- Engine: 3D rendering engine (RYLGL)
- MemoryManager: Custom memory allocation
- Library: Third-party dependencies (DirectX, boost, etc.)
- Tools: Development utilities

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 16:24:34 +09:00

434 lines
13 KiB
Plaintext

VERSION 5.00
Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "comdlg32.ocx"
Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"
Begin VB.Form frmAudio
BorderStyle = 1 'Fixed Single
Caption = "Play Audio"
ClientHeight = 2520
ClientLeft = 150
ClientTop = 435
ClientWidth = 4890
Icon = "frmAudio.frx":0000
LinkTopic = "Form1"
MaxButton = 0 'False
ScaleHeight = 2520
ScaleWidth = 4890
StartUpPosition = 3 'Windows Default
Begin VB.Frame Frame1
Caption = "Master Volume"
Height = 675
Index = 1
Left = 2520
TabIndex = 9
Top = 1680
Width = 2295
Begin MSComctlLib.Slider sldVolume
Height = 195
Left = 180
TabIndex = 10
Top = 420
Width = 1995
_ExtentX = 3519
_ExtentY = 344
_Version = 393216
LargeChange = 1000
SmallChange = 100
Min = -2500
Max = 200
SelStart = 200
TickFrequency = 500
Value = 200
End
Begin VB.Label lbl
BackStyle = 0 'Transparent
Caption = "Max"
Height = 255
Index = 3
Left = 1860
TabIndex = 12
Top = 180
Width = 315
End
Begin VB.Label lbl
BackStyle = 0 'Transparent
Caption = "Min"
Height = 255
Index = 1
Left = 180
TabIndex = 11
Top = 180
Width = 315
End
End
Begin VB.Frame fraTempo
Caption = "Tempo"
Height = 675
Left = 60
TabIndex = 8
Top = 1680
Width = 2295
Begin MSComctlLib.Slider sldTempo
Height = 195
Left = 120
TabIndex = 13
Top = 420
Width = 1995
_ExtentX = 3519
_ExtentY = 344
_Version = 393216
Max = 30
SelStart = 10
TickFrequency = 5
Value = 10
End
Begin VB.Label lbl
BackStyle = 0 'Transparent
Caption = "Fast"
Height = 255
Index = 6
Left = 1680
TabIndex = 16
Top = 180
Width = 375
End
Begin VB.Label lbl
BackStyle = 0 'Transparent
Caption = "Normal"
Height = 255
Index = 5
Left = 540
TabIndex = 15
Top = 180
Width = 615
End
Begin VB.Label lbl
BackStyle = 0 'Transparent
Caption = "Slow"
Height = 255
Index = 4
Left = 120
TabIndex = 14
Top = 180
Width = 375
End
End
Begin VB.CommandButton cmdExit
Caption = "E&xit"
Height = 315
Left = 3840
TabIndex = 7
Top = 1260
Width = 975
End
Begin VB.CheckBox chkLoop
Caption = "Loop Audio"
Height = 255
Left = 60
TabIndex = 6
Top = 1320
Width = 1155
End
Begin VB.TextBox txtFile
BackColor = &H8000000F&
Height = 285
Left = 1140
Locked = -1 'True
TabIndex = 5
Top = 900
Width = 3675
End
Begin VB.CommandButton cmdOpen
Caption = "&Audio File"
Height = 315
Left = 120
TabIndex = 0
Top = 900
Width = 975
End
Begin VB.CommandButton cmdPlay
Caption = "&Play"
Enabled = 0 'False
Height = 315
Left = 1320
TabIndex = 1
Top = 1260
Width = 975
End
Begin VB.CommandButton cmdStop
Caption = "&Stop"
Enabled = 0 'False
Height = 315
Left = 2340
TabIndex = 2
Top = 1260
Width = 975
End
Begin MSComDlg.CommonDialog cdlOpen
Left = 3000
Top = 0
_ExtentX = 847
_ExtentY = 847
_Version = 393216
Flags = 4
End
Begin VB.Image Image1
Height = 480
Left = 60
Picture = "frmAudio.frx":0442
Top = 60
Width = 480
End
Begin VB.Label lbl
BackStyle = 0 'Transparent
Caption = "Copyright (C) 1999-2001 Microsoft Corporation All Rights Reserved."
Height = 495
Index = 2
Left = 600
TabIndex = 4
Top = 300
Width = 3015
End
Begin VB.Label lbl
BackStyle = 0 'Transparent
Caption = "Play Audio Sample"
Height = 255
Index = 0
Left = 600
TabIndex = 3
Top = 60
Width = 2655
End
End
Attribute VB_Name = "frmAudio"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Option Compare Text
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'
' Copyright (C) 1999-2001 Microsoft Corporation. All Rights Reserved.
'
' File: frmAudio.frm
'
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Implements DirectXEvent8
Private dx As New DirectX8
'We need a loader object and a performance object
'We will play everything on our default audio path, so we do not need an audiopath object
Private dmp As DirectMusicPerformance8
Private dml As DirectMusicLoader8
Private dmSeg As DirectMusicSegment8
'Our event handle
Private dmEvent As Long
'API declare for windows folder
Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Sub cmdExit_Click()
Unload Me 'Cleanup happens in form unload
End Sub
Private Sub cmdOpen_Click()
Static sCurDir As String
Static lFilter As Long
'We want to open a file now
cdlOpen.flags = cdlOFNHideReadOnly Or cdlOFNFileMustExist
cdlOpen.FilterIndex = lFilter
cdlOpen.Filter = "Wave Files (*.wav)|*.wav|Music Files (*.mid;*.rmi)|*.mid;*.rmi|Segment Files (*.sgt)|*.sgt|All Audio Files|*.wav;*.mid;*.rmi;*.sgt|All Files (*.*)|*.*"
cdlOpen.FileName = vbNullString
If sCurDir = vbNullString Then
'Set the init folder to \windows\media if it exists. If not, set it to the \windows folder
Dim sWindir As String
sWindir = Space$(255)
If GetWindowsDirectory(sWindir, 255) = 0 Then
'We couldn't get the windows folder for some reason, use the c:\
cdlOpen.InitDir = "C:\"
Else
Dim sMedia As String
sWindir = Left$(sWindir, InStr(sWindir, Chr$(0)) - 1)
If Right$(sWindir, 1) = "\" Then
sMedia = sWindir & "Media"
Else
sMedia = sWindir & "\Media"
End If
If Dir$(sMedia, vbDirectory) <> vbNullString Then
cdlOpen.InitDir = sMedia
Else
cdlOpen.InitDir = sWindir
End If
End If
Else
cdlOpen.InitDir = sCurDir
End If
On Local Error GoTo ClickedCancel
cdlOpen.CancelError = True
cdlOpen.ShowOpen ' Display the Open dialog box
'Save the current information
sCurDir = GetFolder(cdlOpen.FileName)
'Set the search folder to this one so we can auto download anything we need
dml.SetSearchDirectory sCurDir
lFilter = cdlOpen.FilterIndex
On Local Error GoTo NoLoadSegment
'Before we load the segment stop one if it's playing
cmdStop_Click
'Now let's load the segment
If FileLen(cdlOpen.FileName) = 0 Then Err.Raise 5
EnableTempoControl (Right$(cdlOpen.FileName, 4) <> ".wav")
Set dmSeg = dml.LoadSegment(cdlOpen.FileName)
If (Right$(cdlOpen.FileName, 4) = ".mid") Or (Right$(cdlOpen.FileName, 4) = ".rmi") Or (Right$(cdlOpen.FileName, 5) = ".midi") Then
dmSeg.SetStandardMidiFile
End If
txtFile.Text = cdlOpen.FileName
EnablePlayUI True
sldTempo.Value = 10
sldTempo_Click
Exit Sub
NoLoadSegment:
MsgBox "Couldn't load this segment", vbOKOnly Or vbCritical, "Couldn't load"
ClickedCancel:
End Sub
Private Sub cmdPlay_Click()
If Not (dmSeg Is Nothing) Then
If chkLoop.Value = vbChecked Then
dmSeg.SetRepeats -1 'Loop infinitely
Else
dmSeg.SetRepeats 0 'Don't loop
End If
dmp.PlaySegmentEx dmSeg, DMUS_SEGF_DEFAULT, 0
EnablePlayUI False
End If
End Sub
Private Sub cmdStop_Click()
If Not (dmSeg Is Nothing) Then dmp.StopEx dmSeg, 0, 0
EnablePlayUI True
End Sub
Private Sub DirectXEvent8_DXCallback(ByVal eventid As Long)
Dim dmNotification As DMUS_NOTIFICATION_PMSG
'We only have one event
If Not dmp.GetNotificationPMSG(dmNotification) Then
MsgBox "Error processing this Notification", vbOKOnly Or vbInformation, "Cannot Process."
Exit Sub
Else
If dmNotification.lNotificationOption = DMUS_NOTIFICATION_SEGEND Then 'The segment has ended
EnablePlayUI True
End If
End If
End Sub
Private Sub Form_Load()
InitAudio
EnableTempoControl False
End Sub
Private Sub InitAudio()
On Error GoTo FailedInit
'We need to create our objects now
Set dmp = dx.DirectMusicPerformanceCreate
Set dml = dx.DirectMusicLoaderCreate
Dim dmusAudio As DMUS_AUDIOPARAMS
'Now call init audio
dmp.InitAudio Me.hWnd, DMUS_AUDIOF_ALL, dmusAudio, Nothing, DMUS_APATH_SHARED_STEREOPLUSREVERB, 128
dmp.SetMasterAutoDownload True
'Now add a notification for the segment
dmp.AddNotificationType DMUS_NOTIFY_ON_SEGMENT
'Create an event so we can receive these
dmEvent = dx.CreateEvent(Me)
dmp.SetNotificationHandle dmEvent
Exit Sub
FailedInit:
MsgBox "Could not initialize DirectMusic." & vbCrLf & "This sample will exit.", vbOKOnly Or vbInformation, "Exiting..."
CleanupAudio
Unload Me
End
End Sub
Private Sub CleanupAudio()
'Cleanup everything
On Error Resume Next
dmp.RemoveNotificationType DMUS_NOTIFY_ON_SEGMENT
dx.DestroyEvent dmEvent
If Not (dmSeg Is Nothing) Then dmp.StopEx dmSeg, 0, 0
Set dmSeg = Nothing
Set dml = Nothing
If Not (dmp Is Nothing) Then dmp.CloseDown
Set dmp = Nothing
End Sub
Private Sub Form_Unload(Cancel As Integer)
CleanupAudio
End Sub
Private Function GetFolder(ByVal sFile As String) As String
Dim lCount As Long
For lCount = Len(sFile) To 1 Step -1
If Mid$(sFile, lCount, 1) = "\" Then
GetFolder = Left$(sFile, lCount)
Exit Function
End If
Next
GetFolder = vbNullString
End Function
Public Sub EnablePlayUI(fEnable As Boolean)
'Enable/Disable the buttons
If fEnable Then
chkLoop.Enabled = True
cmdStop.Enabled = False
cmdPlay.Enabled = True
cmdOpen.Enabled = True
cmdPlay.SetFocus
Else
chkLoop.Enabled = False
cmdStop.Enabled = True
cmdPlay.Enabled = False
cmdOpen.Enabled = False
cmdStop.SetFocus
End If
End Sub
Private Sub sldTempo_Click()
'Update the tempo now
dmp.SetMasterTempo (sldTempo.Value / 10)
End Sub
Private Sub sldTempo_Scroll()
sldTempo_Click
End Sub
Private Sub sldVolume_Click()
sldVolume_Scroll
End Sub
Private Sub sldVolume_Scroll()
'Update the volume
dmp.SetMasterVolume sldVolume.Value
End Sub
Private Sub EnableTempoControl(ByVal fEnable As Boolean)
'If this is a wave file, turn off tempo control
fraTempo.Enabled = fEnable
sldTempo.Enabled = fEnable
lbl(4).Enabled = fEnable
lbl(5).Enabled = fEnable
lbl(6).Enabled = fEnable
If Not fEnable Then
sldTempo.TickStyle = sldNoTicks
Else
sldTempo.TickStyle = sldBottomRight
End If
End Sub