SOUND: Difference between revisions

From QB64 Phoenix Edition Wiki
Jump to navigation Jump to search
m (QBasic capitalisation)
No edit summary
Line 14: Line 14:
{{PageErrors}}
{{PageErrors}}
* 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]].
* '''Warning:''' SOUND may not work when the program is not in focus. Use SOUND 0, 0 at sound procedure start to set focus.  
* '''Warning:''' SOUND may not work when the program is not in focus. Use SOUND 0, 0 at sound procedure start to set focus.
* '''Note:''' SOUND 0, 0 will not stop previous '''QB64''' sounds like it did in QBasic!
* '''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.
* SOUND may have clicks or pauses between the sounds generated. [[PLAY]] can be used for musical sounds.
{{WhiteStart}}
{{WhiteStart}}
         '''                    The Seven Music Octaves '''  
         '''                    The Seven Music Octaves '''
     
 
         ''' Note    Frequency      Note    Frequency      Note      Frequency'''
         ''' Note    Frequency      Note    Frequency      Note      Frequency'''
       '''1'''* D#1 ...... 39          G3 ....... 196          A#5 ...... 932  
       '''1'''* D#1 ...... 39          G3 ....... 196          A#5 ...... 932
           E1 ....... 41          G#3 ...... 208          B5 ....... 988  
           E1 ....... 41          G#3 ...... 208          B5 ....... 988
           F1 ....... 44          A3 ....... 220      '''6'''* C6 ....... 1047  
           F1 ....... 44          A3 ....... 220      '''6'''* C6 ....... 1047
           F#1 ...... 46          A#3 ...... 233          C#6 ...... 1109  
           F#1 ...... 46          A#3 ...... 233          C#6 ...... 1109
           G1 ....... 49          B3 ....... 247          D6 ....... 1175  
           G1 ....... 49          B3 ....... 247          D6 ....... 1175
           G#1 ...... 51        '''4'''* C4 ....... 262          D#6 ...... 1245  
           G#1 ...... 51        '''4'''* C4 ....... 262          D#6 ...... 1245
           A1 ....... 55          C#4 ...... 277          E6 ....... 1318  
           A1 ....... 55          C#4 ...... 277          E6 ....... 1318
           A#1 ...... 58          D4 ....... 294          F6 ....... 1397  
           A#1 ...... 58          D4 ....... 294          F6 ....... 1397
           B1 ....... 62          D#4 ...... 311          F#6 ...... 1480  
           B1 ....... 62          D#4 ...... 311          F#6 ...... 1480
       '''2'''* C2 ....... 65          E4 ....... 330          G6 ....... 1568  
       '''2'''* C2 ....... 65          E4 ....... 330          G6 ....... 1568
           C#2 ...... 69          F4 ....... 349          G# ....... 1661  
           C#2 ...... 69          F4 ....... 349          G# ....... 1661
           D2 ....... 73          F#4 ...... 370          A6 ....... 1760  
           D2 ....... 73          F#4 ...... 370          A6 ....... 1760
           D#2 ...... 78          G4 ....... 392          A#6 ...... 1865  
           D#2 ...... 78          G4 ....... 392          A#6 ...... 1865
           E2 ....... 82          G#4 ...... 415          B6 ....... 1976  
           E2 ....... 82          G#4 ...... 415          B6 ....... 1976
           F2 ....... 87          A4 ....... 440      '''7'''* C7 ....... 2093  
           F2 ....... 87          A4 ....... 440      '''7'''* C7 ....... 2093
           F#2 ...... 92          A# ....... 466          C#7 ...... 2217  
           F#2 ...... 92          A# ....... 466          C#7 ...... 2217
           G2 ....... 98          B4 ....... 494          D7 ....... 2349  
           G2 ....... 98          B4 ....... 494          D7 ....... 2349
           G#2 ...... 104      '''5'''* C5 ....... 523          D#7 ...... 2489  
           G#2 ...... 104      '''5'''* C5 ....... 523          D#7 ...... 2489
           A2 ....... 110          C#5 ...... 554          E7 ....... 2637  
           A2 ....... 110          C#5 ...... 554          E7 ....... 2637
           A#2 ...... 117          D5 ....... 587          F7 ....... 2794  
           A#2 ...... 117          D5 ....... 587          F7 ....... 2794
           B2 ....... 123          D#5 ...... 622          F#7 ...... 2960  
           B2 ....... 123          D#5 ...... 622          F#7 ...... 2960
       '''3'''* C3 ....... 131          E5 ....... 659          G7 ....... 3136  
       '''3'''* C3 ....... 131          E5 ....... 659          G7 ....... 3136
           C#3 ...... 139          F5 ....... 698          G#7 ...... 3322  
           C#3 ...... 139          F5 ....... 698          G#7 ...... 3322
           D3 ....... 147          F#5 ...... 740          A7 ....... 3520  
           D3 ....... 147          F#5 ...... 740          A7 ....... 3520
           D#3 ...... 156          G5 ....... 784          A#7 ...... 3729  
           D#3 ...... 156          G5 ....... 784          A#7 ...... 3729
           E3 ....... 165          G#5 ...... 831          B7 ....... 3951  
           E3 ....... 165          G#5 ...... 831          B7 ....... 3951
           F3 ....... 175          A5 ....... 880      '''8'''* C8 ....... 4186  
           F3 ....... 175          A5 ....... 880      '''8'''* C8 ....... 4186
           F#3 ...... 185
           F#3 ...... 185
                                 '''# denotes sharp'''
                                 '''# denotes sharp'''
{{WhiteEnd}}
{{WhiteEnd}}
Line 54: Line 54:


