FQ über normalen Lautsprecher

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

FQ über normalen Lautsprecher

Beitrag von Andreas_S »

Hier ein Code mit dem man eine Frequenz über den Lautsprecher abspielen kann:

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)
Ich hoffe den kann jemand verwenden.
Zuletzt geändert von Andreas_S am 19.04.2007 17:15, insgesamt 2-mal geändert.
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

Jetzt hab ich ihn in der Laberecke auf gemacht sch****!!!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

:lol: kein problem...

scotty, ein topic und zwei beiträge zum beamen...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

Danke für's vershieben!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Ne wave-datei in den Speicher poken ist ja mal was feines :allright:

Die Soundnummer 9999 solltest Du vielleicht auf 0 setzen, weiß zwar nicht,
ob es wie bei Gadgets ist, weil dann würde Speicher für 10000 Sounds
reserviert.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

Nagut, hab ich nur gemacht das man nicht plötzlich mit der gleigen ID da steht. Normalerweise nimmt man ja die ID 0, oder?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Dann nimmt man #PB_Any !
Dynamische IDs sollten immer in Include-Dateien, wiederverwendbaren
Proceduren, UserLibs usw. verwendet werden.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

Gute Idee, schon geändert.
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

Wenn man das apspielen lasst ist doch am Schluss so ein Knacks.

Wie bekomm ich den weg?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

PBprogger hat geschrieben:Gute Idee, schon geändert.
Aber nicht genau in der Hilfe nachgelesen :wink:

Code: Alles auswählen

; falsch
;   CatchSound(#PB_Any,*Mem)
;   PlaySound(#PB_Any)
;   SoundVolume(#PB_Any,100)
;    If Wait=1
;     Delay(ms)
;     FreeSound(#PB_Any)
;    EndIf 

; richtig
MySound.l = CatchSound(#PB_Any, *Mem)
PlaySound(MySound)
SoundVolume(MySound, 100)
If Wait = 1
  Delay(ms)
  FreeSound(MySound)
EndIf
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten