====== Sound Bytes ======
This application note will demonstrate a few examples that generate sound
with the Cubloc. Sound can be generated using the Cubloc's I/O port or
PWM channel. With a PWM channel, sounds of varying frequency can be
generated.
{{ :cubloc:sound_bytes:soundbytes.png?nolink |}}
Const Device = CB220
Dim PLAYSTR As String
Low 5
Freqout 0,5236 'Create a sound with frequency of 440Hz
Delay 500 'Delay
Pwmoff 0 'Stop Sound by turning off PWM
The example above shows the CB220's PWM channel 0 of CB220 being used
with the FreqOut command to produce a sound.
With commands like FreqOut and Delay, simple sounds can be created.
Const Device = CB220
Low 5
FreqOut 0,4403
Delay 200
FreqOut 0,3703
Delay 200
FreqOut 0,3114
Delay 200
FreqOut 0,2202
Delay 200
PwmOff 0
By changing the frequencies, a simple program can be made that plays
musical notes.
^ Octave 4 ^^^^^^^ Octave 5 ^^^^^^^
|A |B |C |D |E |F |G |A |B |C |D |E |F |G|
|A |B |C |D |E |F |G |H |I |J |K |L |M |N|
To express one note, 2 characters are used: the first character is for the
frequency of the note and second character is for the length of the note.
Const Device = CB220
Dim PLAYSTR As String
Low 5
PLAYSTR = "G5E3E3G3E3C5"
PLAY 0,PLAYSTR
Do
Loop
End
Sub PLAY(CH As Byte,NOTE As String)
Dim PL As Byte
Dim CHAR As Byte
Const Integer PLAYTABLE = (5236,4665,4403,3923,3495,3299,2939,2618,2333,2202,1961,1747,1649,1469,0)
For PL=1 To Len(NOTE) Step 2
CHAR = Asc(Mid(NOTE,PL,1)) - &H41
FreqOut CH,PLAYTABLE(CHAR)
CHAR = Asc(Mid(NOTE,PL+1,1)) - &H30
Delay CHAR*100
Next
PwmOff CH
End Sub
When using the PWM port for other purposes, the FreqOut command cannot
be used. To get around this limitation, any regular I/O port can be used to
create sound.
The following example shows how to make an alert sound with I/O port P4.
This program uses the Reverse and UDelay commands to alternate the I/O
port between logic-high and logic-low
Const Device = CB220
Low 4
Do
SOUND 4,110,60
SOUND 4,80,60
SOUND 4,40,160
Loop
End
Sub SOUND(PN As Byte,FR As Byte,LN As Byte)
Dim SI As Byte,SJ As Byte
For SJ = 0 To LN
Reverse PN
UDelay FR
Reverse PN
UDelay FR
Next
End Sub