''Example 1:'' Playing the seven octaves based on the base note DATA * 2 ^ (octave - 1).
''Example 1:'' Playing the seven octaves based on the base note DATA * 2 ^ (octave - 1).
{{CodeStart}} '' ''
{{CodeStart}}
notes$ = "C C#D D#E F F#G G#A A#B "
notes$ = "C C#D D#E F F#G G#A A#B "
{{Cl|COLOR}} 9:{{Cl|LOCATE}} 5, 20: PRINT "Select an octave (1 - 7) to play (8 quits):"
{{Cl|COLOR}} 9:{{Cl|LOCATE}} 5, 20: PRINT "Select an octave (1 - 7) to play (8 quits):"
{{Cl|DO}}
{{Cl|DO}}
   {{Cl|DO}}: octa$ = {{Cl|INKEY$}}
   {{Cl|DO}}: octa$ = {{Cl|INKEY$}}
     {{Cl|IF...THEN|IF}} octa$ <> "" {{Cl|THEN}}
     {{Cl|IF...THEN|IF}} octa$ <> "" {{Cl|THEN}}
       {{Cl|IF...THEN|IF}} {{Cl|ASC}}(octa$) > 48 {{Cl|AND (boolean)|AND}} {{Cl|ASC}}(octa$) < 58 {{Cl|THEN}} octave% = {{Cl|VAL}}(octa$): {{Cl|EXIT DO}}
       {{Cl|IF...THEN|IF}} {{Cl|ASC}}(octa$) > 48 {{Cl|AND (boolean)|AND}} {{Cl|ASC}}(octa$) < 58 {{Cl|THEN}} octave% = {{Cl|VAL}}(octa$): {{Cl|EXIT DO}}
     {{Cl|END IF}}
     {{Cl|END IF}}
   {{Cl|LOOP}} {{Cl|UNTIL}} octave% > 7  
   {{Cl|LOOP}} {{Cl|UNTIL}} octave% > 7
   {{Cl|IF...THEN|IF}} octave% > 0 {{Cl|AND (boolean)|AND}} octave% < 8 {{Cl|THEN}}
   {{Cl|IF...THEN|IF}} octave% > 0 {{Cl|AND (boolean)|AND}} octave% < 8 {{Cl|THEN}}
     {{Cl|LOCATE}} 15, 6: {{Cl|PRINT}} {{Cl|SPACE$}}(70)
     {{Cl|LOCATE}} 15, 6: {{Cl|PRINT}} {{Cl|SPACE$}}(70)
