SOUND: Difference between revisions
Jump to navigation
Jump to search
Code adapted by Ted Weissgerber from code in "Running MS-DOS QBasic" by Microsoft Press
Code adapted by Ted Weissgerber from code "Running MS-DOS QBasic" by Microsoft Press
Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link
No edit summary |
(Add documentation for {{Parameter|volume#}}][, {{Parameter|panning#}}][, {{Parameter|waveform&}}]) |
||
Line 1: | Line 1: | ||
[[SOUND]] sets frequency and duration of sounds from the internal PC speaker if the computer has one or the sound card in QB64. | |||
{{PageSyntax}} | {{PageSyntax}} | ||
: SOUND | : [[SOUND]] {{Parameter|frequency#}}, {{Parameter|duration#}}[, {{Parameter|volume#}}][, {{Parameter|panning#}}][, {{Parameter|waveform&}}] | ||
{{PageDescription}} | {{PageDescription}} | ||
* | * {{Parameter|frequency#}} is any literal or variable value from 37 to 32767, but 0 is allowed for delays. | ||
* | * Just like QuickBASIC 4.5 frequencies on or above 20000 produces silence. | ||
* | * {{Parameter|duration#}} is any literal or variable number of [[TIMER (function)|TIMER]] ticks with a duration of 1/18th second. 18 = one second. | ||
* Optional parameter {{Parameter|volume#}} should be between 0.0 (muted) to 1.0 (full volume). | |||
* Optional parameter {{Parameter|panning#}} should be between -1.0 (hard left) to 1.0 (hard right). 0.0 being center. | |||
* Optional parameter {{Parameter|waveform&}} can be one of the following: | |||
** '''1''' for square waveform | |||
** '''2''' for sawtooth waveform | |||
** '''3''' for triangle waveform (default) | |||
** '''4''' for sine waveform | |||
** '''5''' for white noise | |||
* More waveform types may be introduced in the future. | |||
* '''Note:''' The last volume, panning and waveform settings will apply to subsequent calls to [[SOUND]] (when used without the optional parameters) and [[PLAY]]. | |||
=== Errors === | === Errors === | ||
* Low ''frequency'' values between 0 and 37 will create an [[ERROR Codes|Illegal Function call error]]. | * Low ''frequency'' values between 0 and 37 will create an [[ERROR Codes|Illegal Function call error]]. | ||
* | * Out of range values for {{Parameter|volume#}}, {{Parameter|panning#}} and {{Parameter|waveform&}} will create an [[ERROR Codes|Illegal Function call error]]. | ||
* '''Note:''' SOUND 0, 0 will not stop previous '''QB64''' sounds like it did in QBasic! | * All audio related statements and function works even if the program is not in focus. However, depending on the operating system and environment, this may not always be the case. | ||
* SOUND may have clicks or pauses between the sounds generated. [[PLAY]] can be used for musical sounds. | * '''Note:''' [[SOUND]] 0, 0 will not stop previous '''QB64''' sounds like it did in QBasic! | ||
* [[SOUND]] may have clicks or pauses between the sounds generated. | |||
* [[PLAY]] can be used for musical sounds. | |||
{{FixedStart}} | {{FixedStart}} | ||
''' The Seven Music Octaves ''' | ''' The Seven Music Octaves ''' | ||
Line 50: | Line 63: | ||
'''# denotes sharp''' | '''# denotes sharp''' | ||
{{FixedEnd}} | {{FixedEnd}} | ||
{{PageAvailability}} | |||
<!-- QB64 = a version or none, QBPE = a version or all, Platforms = yes or no --> | |||
<gallery widths="48px" heights="48px" mode="nolines"> | |||
File:Qb64.png|'''all''' | |||
File:Qbpe.png|'''all''' | |||
File:Apix.png | |||
File:Win.png|'''yes''' | |||
File:Lnx.png|'''yes''' | |||
File:Osx.png|'''yes''' | |||
</gallery> | |||
<!-- additional availability notes go below here --> | |||
* Support for {{Parameter|volume#}}, {{Parameter|panning#}}, {{Parameter|waveform&}} was added in '''QB64-PE v.3.7.1'''. | |||
Line 127: | Line 154: | ||
{{CodeEnd}} | {{CodeEnd}} | ||
{{Small|Code adapted by Ted Weissgerber from code [http://www.amazon.com/Running-MS-DOS-QBASIC-Michael-Halvorson/dp/1556153406 "Running MS-DOS QBasic"] by Microsoft Press}} | {{Small|Code adapted by Ted Weissgerber from code [http://www.amazon.com/Running-MS-DOS-QBASIC-Michael-Halvorson/dp/1556153406 "Running MS-DOS QBasic"] by Microsoft Press}} | ||
''Example 3:'' Playing sound effects using the new QB64-PE [[SOUND]] extensions. | |||
{{CodeStart}} | |||
{{Cl|Option}} {{Cl|_Explicit}} | |||
{{Cl|Dim}} Q {{Cl|As}} {{Cl|String}} | |||
{{Text|<nowiki>' Sound effects menu</nowiki>|#919191}} | |||
{{Cl|Do}} | |||
{{Cl|Cls}} | |||
{{Cl|Print}} {{Text|<nowiki>"Sound effects"</nowiki>|#FFB100}}: {{Cl|Print}} | |||
{{Cl|Color}} {{Text|14|#F580B1}}, {{Text|0|#F580B1}}: {{Cl|Print}} {{Text|<nowiki>" B"</nowiki>|#FFB100}};: {{Cl|Color}} {{Text|7|#F580B1}}, {{Text|0|#F580B1}}: {{Cl|Print}} {{Text|<nowiki>"ouncing"</nowiki>|#FFB100}} | |||
{{Cl|Color}} {{Text|14|#F580B1}}, {{Text|0|#F580B1}}: {{Cl|Print}} {{Text|<nowiki>" F"</nowiki>|#FFB100}};: {{Cl|Color}} {{Text|7|#F580B1}}, {{Text|0|#F580B1}}: {{Cl|Print}} {{Text|<nowiki>"alling"</nowiki>|#FFB100}} | |||
{{Cl|Color}} {{Text|14|#F580B1}}, {{Text|0|#F580B1}}: {{Cl|Print}} {{Text|<nowiki>" K"</nowiki>|#FFB100}};: {{Cl|Color}} {{Text|7|#F580B1}}, {{Text|0|#F580B1}}: {{Cl|Print}} {{Text|<nowiki>"laxon"</nowiki>|#FFB100}} | |||
{{Cl|Color}} {{Text|14|#F580B1}}, {{Text|0|#F580B1}}: {{Cl|Print}} {{Text|<nowiki>" S"</nowiki>|#FFB100}};: {{Cl|Color}} {{Text|7|#F580B1}}, {{Text|0|#F580B1}}: {{Cl|Print}} {{Text|<nowiki>"iren"</nowiki>|#FFB100}} | |||
{{Cl|Color}} {{Text|14|#F580B1}}, {{Text|0|#F580B1}}: {{Cl|Print}} {{Text|<nowiki>" Q"</nowiki>|#FFB100}};: {{Cl|Color}} {{Text|7|#F580B1}}, {{Text|0|#F580B1}}: {{Cl|Print}} {{Text|<nowiki>"uit"</nowiki>|#FFB100}} | |||
{{Cl|Print}}: {{Cl|Print}} {{Text|<nowiki>"Select: "</nowiki>|#FFB100}}; | |||
{{Text|<nowiki>' Get valid key</nowiki>|#919191}} | |||
{{Cl|Do}} | |||
Q = {{Cl|UCase$}}({{Cl|Input$}}({{Text|1|#F580B1}})) | |||
{{Cl|DO...LOOP|Loop While}} {{Cl|InStr}}({{Text|<nowiki>"BFKSQ"</nowiki>|#FFB100}}, Q) = {{Text|0|#F580B1}} | |||
{{Text|<nowiki>' Take action based on key</nowiki>|#919191}} | |||
{{Cl|Cls}} | |||
{{Cl|Select Case}} Q | |||
{{Cl|Case}} {{Cl|Is}} = {{Text|<nowiki>"B"</nowiki>|#FFB100}} | |||
{{Cl|Print}} {{Text|<nowiki>"Bouncing . . . "</nowiki>|#FFB100}} | |||
{{Text|Bounce|#55FF55}} {{Text|32767|#F580B1}}, {{Text|246|#F580B1}} {{Text|<nowiki>' the 32767 will make the PSG generate silence (exactly like QB45 does)</nowiki>|#919191}} | |||
{{Cl|Case}} {{Cl|Is}} = {{Text|<nowiki>"F"</nowiki>|#FFB100}} | |||
{{Cl|Print}} {{Text|<nowiki>"Falling . . . "</nowiki>|#FFB100}} | |||
{{Text|Fall|#55FF55}} {{Text|2000|#F580B1}}, {{Text|550|#F580B1}}, {{Text|500|#F580B1}} | |||
{{Cl|Case}} {{Cl|Is}} = {{Text|<nowiki>"S"</nowiki>|#FFB100}} | |||
{{Cl|Print}} {{Text|<nowiki>"Wailing . . ."</nowiki>|#FFB100}} | |||
{{Cl|Print}} {{Text|<nowiki>" . . . press any key to end."</nowiki>|#FFB100}} | |||
{{Text|Siren|#55FF55}} {{Text|780|#F580B1}}, {{Text|650|#F580B1}} | |||
{{Cl|Case}} {{Cl|Is}} = {{Text|<nowiki>"K"</nowiki>|#FFB100}} | |||
{{Cl|Print}} {{Text|<nowiki>"Oscillating . . ."</nowiki>|#FFB100}} | |||
{{Cl|Print}} {{Text|<nowiki>" . . . press any key to end."</nowiki>|#FFB100}} | |||
{{Text|Klaxon|#55FF55}} {{Text|987|#F580B1}}, {{Text|329|#F580B1}} | |||
{{Cl|Case}} {{Cl|Else}} | |||
{{Cl|End Select}} | |||
{{Cl|DO...LOOP|Loop Until}} Q = {{Text|<nowiki>"Q"</nowiki>|#FFB100}} | |||
{{Cl|End}} | |||
{{Text|<nowiki>' Loop two sounds down at decreasing time intervals</nowiki>|#919191}} | |||
{{Cl|Sub}} {{Text|Bounce|#55FF55}} (Hi {{Cl|As}} {{Cl|Long}}, Low {{Cl|As}} {{Cl|Long}}) | |||
{{Cl|Dim}} count {{Cl|As}} {{Cl|Long}} | |||
{{Cl|Play}} {{Text|<nowiki>"Q0"</nowiki>|#FFB100}} {{Text|<nowiki>' turn off volume ramping</nowiki>|#919191}} | |||
{{Cl|For}} count = {{Text|60|#F580B1}} {{Cl|To}} {{Text|1|#F580B1}} {{Cl|Step}} {{Text|-2|#F580B1}} | |||
{{Cl|Sound}} Low - count / {{Text|2|#F580B1}}, count / {{Text|20|#F580B1}}, {{Text|1.0!|#F580B1}}, {{Text|0.0!|#F580B1}}, {{Text|1|#F580B1}} | |||
{{Cl|Sound}} Hi, count / {{Text|15|#F580B1}} | |||
{{Cl|Next}} | |||
{{Cl|End Sub}} | |||
{{Text|<nowiki>' Loop down from a high sound to a low sound</nowiki>|#919191}} | |||
{{Cl|Sub}} {{Text|Fall|#55FF55}} (Hi {{Cl|As}} {{Cl|Long}}, Low {{Cl|As}} {{Cl|Long}}, Del {{Cl|As}} {{Cl|Long}}) | |||
{{Cl|Dim}} vol {{Cl|As}} {{Cl|Single}} | |||
{{Cl|Dim}} count {{Cl|As}} {{Cl|Long}} | |||
{{Cl|Play}} {{Text|<nowiki>"Q3"</nowiki>|#FFB100}} {{Text|<nowiki>' enable 3ms volume ramping</nowiki>|#919191}} | |||
{{Cl|For}} count = Hi {{Cl|To}} Low {{Cl|Step}} {{Text|-10|#F580B1}} | |||
vol = {{Text|1.0!|#F580B1}} - vol | |||
{{Cl|Sound}} count, Del / count, vol, {{Text|0.0!|#F580B1}}, {{Text|3|#F580B1}} {{Text|<nowiki>' triangle wave</nowiki>|#919191}} | |||
{{Cl|Next}} | |||
{{Cl|End Sub}} | |||
{{Text|<nowiki>' Alternate two sounds until a key is pressed</nowiki>|#919191}} | |||
{{Cl|Sub}} {{Text|Klaxon|#55FF55}} (Hi {{Cl|As}} {{Cl|Long}}, Low {{Cl|As}} {{Cl|Long}}) | |||
{{Cl|Play}} {{Text|<nowiki>"Q5"</nowiki>|#FFB100}} {{Text|<nowiki>' enable 5ms volume ramping</nowiki>|#919191}} | |||
{{Cl|DO...LOOP|Do While}} {{Cl|InKey$}} = {{Text|<nowiki>""</nowiki>|#FFB100}} | |||
{{Cl|Sound}} Hi, {{Text|5!|#F580B1}}, {{Text|1.0!|#F580B1}}, {{Text|-1.0!|#F580B1}}, {{Text|4|#F580B1}} | |||
{{Cl|Sound}} Low, {{Text|5!|#F580B1}}, {{Text|1.0!|#F580B1}}, {{Text|1.0!|#F580B1}}, {{Text|4|#F580B1}} | |||
{{Cl|Loop}} | |||
{{Cl|End Sub}} | |||
{{Text|<nowiki>' Loop a sound from low to high to low</nowiki>|#919191}} | |||
{{Cl|Sub}} {{Text|Siren|#55FF55}} (Hi {{Cl|As}} {{Cl|Long}}, Range {{Cl|As}} {{Cl|Long}}) | |||
{{Cl|Dim}} count {{Cl|As}} {{Cl|Long}}, pan {{Cl|As}} {{Cl|Single}} | |||
{{Cl|Dim}} dir {{Cl|As}} {{Cl|Single}}: dir = {{Text|0.01!|#F580B1}} | |||
{{Cl|Play}} {{Text|<nowiki>"Q0"</nowiki>|#FFB100}} {{Text|<nowiki>' disable volume ramping</nowiki>|#919191}} | |||
{{Cl|DO...LOOP|Do While}} {{Cl|InKey$}} = {{Text|<nowiki>""</nowiki>|#FFB100}} | |||
{{Cl|For}} count = Range {{Cl|To}} -Range {{Cl|Step}} {{Text|-4|#F580B1}} | |||
pan = pan + dir | |||
{{Cl|If}} pan <= {{Text|-1.0!|#F580B1}} {{Cl|Then}} dir = {{Text|0.01!|#F580B1}}: pan = {{Text|-1.0!|#F580B1}} | |||
{{Cl|If}} pan >= {{Text|1.0!|#F580B1}} {{Cl|Then}} dir = {{Text|-0.01!|#F580B1}}: pan = {{Text|1.0!|#F580B1}} | |||
{{Cl|Sound}} Hi - {{Cl|Abs}}(count), {{Text|0.3!|#F580B1}}, {{Text|1.0!|#F580B1}}, pan, {{Text|4|#F580B1}} {{Text|<nowiki>' sine wave</nowiki>|#919191}} | |||
count = count - {{Text|2|#F580B1}} / Range | |||
{{Cl|Next}} | |||
{{Cl|Loop}} | |||
{{Cl|End Sub}} | |||
{{CodeEnd}} | |||
Revision as of 07:18, 13 June 2023
SOUND sets frequency and duration of sounds from the internal PC speaker if the computer has one or the sound card in QB64.
Syntax
- SOUND frequency#, duration#[, volume#][, panning#][, waveform&]
Description
- frequency# is any literal or variable value from 37 to 32767, but 0 is allowed for delays.
- Just like QuickBASIC 4.5 frequencies on or above 20000 produces silence.
- duration# is any literal or variable number of TIMER ticks with a duration of 1/18th second. 18 = one second.
- Optional parameter volume# should be between 0.0 (muted) to 1.0 (full volume).
- Optional parameter panning# should be between -1.0 (hard left) to 1.0 (hard right). 0.0 being center.
- Optional parameter waveform& can be one of the following:
- 1 for square waveform
- 2 for sawtooth waveform
- 3 for triangle waveform (default)
- 4 for sine waveform
- 5 for white noise
- More waveform types may be introduced in the future.
- Note: The last volume, panning and waveform settings will apply to subsequent calls to SOUND (when used without the optional parameters) and PLAY.
Errors
- Low frequency values between 0 and 37 will create an Illegal Function call error.
- Out of range values for volume#, panning# and waveform& will create an Illegal Function call error.
- All audio related statements and function works even if the program is not in focus. However, depending on the operating system and environment, this may not always be the case.
- Note: SOUND 0, 0 will not stop previous QB64 sounds like it did in QBasic!
- SOUND may have clicks or pauses between the sounds generated.
- PLAY can be used for musical sounds.
The Seven Music Octaves Note Frequency Note Frequency Note Frequency 1* D#1 ...... 39 G3 ....... 196 A#5 ...... 932 E1 ....... 41 G#3 ...... 208 B5 ....... 988 F1 ....... 44 A3 ....... 220 6* C6 ....... 1047 F#1 ...... 46 A#3 ...... 233 C#6 ...... 1109 G1 ....... 49 B3 ....... 247 D6 ....... 1175 G#1 ...... 51 4* C4 ....... 262 D#6 ...... 1245 A1 ....... 55 C#4 ...... 277 E6 ....... 1318 A#1 ...... 58 D4 ....... 294 F6 ....... 1397 B1 ....... 62 D#4 ...... 311 F#6 ...... 1480 2* C2 ....... 65 E4 ....... 330 G6 ....... 1568 C#2 ...... 69 F4 ....... 349 G# ....... 1661 D2 ....... 73 F#4 ...... 370 A6 ....... 1760 D#2 ...... 78 G4 ....... 392 A#6 ...... 1865 E2 ....... 82 G#4 ...... 415 B6 ....... 1976 F2 ....... 87 A4 ....... 440 7* C7 ....... 2093 F#2 ...... 92 A# ....... 466 C#7 ...... 2217 G2 ....... 98 B4 ....... 494 D7 ....... 2349 G#2 ...... 104 5* C5 ....... 523 D#7 ...... 2489 A2 ....... 110 C#5 ...... 554 E7 ....... 2637 A#2 ...... 117 D5 ....... 587 F7 ....... 2794 B2 ....... 123 D#5 ...... 622 F#7 ...... 2960 3* C3 ....... 131 E5 ....... 659 G7 ....... 3136 C#3 ...... 139 F5 ....... 698 G#7 ...... 3322 D3 ....... 147 F#5 ...... 740 A7 ....... 3520 D#3 ...... 156 G5 ....... 784 A#7 ...... 3729 E3 ....... 165 G#5 ...... 831 B7 ....... 3951 F3 ....... 175 A5 ....... 880 8* C8 ....... 4186 F#3 ...... 185 # denotes sharp |
Availability
- Support for volume#, panning#, waveform& was added in QB64-PE v.3.7.1.
Examples
Example 1: Playing the seven octaves based on the base note DATA * 2 ^ (octave - 1).
notes$ = "C C#D D#E F F#G G#A A#B " COLOR 9:LOCATE 5, 20: PRINT "Select an octave (1 - 7) to play (8 quits):" DO DO: octa$ = INKEY$ IF octa$ <> "" THEN IF ASC(octa$) > 48 AND ASC(octa$) < 58 THEN octave% = VAL(octa$): EXIT DO END IF LOOP UNTIL octave% > 7 IF octave% > 0 AND octave% < 8 THEN LOCATE 15, 6: PRINT SPACE$(70) LOCATE 16, 6: PRINT SPACE$(70) COLOR 14: LOCATE 15, 6: PRINT "Octave"; octave%; ":"; RESTORE Octaves FOR i = 1 TO 12 READ note! snd% = CINT(note! * (2 ^ (octave% - 1))) 'calculate note frequency COLOR 14: PRINT STR$(snd%); c0l = POS(0) COLOR 11: LOCATE 16, c0l - 2: PRINT MID$(notes$, 1 + (2 * (i - 1)), 2) LOCATE 15, c0l IF snd% > 36 THEN SOUND snd%, 12 'error if sound value is < 36 _DELAY .8 NEXT END IF LOOP UNTIL octave% > 7 END Octaves: DATA 32.7,34.65,36.71,38.9,41.2,43.65,46.25,49,51.91,55,58.27,61.74 |
Example 2: Playing a song called "Bonnie" with SOUND frequencies.
SCREEN 13 _FULLSCREEN OUT &H3C8, 0: OUT &H3C9, 0: OUT &H3C9, 0: OUT &H3C9, 20 COLOR 1 FOR i% = 1 TO 21 LOCATE 2 + i%, 2: PRINT CHR$(178) LOCATE 2 + i%, 39: PRINT CHR$(178) NEXT i% FOR i% = 2 TO 39 LOCATE 2, i%: PRINT CHR$(223) LOCATE 23, i%: PRINT CHR$(220) NEXT i% COLOR 9 LOCATE 3, 16: PRINT CHR$(34); "MY BONNIE"; CHR$(34) SLEEP 3 FOR i% = 1 TO 34 SELECT CASE i% CASE 1: LOCATE 5, 5 CASE 10: LOCATE 10, 5 CASE 18: LOCATE 15, 5 CASE 27: LOCATE 20, 5 END SELECT READ note%, duration%, word$ SOUND note%, duration%: PRINT word$; NEXT i% SLEEP 2 LOCATE 23, 16: PRINT "Thank You!" SLEEP 4 SYSTEM DATA 392,8,"My ",659,8,"Bon-",587,8,"nie ",523,8,"lies ",587,8,"O-",523,8,"Ver ",440,8,"the " DATA 392,8,"O-",330,32,"cean ",392,8,"My ",659,8,"Bon-",587,8,"nie ",523,8,"lies " DATA 523,8,"O-",494,8,"ver ",523,8,"the ",587,40,"sea ",392,8,"My ",659,8,"Bon-",587,8,"nie" DATA 523,8," lies ",587,8,"O-",523,8,"ver ",440,8,"the ",392,8,"O-",330,32,"cean ",392,8,"Oh " DATA 440,8,"bring ",587,8,"back ",523,8,"my ",494,8,"Bon-",440,8,"nie ",494,8,"to ",523,32,"me..!" |
Example 3: Playing sound effects using the new QB64-PE SOUND extensions.
Option _Explicit Dim Q As String ' Sound effects menu Do Cls Print "Sound effects": Print Color 14, 0: Print " B";: Color 7, 0: Print "ouncing" Color 14, 0: Print " F";: Color 7, 0: Print "alling" Color 14, 0: Print " K";: Color 7, 0: Print "laxon" Color 14, 0: Print " S";: Color 7, 0: Print "iren" Color 14, 0: Print " Q";: Color 7, 0: Print "uit" Print: Print "Select: "; ' Get valid key Do Q = UCase$(Input$(1)) Loop While InStr("BFKSQ", Q) = 0 ' Take action based on key Cls Select Case Q Case Is = "B" Print "Bouncing . . . " Bounce 32767, 246 ' the 32767 will make the PSG generate silence (exactly like QB45 does) Case Is = "F" Print "Falling . . . " Fall 2000, 550, 500 Case Is = "S" Print "Wailing . . ." Print " . . . press any key to end." Siren 780, 650 Case Is = "K" Print "Oscillating . . ." Print " . . . press any key to end." Klaxon 987, 329 Case Else End Select Loop Until Q = "Q" End ' Loop two sounds down at decreasing time intervals Sub Bounce (Hi As Long, Low As Long) Dim count As Long Play "Q0" ' turn off volume ramping For count = 60 To 1 Step -2 Sound Low - count / 2, count / 20, 1.0!, 0.0!, 1 Sound Hi, count / 15 Next End Sub ' Loop down from a high sound to a low sound Sub Fall (Hi As Long, Low As Long, Del As Long) Dim vol As Single Dim count As Long Play "Q3" ' enable 3ms volume ramping For count = Hi To Low Step -10 vol = 1.0! - vol Sound count, Del / count, vol, 0.0!, 3 ' triangle wave Next End Sub ' Alternate two sounds until a key is pressed Sub Klaxon (Hi As Long, Low As Long) Play "Q5" ' enable 5ms volume ramping Do While InKey$ = "" Sound Hi, 5!, 1.0!, -1.0!, 4 Sound Low, 5!, 1.0!, 1.0!, 4 Loop End Sub ' Loop a sound from low to high to low Sub Siren (Hi As Long, Range As Long) Dim count As Long, pan As Single Dim dir As Single: dir = 0.01! Play "Q0" ' disable volume ramping Do While InKey$ = "" For count = Range To -Range Step -4 pan = pan + dir If pan <= -1.0! Then dir = 0.01!: pan = -1.0! If pan >= 1.0! Then dir = -0.01!: pan = 1.0! Sound Hi - Abs(count), 0.3!, 1.0!, pan, 4 ' sine wave count = count - 2 / Range Next Loop End Sub |
See also