Sounds

Blitz3D Forums/Blitz3D Beginners Area/Sounds

Next step is to create a file called beep.decls in the userlibs folder and put this in it.

.lib "beep.dll"

Beep%(Frequency%, Duration%)


Now you should be able to run this example code. The main problem with using beep is that it uses a delay to make the beep, so you can't stop it pausing the engine. This is why I'll be doing something like Cygnus' retrosound demo for my sounds. :)

;Beep dll example - musical keyboard, by muk on 16/1/06

Graphics3D 640,480,16,2
SetBuffer BackBuffer()

camera=CreateCamera()
light=CreateLight()
RotateEntity light,90,0,0
cube=CreateCube()
PositionEntity camera,0,0,-5

;Main Loop
While Not KeyDown(1)

y#=y+0.4 : If y>359 Then y=0
RotateEntity cube,y,y,y

RenderWorld

If KeyDown(2) ;1 key - Bell tone
 Beep(660,50)
 Beep(525,50)
EndIf

If KeyDown(3) ;2 key - Siren wail
 If k2=0
  k2=1 ;init
  np=0
 EndIf
 np=np+1
 If np>179 Then np=0
 s=Sin(np)*500+500
 Beep(s,15)
Else
 k2=0
EndIf

If KeyDown(4) ;3 key - Pitch up
 If k3=0
  k3=1 ;init
  np=100
 EndIf
 np=np+2
 If np>1000 Then np=100 ;wrap
 Beep(np,5)
Else
 k3=0
EndIf

If KeyDown(5) ;4 key - Pitch down
 If k4=0
  k4=1 ;init
  np=1000
 EndIf
 np=np-2
 If np<100 Then np=1000 ;wrap
 Beep(np,5)
Else
 k4=0
EndIf

If KeyDown(6) ;5 key - Frere Gustav
 If k5=0
  k5=1 ;init
  ncou=0
  Restore FrereGustav
 EndIf
 If bf=0
  bf=1 ;note on
  ncou=ncou+1
  Read frequency : Read duration
  Beep(frequency,duration)
 EndIf
 If bf=1
  bf=0 ;note off
  Delay duration 
 EndIf
 If ncou>=36 Then k5=0 ;reset, last note
Else
 k5=0
EndIf

If KeyDown(7) ;6 key - Worms Theme
 If k6=0
  k6=1 ;init
  ncou=0
  Restore WormsTheme
 EndIf
 If bf=0
  bf=1 ;note on
  ncou=ncou+1
  Read frequency : Read duration
  Beep(frequency,duration)
 EndIf
 If bf=1
  bf=0 ;note off
  Delay duration 
 EndIf
 If ncou>=24 Then k6=0 ;reset, last note
Else
 k6=0
EndIf

dur=150 ;note duration

If KeyDown(17) ;W key - Db5
 If kw=0 Then kw=1 : Beep(280,dur)
Else : kw=0 : EndIf
If KeyDown(18) ;E key - Eb5
 If ke=0 Then ke=1 : Beep(315,dur)
Else : ke=0 : EndIf
If KeyDown(20) ;T key - F#5
 If kt=0 Then kt=1 : Beep(370,dur)
Else : kt=0 : EndIf
If KeyDown(21) ;Y key - G#5
 If ky=0 Then ky=1 : Beep(420,dur)
Else : ky=0 : EndIf
If KeyDown(22) ;U key - Bb5
 If ku=0 Then ku=1 : Beep(470,dur)
Else : ku=0 : EndIf
If KeyDown(24) ;O key - Db6
 If ko=0 Then ko=1 : Beep(560,dur)
Else : ko=0 : EndIf
If KeyDown(25) ;P key - Eb6
 If kp=0 Then kp=1 : Beep(630,dur)
Else : kp=0 : EndIf

If KeyDown(30) ;A key - C5
 If ka=0 Then ka=1 : Beep(265,dur)
