How to Emulate QuickBasic's SOUND Statement in Visual BasicLast reviewed: December 8, 1995Article ID: Q140879 |
The information in this article applies to:
- Professional and Enterprise Editions of Microsoft Visual Basic, 16-bit only, for Windows, version 4.0
SUMMARYThe SOUND statement found in Microsoft QuickBasic is not implemented within Microsoft Visual Basic. You can perform sound through a Windows API call that is equivalent to the QuickBasic SOUND statement.
MORE INFORMATIONThe QuickBasic version of the SOUND statement can be executed by calling several Windows 3.0 API function calls. Within Windows, you must open up a VoiceQueue with the OpenSound call routine. Using the function SetVoiceSound, place all of the values corresponding to the desired frequencies and durations. Once the VoiceQueue has the desired frequencies and durations, you start the process by calling StartSound. After the sounds have been played, you must free up the VoiceQueue by calling CloseSound. If you plan on placing a large amount of information into the VoiceQueue, you may need to resize the VoiceQueue buffer by calling the SetVoiceQueueSize function. After executing the StartSound function, you cannot place any more sound into the VoiceQueue until the VoiceQueue is depleted. Placing more sound into the queue will overwrite any information that was previously in the VoiceQueue. If you are going to place sound into the VoiceQueue after a StartSound statement, you will need to call WaitSoundState with an argument of one. When WaitSoundState returns NULL, the VoiceQueue is empty and processing can continue. Below is an example of using the Windows API function calls, which will imitate the QuickBasic SOUND statement: In the general section place the following: Public Declare Function OpenSound Lib "sound.drv" () As Integer Public Declare Function VoiceQueueSize Lib "sound.drv" (ByVal nVoice%, ByVal nBytes%) As IntegerPublic Declare Function SetVoiceSound Lib "sound.drv" (ByVal nSource%, ByVal Freq&, ByVal nDuration%) As IntegerPublic Declare Function StartSound Lib "sound.drv" () As Integer Public Declare Function CloseSound Lib "sound.drv" () As Integer Public Declare Function WaitSoundState Lib "sound.drv" (ByVal State%) As Integer NOTE: All Declare statements above each must be placed on one line. The SetVoiceSound takes two arguments. The first variable, Freq, is a two WORD parameter. The HIGH WORD will hold the actual frequency in hertz. The LOW WORD will hold the fractional frequency. The formula, X * 2 ^ 16, will shift the variable "X" into the HIGH WORD location. The second variable, Duration%, is the duration in clock ticks. There are 18.2 tick clicks per second on all Intel computers. The following simplistic example shows how you can place several frequencies and durations into the VoiceQueue before starting the sound by calling the StartSound function:
Private Sub Form_Click () Suc% = OpenSound() S% = SetVoiceSound(1, 100 * 2 ^ 16, 100) ' Frequency = 100 hz S% = SetVoiceSound(1, 90 * 2 ^ 16, 90) ' Frequency = 90 hz S% = SetVoiceSound(1, 80 * 2 ^ 16, 90) ' Frequency = 80 hz S% = StartSound() While (WaitSoundState(1) <> 0): Wend ' Wait for sound to play. Succ% = CloseSound() End SubThe following is another simple example, which creates a siren sound:
Freq = Freq * 2 ^ 16 ' Shift frequency to high byte. S% = SetVoiceSound(1, Freq, Duration%) S% = StartSound() While (WaitSoundState(1) <> 0): Wend End Sub
Private Sub Form_Click () Suc% = OpenSound() For j& = 440 To 1000 Step 5 Call Sound(j&, j& / 100) Next j& For j& = 1000 To 440 Step -5 Call Sound(j&, j& / 100) Next j& Succ% = CloseSound() End Sub REFERENCES"Programming Windows: the Microsoft Guide to Writing Applications for Windows 3," Charles Petzold, Microsoft Press, 1990 "Microsoft Windows Software Development Kit: Reference Volume 1," version 3.0 WINSDK.HLP file shipped with Microsoft Windows 3.0 Software Development Kit All of these references are available in the MSDN/VB Starter Kit provided with the Professional and Enterprise Editions of Visual Basic 4.0.
|
Additional reference words: 1.00 2.00 3.00 4.00 vb4win vb416
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |