Seite 1 von 1

Ton über lautsprecher erzeugen

Verfasst: 19.04.2009 18:41
von kob
Ich habe ein problem . Ich möchte ein ton wie mit beep_() erzeugen ,
nur das der über die soundkarte ausgegeben werden soll . gibt es eine einfache (und ich meine einfach !!!!!) möglichkeit die zu bewerkstelligen .

das problem ist nähmlich volgendes :
letzte nacht habe ich mir aus einer alten web-cam , ein paar bretter
und nägln eine art tisch gebaut über der die cam hängt . nun lege ich
ein mit 2 schwarzen kreisen bemalten holz block auf den tisch und drehe
ihn nach beliben . mein programm sucht nun diese punkte und erechnet einen winkel . dieser winkel soll nun als ton ausgegeben werden .
das leuft schon ganz gut , aber ich will das halt über die boxen !!!!!!!!!!! :freak:

hilfe !!!!

THX

Verfasst: 19.04.2009 19:50
von KeyKon
lol, willst du so einen Synth nachbauen der kürzlich bei TV-Total vorgeführt wurde^^?
Es geht auf jeden Fall, irgendwo gabs da mal einen Code der das ganze wie Beep gemacht hat, du kannst natürlich auch ein Wav mit der Frequenz von 1000Hz endlos abspielen und über SoundFrequenzy() die Frequenz dementsprechend verändern...

Verfasst: 19.04.2009 20:05
von Kaeru Gaman
es wurden schon öfter codes gepostet, um WAVs on the fly zu erzeugen...

Verfasst: 20.04.2009 12:09
von Moskito
Sound ? Da kann ich auch was zu beisteuern.

InitSound()

winkelfrequenz= 45*100
grundfrequenz=44100

LoadSound(1,"test.wav")

SoundFrequency(1, winkelfrequenz+grundfrequenz)
PlaySound (1)

;delay (1000)
;End

Nimm ein Sample das dir passend erscheint und combiniere deine
Frequenz (hier 45 Grad) mit der Grundfrequenz. Feddisch.

bis denne

Thomas

Danke

Verfasst: 27.04.2009 13:58
von kob
Danke für die antworten .
werde mich mal daheim an den rechner setzen , und ein paar
sachen nachproggen. hoffe , die funzen auch .
Und NEIN , ich mache nicht das teil bei TV-Total nach , ich habe
ma so ein teil im net gesehen und mache greade mit web-cam rum
habe gadacht "mach'st ma sowas".
THX

Verfasst: 27.04.2009 14:29
von ts-soft
Hier mal ein CodeBeispiel von GPI:

Code: Alles auswählen

EnableExplicit

Structure wave_
  wFormatTag.w
  nChannels.w
  nSamplesPerSec.l
  nAvgBytesPerSec.l
  nBlockAlign.w
  wBitsPerSample.w
  cbSize.w
EndStructure

Procedure CreateSound(nr, Frequency, Duration, SampleRate)

  Protected SoundValue.b
  Protected w.f; // omega ( 2 * pi * frequency)
  Protected wave_FormatEx.wave_
  Protected DataCount.l, RiffCount.l, start.l, MS.l, TempInt.l, i.l

  wave_FormatEx\wFormatTag=#WAVE_FORMAT_PCM;
  wave_FormatEx\nChannels =$0001;mono
  wave_FormatEx\nSamplesPerSec = SampleRate;
  wave_FormatEx\wBitsPerSample = $0008;
  wave_FormatEx\nBlockAlign = (wave_FormatEx\nChannels * wave_FormatEx\wBitsPerSample) /8
  wave_FormatEx\nAvgBytesPerSec = wave_FormatEx\nSamplesPerSec * wave_FormatEx\nBlockAlign;
  wave_FormatEx\cbSize = 0;

  DataCount = (Duration * SampleRate)/1000; // sound data
  RiffCount = 4+4 +4+ SizeOf(wave_)+4 +4+ DataCount

  start=GlobalAlloc_(#GMEM_FIXED|#GMEM_ZEROINIT,RiffCount+100)
  MS=start

  PokeS(MS,"RIFF"):MS+4   ;'RIFF'
  PokeL(MS,RiffCount):MS+4 ;file Data size
  PokeS(MS,"wave"):MS+4   ;'wave_'
  PokeS(MS,"fmt "):MS+4    ;'fmt '
  TempInt = SizeOf(wave_);
  PokeL(MS,TempInt):MS+4   ;Twave_Format data size

  PokeW(MS,wave_FormatEx\wFormatTag):MS+2; wave_FormatEx record
  PokeW(MS,wave_FormatEx\nChannels):MS+2
  PokeL(MS,wave_FormatEx\nSamplesPerSec):MS+4
  PokeL(MS,wave_FormatEx\nAvgBytesPerSec):MS+4
  PokeW(MS,wave_FormatEx\nBlockAlign):MS+2
  PokeW(MS,wave_FormatEx\wBitsPerSample):MS+2
  PokeW(MS,wave_FormatEx\cbSize):MS+2

  PokeS(MS,"data"):MS+4   ;'data'
  PokeL(MS,DataCount):MS+4 ;sound data size

  ; {Calculate And write out the tone signal}  // now the Data values

  w = 2 * 3.1415 * Frequency;  omega
  For i = 0 To DataCount - 1
   SoundValue = 127 + 127 * Sin(i * w / SampleRate);
   PokeB(MS,SoundValue):MS+1;
  Next
  CatchSound(Nr,start)
  GlobalFree_(start)
EndProcedure

InitSound()
CreateSound(1, 1000, 1000, 44000)
PlaySound(1)
MessageRequester("","")

thx

Verfasst: 08.05.2009 11:10
von kob
danke funzt gut , sorry das ich nicht
immer sofort schreibe , ich habe nicht immer
inet .
aber jetzt mal was anderes kann es sein , das
wenn man eine Camera hat dan keine sprites mehr
anzeigen kann ? zumindest in 4.3

Code: Alles auswählen

InitEngine3D()
InitSprite()
InitMouse()
InitKeyboard()

OpenScreen(640,480,16,"Test")
LoadSprite(1,"Test.bmp")

CreateCamera(1,0,0,100,100)

DisplaySprite(1,CameraProjectionX(1,100,100,100),CameraProjectionY(1,100,100,100))
FlipBuffers()

Delay(10000)
er meint bei mir immer das es die sprite nicht gibt , das stimmt aber net !!! habe extra eine aus dem example ortner kopiert help

Verfasst: 08.05.2009 13:09
von Rokur
Wenn du Sprites aus Dateien lädst, dann solltest du immer den Rückgabewert prüfen, ob das überhaupt erfolgreich war.

Ob ein Sprite richtig initialisiert ist kannst du ausserdem mit IsSprite() testen.

Gib mal beim Laden der Datei den kompletten Pfad mit an, wenn das klappt, dann sucht dein Programm im falschen Verzeichnis.

Verfasst: 08.05.2009 13:39
von Kaeru Gaman
@kob

mach ruhig nen neuen thread auf für ne komplett andere frage....

Rokurs anmerkung ist berechtigt, immer die Rückgabewerte prüfen.

thx

Verfasst: 09.05.2009 14:38
von kob
danke für eure hilfe werde einen neuen erstellen .
habe schon mit debug den rüggabewert überprüft , er ist null
das lustige is , das wen ich die 3d befehle auskomentiere
alles normal funktioniert !!!

wir sehen un im nächsten thread