Else : ka=0 : EndIf
If KeyDown(31) ;S key - D5
 If ks=0 Then ks=1 : Beep(295,dur)
Else : ks=0 : EndIf
If KeyDown(32) ;D key - E5
 If kd=0 Then kd=1 : Beep(330,dur)
Else : kd=0 : EndIf
If KeyDown(33) ;F key - F5
 If kf=0 Then kf=1 : Beep(350,dur)
Else : kf=0 : EndIf
If KeyDown(34) ;G key - G5
 If kg=0 Then kg=1 : Beep(395,dur)
Else : kg=0 : EndIf
If KeyDown(35) ;H key - A5
 If kh=0 Then kh=1 : Beep(445,dur)
Else : kh=0 : EndIf
If KeyDown(36) ;J key - B5
 If kj=0 Then kj=1 : Beep(495,dur)
Else : kj=0 : EndIf
If KeyDown(37) ;K key - C6
 If kk=0 Then kk=1 : Beep(530,dur)
Else : kk=0 : EndIf
If KeyDown(38) ;L key - D6
 If kl=0 Then kl=1 : Beep(595,dur)
Else : kl=0 : EndIf

If KeyDown(44) ;Z key - C4
 If kz=0 Then kz=1 : Beep(130,dur)
Else : kz=0 : EndIf
If KeyDown(45) ;X key - D4
 If kx=0 Then kx=1 : Beep(150,dur)
Else : kx=0 : EndIf
If KeyDown(46) ;C key - E4
 If kc=0 Then kc=1 : Beep(165,dur)
Else : kc=0 : EndIf
If KeyDown(47) ;V key - F4
 If kv=0 Then kv=1 : Beep(175,dur)
Else : kv=0 : EndIf
If KeyDown(48) ;B key - G4
 If kb=0 Then kb=1 : Beep(195,dur)
Else : kb=0 : EndIf
If KeyDown(49) ;N key - A4
 If kn=0 Then kn=1 : Beep(220,dur)
Else : kn=0 : EndIf
If KeyDown(50) ;M key - B4
 If km=0 Then km=1 : Beep(245,dur)
Else : km=0 : EndIf


 Text 16,16,"|1|2|3|4|5|6|"

 Text 16,48," |W|E| |T|Y|U| |O|P|"
 Text 16,64,"|A|S|D|F|G|H|J|K|L|"
 Text 16,80,"|c|d|e|f|g|a|b|c|d|"

 Text 16,112,"|Z|X|C|V|B|N|M|"
 Text 16,128,"|c|d|e|f|g|a|b|"

Flip
Wend
End

.FrereGustav ;36 notes
;C/1 D/1 Eb/0.5 D/0.5 C/1
Data 265,200,295,200,315,100,295,100,265,200
Data 265,200,295,200,315,100,295,100,265,200
;Eb/1 F/1 G/2
Data 315,200,350,200,395,400
Data 315,200,350,200,395,400
;G/0.75 G#/0.25 G/0.5 F/0.5 Eb/0.5 D/0.5 C/1
Data 395,150,420, 50,395,100,350,100,315,100,295,100,265,200
Data 395,150,420, 50,395,100,350,100,315,100,295,100,265,200
;C/1 B/1 C/2
Data 265,200,195,200,265,400
Data 265,200,195,200,265,400

.WormsTheme ;24 notes
;C/0.5 D/0.5 E/1 G/1 G/1
Data 265,100,295,100,330,200,395,200,395,200
;F/0.5 E/0.5 D/0.5 C/0.5 D/0.5 E/0.5 D/1.5
Data 350,100,330,100,295,100,265,100,295,100,330,100,295,300
;C/0.5 D/0.5 C/0.5 D/0.5 E/0.5 A/1.5
Data 265,100,295,100,265,100,295,100,330,100,220,300
;C/0.5 D/0.5 C/0.5 D/0.5 E/0.5 D/1
Data 265,100,295,100,265,100,295,100,330,100,295,200