VERSION 5.00 Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX" Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "comdlg32.ocx" Begin VB.Form frmAdjust BorderStyle = 1 'Fixed Single Caption = "Adjust Sound" ClientHeight = 6420 ClientLeft = 240 ClientTop = 525 ClientWidth = 6900 Icon = "frmAdjust.frx":0000 LinkTopic = "Form1" MaxButton = 0 'False ScaleHeight = 6420 ScaleWidth = 6900 StartUpPosition = 2 'CenterScreen Begin VB.Timer tmrUpdate Interval = 250 Left = 7200 Top = 240 End Begin MSComctlLib.Slider sldFreq Height = 270 Left = 2460 TabIndex = 17 Top = 960 Width = 3615 _ExtentX = 6376 _ExtentY = 476 _Version = 393216 LargeChange = 1000 SmallChange = 100 Min = 100 Max = 100000 SelStart = 100 TickFrequency = 10000 Value = 100 End Begin MSComDlg.CommonDialog cdlFile Left = 8880 Top = 240 _ExtentX = 847 _ExtentY = 847 _Version = 393216 End Begin VB.CommandButton cmdExit Caption = "Exit" Height = 315 Left = 5760 TabIndex = 12 Top = 6060 Width = 975 End Begin VB.CommandButton cmdStop Caption = "Stop" Enabled = 0 'False Height = 315 Left = 1080 TabIndex = 11 Top = 6060 Width = 975 End Begin VB.CommandButton cmdPlay Caption = "Play" Enabled = 0 'False Height = 315 Left = 60 TabIndex = 10 Top = 6060 Width = 975 End Begin VB.CommandButton cmdSound Caption = "Sound &File" Default = -1 'True Height = 315 Left = 120 TabIndex = 9 Top = 120 Width = 975 End Begin VB.CheckBox chkLoop Caption = "Loop Sound" Height = 315 Left = 120 TabIndex = 8 Top = 5580 Width = 3135 End Begin VB.Frame Frame1 Caption = "Expected Behavior" Height = 2475 Index = 1 Left = 120 TabIndex = 7 Top = 3060 Width = 6615 Begin VB.Label lblBehavior BackStyle = 0 'Transparent Caption = "Expected Behavior Text" Height = 2055 Left = 120 TabIndex = 13 Top = 300 Width = 6375 End End Begin VB.Frame Frame1 Caption = "Buffer Settings" Height = 915 Index = 0 Left = 120 TabIndex = 6 Top = 2040 Width = 6615 Begin VB.PictureBox Picture1 BorderStyle = 0 'None Height = 255 Index = 1 Left = 1260 ScaleHeight = 255 ScaleWidth = 5235 TabIndex = 32 Top = 540 Width = 5235 Begin VB.OptionButton optDefault Caption = "Default" Height = 195 Left = 0 TabIndex = 35 Top = 0 Value = -1 'True Width = 1035 End Begin VB.OptionButton optHardware Caption = "Hardware" Height = 195 Left = 1200 TabIndex = 34 Top = 0 Width = 1035 End Begin VB.OptionButton optSoftware Caption = "Software" Height = 195 Left = 2400 TabIndex = 33 Top = 0 Width = 1035 End End Begin VB.PictureBox Picture1 BorderStyle = 0 'None Height = 255 Index = 0 Left = 1260 ScaleHeight = 255 ScaleWidth = 5235 TabIndex = 28 Top = 180 Width = 5235 Begin VB.OptionButton optGlobal Caption = "Global" Height = 195 Left = 2400 TabIndex = 31 Top = 0 Width = 1035 End Begin VB.OptionButton optSticky Caption = "Sticky" Height = 195 Left = 1200 TabIndex = 30 Top = 0 Width = 1035 End Begin VB.OptionButton optNormal Caption = "Normal" Height = 195 Left = 0 TabIndex = 29 Top = 0 Value = -1 'True Width = 1035 End End Begin VB.Label Label1 BackStyle = 0 'Transparent Caption = "Buffer Mixing" Height = 195 Index = 11 Left = 120 TabIndex = 27 Top = 540 Width = 915 End Begin VB.Label Label1 BackStyle = 0 'Transparent Caption = "Focus" Height = 195 Index = 10 Left = 120 TabIndex = 26 Top = 240 Width = 555 End End Begin MSComctlLib.Slider sldPan Height = 270 Left = 2460 TabIndex = 24 Top = 1320 Width = 3615 _ExtentX = 6376 _ExtentY = 476 _Version = 393216 LargeChange = 1000 SmallChange = 100 Min = -10000 Max = 10000 TickFrequency = 1000 End Begin MSComctlLib.Slider sldVolume Height = 270 Left = 2460 TabIndex = 25 Top = 1680 Width = 3615 _ExtentX = 6376 _ExtentY = 476 _Version = 393216 LargeChange = 1000 SmallChange = 100 Min = -2500 Max = 0 TickFrequency = 250 End Begin VB.Label Label1 Alignment = 2 'Center BackStyle = 0 'Transparent Caption = "High" Height = 195 Index = 9 Left = 6240 TabIndex = 23 Top = 1740 Width = 555 End Begin VB.Label Label1 Alignment = 2 'Center BackStyle = 0 'Transparent Caption = "Low" Height = 195 Index = 8 Left = 1860 TabIndex = 22 Top = 1740 Width = 555 End Begin VB.Label Label1 Alignment = 2 'Center BackStyle = 0 'Transparent Caption = "Right" Height = 195 Index = 7 Left = 6180 TabIndex = 21 Top = 1380 Width = 555 End Begin VB.Label Label1 Alignment = 2 'Center BackStyle = 0 'Transparent Caption = "Left" Height = 195 Index = 6 Left = 1860 TabIndex = 20 Top = 1380 Width = 555 End Begin VB.Label Label1 BackStyle = 0 'Transparent Caption = "100 KHz" Height = 195 Index = 5 Left = 6120 TabIndex = 19 Top = 1020 Width = 615 End Begin VB.Label Label1 BackStyle = 0 'Transparent Caption = "100 Hz" Height = 195 Index = 4 Left = 1860 TabIndex = 18 Top = 1020 Width = 555 End Begin VB.Label lblVolume BackStyle = 0 'Transparent BorderStyle = 1 'Fixed Single Height = 315 Left = 1200 TabIndex = 16 Top = 1680 Width = 555 End Begin VB.Label lblPan BackStyle = 0 'Transparent BorderStyle = 1 'Fixed Single Height = 315 Left = 1200 TabIndex = 15 Top = 1320 Width = 555 End Begin VB.Label lblFrequency BackStyle = 0 'Transparent BorderStyle = 1 'Fixed Single Height = 315 Left = 1200 TabIndex = 14 Top = 960 Width = 555 End Begin VB.Label lblStatus BackStyle = 0 'Transparent BorderStyle = 1 'Fixed Single Height = 315 Left = 1200 TabIndex = 5 Top = 540 Width = 5475 End Begin VB.Label lblFile BackStyle = 0 'Transparent BorderStyle = 1 'Fixed Single Height = 315 Left = 1200 TabIndex = 4 Top = 120 Width = 5475 End Begin VB.Label Label1 BackStyle = 0 'Transparent Caption = "Volume" Height = 195 Index = 3 Left = 180 TabIndex = 3 Top = 1740 Width = 795 End Begin VB.Label Label1 BackStyle = 0 'Transparent Caption = "Pan" Height = 195 Index = 2 Left = 180 TabIndex = 2 Top = 1380 Width = 795 End Begin VB.Label Label1 BackStyle = 0 'Transparent Caption = "Frequency" Height = 195 Index = 1 Left = 180 TabIndex = 1 Top = 1020 Width = 795 End Begin VB.Label Label1 BackStyle = 0 'Transparent Caption = "Status" Height = 195 Index = 0 Left = 180 TabIndex = 0 Top = 600 Width = 795 End End Attribute VB_Name = "frmAdjust" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Option Explicit ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' Copyright (C) 1999-2001 Microsoft Corporation. All Rights Reserved. ' ' File: frmAdjust.frm ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'API declare for windows folder Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long Private dx As New DirectX8 Private ds As DirectSound8 Private dsb As DirectSoundSecondaryBuffer8 Private msFile As String Private Sub cmdExit_Click() Cleanup Unload Me End Sub Private Sub Cleanup() If Not (dsb Is Nothing) Then dsb.Stop Set dsb = Nothing Set ds = Nothing Set dx = Nothing End Sub Private Function InitDSound() As Boolean On Error GoTo FailedInit InitDSound = True Set ds = dx.DirectSoundCreate(vbNullString) ds.SetCooperativeLevel Me.hWnd, DSSCL_PRIORITY Exit Function FailedInit: InitDSound = False End Function Private Sub cmdPlay_Click() Dim dsBuf As DSBUFFERDESC Dim bFocusSticky As Boolean, bFocusGlobal As Boolean Dim bMixHardware As Boolean, bMixSoftware As Boolean On Error GoTo ErrOut bFocusSticky = (optSticky.Value) bFocusGlobal = (optGlobal.Value) bMixHardware = (optHardware.Value) bMixSoftware = (optSoftware.Value) dsBuf.lFlags = DSBCAPS_CTRLFREQUENCY Or DSBCAPS_CTRLPAN Or DSBCAPS_CTRLVOLUME If bFocusGlobal Then dsBuf.lFlags = dsBuf.lFlags Or DSBCAPS_GLOBALFOCUS End If If bFocusSticky Then dsBuf.lFlags = dsBuf.lFlags Or DSBCAPS_STICKYFOCUS End If If bMixHardware Then dsBuf.lFlags = dsBuf.lFlags Or DSBCAPS_LOCHARDWARE End If If bMixSoftware Then dsBuf.lFlags = dsBuf.lFlags Or DSBCAPS_LOCSOFTWARE End If Set dsb = ds.CreateSoundBufferFromFile(msFile, dsBuf) 'Update the buffer based on the current slider OnSliderChange If chkLoop.Value = vbChecked Then dsb.Play DSBPLAY_LOOPING Else dsb.Play 0 End If lblStatus.Caption = "File playing." EnablePlayUI False Exit Sub ErrOut: lblStatus.Caption = "An error occured trying to play this file with these settings." End Sub Private Sub cmdSound_Click() Static sCurDir As String Static lFilter As Long Dim dsBuf As DSBUFFERDESC 'Now we should load a wave file 'Ask them for a file to load UpdateStatus "Loading file..." With cdlFile .flags = cdlOFNFileMustExist Or cdlOFNHideReadOnly .FilterIndex = lFilter .Filter = "Wave Files (*.wav)|*.wav" .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:\ .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 .InitDir = sMedia Else .InitDir = sWindir End If End If Else .InitDir = sCurDir End If .ShowOpen ' Display the Open dialog box If .FileName = vbNullString Then UpdateStatus "No file loaded." Exit Sub 'We didn't click anything exit End If 'Save the current information sCurDir = GetFolder(.FileName) lFilter = .FilterIndex UpdateStatus "File loaded." 'Save the filename for later use msFile = .FileName If Not (dsb Is Nothing) Then dsb.Stop Set dsb = Nothing dsBuf.lFlags = DSBCAPS_CTRLFREQUENCY Or DSBCAPS_CTRLPAN Or DSBCAPS_CTRLVOLUME On Error Resume Next Set dsb = ds.CreateSoundBufferFromFile(msFile, dsBuf) If Err Then UpdateStatus "Could not create buffer." Exit Sub End If sldFreq.Value = dsBuf.fxFormat.lSamplesPerSec lblFile.Caption = .FileName EnablePlayUI True End With End Sub Private Sub cmdStop_Click() If Not (dsb Is Nothing) Then dsb.Stop 'Stop the buffer and reset it's position dsb.SetCurrentPosition 0 lblStatus.Caption = "File stopped." EnablePlayUI True End If End Sub Private Sub Form_Load() 'First we should set up our DirectSound object If Not InitDSound Then MsgBox "Could not initialize DirectSound. This sample is exiting.", vbOKOnly Or vbInformation, "Failed." Cleanup Unload Me End End If UpdateBehaviorText OnSliderChange UpdateStatus "No file loaded." End Sub Private Sub UpdateBehaviorText() Dim sText As String Dim bFocusSticky As Boolean, bFocusGlobal As Boolean Dim bMixHardware As Boolean, bMixSoftware As Boolean bFocusSticky = (optSticky.Value) bFocusGlobal = (optGlobal.Value) bMixHardware = (optHardware.Value) bMixSoftware = (optSoftware.Value) 'Figure what the user should expect based on the dialog choice If bFocusSticky Then sText = "With sticky focus an application using DirectSound " & _ "can continue to play its sticky focus buffers if the " & _ "user switches to another application not using " & _ "DirectSound. However, if the user switches to another " & _ "DirectSound application, all sound buffers, both normal " & _ "and sticky focus, in the previous application are muted." ElseIf bFocusGlobal Then sText = "With global focus, an application using DirectSound " & _ "can continue to play its buffers if the user switches " & _ "focus to another application, even if the new application " & _ "uses DirectSound. The one exception is if you switch " & _ "focus to a DirectSound application that uses the " & _ "DSSCL_WRITEPRIMARY flag for its " & _ "cooperative level. In this case, the global sounds from " & _ "other applications will not be audible." Else 'Normal focus sText = "With normal focus, an application using DirectSound " & _ "will mute its buffers if the user switches focus to " & _ "another application" End If If bMixHardware Then sText = sText & vbCrLf & vbCrLf & "With hardware mixing, the new buffer will be " & _ "forced to use hardware mixing. If the device does " & _ "not support hardware mixing or if the required " & _ "hardware memory is not available, the call to the " & _ "IDirectSound::CreateSoundBuffer method will fail." ElseIf bMixSoftware Then sText = sText & vbCrLf & vbCrLf & "With software mixing, the new buffer will be " & _ "stored in software memory and use software mixing, " & _ "even if hardware resources are available." Else 'Default mixing sText = sText & vbCrLf & vbCrLf & "With default mixing, the new buffer will use " & _ "hardware mixing if availible, otherwise software " & _ "memory and mixing will be used." End If 'Tell the user what to expect lblBehavior.Caption = sText End Sub Private Sub optDefault_Click() UpdateBehaviorText End Sub Private Sub optGlobal_Click() UpdateBehaviorText End Sub Private Sub optHardware_Click() UpdateBehaviorText End Sub Private Sub optNormal_Click() UpdateBehaviorText End Sub Private Sub optSoftware_Click() UpdateBehaviorText End Sub Private Sub optSticky_Click() UpdateBehaviorText 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 Private Sub OnSliderChange() Dim lFrequency As Long, lPan As Long, lVolume As Long 'Get the position of the sliders lFrequency = sldFreq.Value lPan = sldPan.Value lVolume = sldVolume.Value 'Set the static labels lblFrequency.Caption = CStr(lFrequency) lblPan.Caption = CStr(lPan) lblVolume.Caption = CStr(lVolume) 'Set the options in the DirectSound buffer If Not (dsb Is Nothing) Then dsb.SetFrequency lFrequency dsb.SetPan lPan dsb.SetVolume lVolume End If End Sub Private Sub sldFreq_Change() OnSliderChange End Sub Private Sub sldFreq_Scroll() OnSliderChange End Sub Private Sub sldPan_Change() OnSliderChange End Sub Private Sub sldPan_Scroll() OnSliderChange End Sub Private Sub sldVolume_Change() OnSliderChange End Sub Private Sub UpdateStatus(ByVal sStatus As String) lblStatus.Caption = sStatus End Sub Private Sub sldVolume_Scroll() OnSliderChange End Sub Private Sub tmrUpdate_Timer() If Not (dsb Is Nothing) Then If (dsb.GetStatus And DSBSTATUS_PLAYING) <> DSBSTATUS_PLAYING Then If cmdPlay.Enabled = False Then EnablePlayUI True lblStatus.Caption = "File stopped." End If End If End If End Sub Private Sub EnablePlayUI(ByVal fEnable As Boolean) On Error Resume Next If fEnable Then chkLoop.Enabled = True cmdPlay.Enabled = True cmdStop.Enabled = False optNormal.Enabled = True optSticky.Enabled = True optGlobal.Enabled = True optDefault.Enabled = True optHardware.Enabled = True optSoftware.Enabled = True cmdSound.Enabled = True cmdPlay.SetFocus Else chkLoop.Enabled = False cmdPlay.Enabled = False cmdStop.Enabled = True optNormal.Enabled = False optSticky.Enabled = False optGlobal.Enabled = False optDefault.Enabled = False optHardware.Enabled = False optSoftware.Enabled = False cmdSound.Enabled = False cmdStop.SetFocus End If End Sub