FQ über normalen Lautsprecher
Verfasst: 19.04.2007 14:29
Hier ein Code mit dem man eine Frequenz über den Lautsprecher abspielen kann:
Ich hoffe den kann jemand verwenden.
Code: Alles auswählen
Procedure InitDirectBeep_()
InitSound()
EndProcedure
Procedure DirectBeep_(fq,ms,Samplerate,Bitrate,Channels,Wait=1)
avBytesPerSec=Channels*Bitrate/8*Samplerate
secs.d=ms/1000
*Mem=AllocateMemory(avBytesPerSec*secs+44)
PokeB(*Mem+0,Asc("R"))
PokeB(*Mem+1,Asc("I"))
PokeB(*Mem+2,Asc("F"))
PokeB(*Mem+3,Asc("F"))
PokeL(*Mem+4,avBytesPerSec*secs+44)
PokeB(*Mem+8,Asc("W"))
PokeB(*Mem+9,Asc("A"))
PokeB(*Mem+10,Asc("V"))
PokeB(*Mem+11,Asc("E"))
PokeB(*Mem+12,Asc("f"))
PokeB(*Mem+13,Asc("m"))
PokeB(*Mem+14,Asc("t"))
PokeB(*Mem+15,Asc(" "))
PokeL(*Mem+16,16)
PokeW(*Mem+20,1)
PokeW(*Mem+22,Channels)
PokeL(*Mem+24,Samplerate)
PokeL(*Mem+28,Channels*Bitrate/8*Samplerate)
PokeW(*Mem+32,Bitrate/8*Channels)
PokeW(*Mem+34,Bitrate)
PokeB(*Mem+36,Asc("d"))
PokeB(*Mem+37,Asc("a"))
PokeB(*Mem+38,Asc("t"))
PokeB(*Mem+39,Asc("a"))
PokeL(*Mem+40,avBytesPerSec*secs)
actsamplevalue.w
For acttime=1 To samplerate*secs
For actchannel=1 To channels
actsamplevalue=32767*Sin(2*#PI*fq*acttime/samplerate)
PokeW(*Mem+44+k,actsamplevalue)
k+2
Next
Next
Sound=CatchSound(#PB_Any,*Mem)
PlaySound(Sound)
SoundVolume(Sound,100)
If Wait=1
Delay(ms)
FreeSound(Sound)
EndIf
FreeMemory(*Mem)
EndProcedure
InitDirectBeep_()
DirectBeep_(1000,1000,44100,16,2)
Code: Alles auswählen