Line 79: Line 79:
     {{Cl|NEXT}}
     {{Cl|NEXT}}
   {{Cl|END IF}}
   {{Cl|END IF}}
{{Cl|LOOP}} {{Cl|UNTIL}} octave% > 7  
{{Cl|LOOP}} {{Cl|UNTIL}} octave% > 7
{{Cl|END}}
{{Cl|END}}


Octaves:
Octaves:
{{Cl|DATA}} 32.7,34.65,36.71,38.9,41.2,43.65,46.25,49,51.91,55,58.27,61.74 '' ''
{{Cl|DATA}} 32.7,34.65,36.71,38.9,41.2,43.65,46.25,49,51.91,55,58.27,61.74
{{CodeEnd}}
{{CodeEnd}}
{{small|Code adapted by Ted Weissgerber from code in [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 in [http://www.amazon.com/Running-MS-DOS-QBASIC-Michael-Halvorson/dp/1556153406 "Running MS-DOS QBasic"] by Microsoft Press}}




''Example 2:'' Playing a song called "Bonnie" with [[SOUND]] frequencies.  
''Example 2:'' Playing a song called "Bonnie" with [[SOUND]] frequencies.
{{CodeStart}} '' ''
{{CodeStart}}
{{Cl|SCREEN (statement)|SCREEN}} 13
{{Cl|SCREEN (statement)|SCREEN}} 13
{{Cl|_FULLSCREEN}}
{{Cl|_FULLSCREEN}}
Line 124: Line 124:
{{Cl|DATA}} 523,8,"O-",494,8,"ver ",523,8,"the ",587,40,"sea ",392,8,"My ",659,8,"Bon-",587,8,"nie"
{{Cl|DATA}} 523,8,"O-",494,8,"ver ",523,8,"the ",587,40,"sea ",392,8,"My ",659,8,"Bon-",587,8,"nie"
{{Cl|DATA}} 523,8," lies ",587,8,"O-",523,8,"ver ",440,8,"the ",392,8,"O-",330,32,"cean ",392,8,"Oh "
{{Cl|DATA}} 523,8," lies ",587,8,"O-",523,8,"ver ",440,8,"the ",392,8,"O-",330,32,"cean ",392,8,"Oh "
{{Cl|DATA}} 440,8,"bring ",587,8,"back ",523,8,"my ",494,8,"Bon-",440,8,"nie ",494,8,"to ",523,32,"me..!" '' ''
{{Cl|DATA}} 440,8,"bring ",587,8,"back ",523,8,"my ",494,8,"Bon-",440,8,"nie ",494,8,"to ",523,32,"me..!"
{{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}}




''See also:''  
''See also:''
* [[PLAY]], [[BEEP]]
* [[PLAY]], [[BEEP]]
* [[_SNDOPEN]] (play sound files)
* [[_SNDOPEN]] (play sound files)

Revision as of 02:45, 23 January 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


Description

  • Frequency is any literal or variable value from 37 to 32767, but 0 is allowed for delays.
  • Duration is any literal or variable number of TIMER ticks with a duration of 1/18th second. 18 = one second.
  • In QB64 the sound comes from the soundcard and the volume can be adjusted through the OS.


Template:PageErrors

  • Low frequency values between 0 and 37 will create an Illegal Function call error.
  • Warning: SOUND may not work when the program is not in focus. Use SOUND 0, 0 at sound procedure start to set focus.
  • 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.

Template:WhiteStart

                            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

Template:WhiteEnd


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
Code adapted by Ted Weissgerber from code in "Running MS-DOS QBasic" by Microsoft Press


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..!"
Code adapted by Ted Weissgerber from code "Running MS-DOS QBasic" by Microsoft Press


See also:



Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link