Hi Leuz,
ich hab mich mal eine Weile mit Ton Generierung beschäftigt und mit dem Problem das die Beep() einfach nicht zum Melodien ausgeben gemacht ist. Daraus entstanden ist eine einfache UDF mit der BASS DLL. Diese ermöglicht das die Melodie auch in eine WAV gespeichert werden kann. Zum Ton generieren nutze ich Assembler.
Ein Dank geht an:
eukalyptus für seine BASS UDF
Ward für die inline FASM UDF
Hier noch ein kurzes Beispiel und noch viel Spaß damit :). Feedback ist natürlich immer erwünscht
Beispiel (Tonleiter)
#AutoIt3Wrapper_UseX64=n
#include "MakeSound.au3"
#include <Sound.au3>
;by Sprenger120
_MakeSound_Startup() ;startup MakeSound
[/autoit] [autoit][/autoit] [autoit]$aWAV = _MakeSound_CreateWAV(@ScriptDir & "\record.wav",10000) ;Creats a MakeSound WAV
[/autoit] [autoit][/autoit] [autoit]For $iFreq = 50 To 10000 Step 50
_MakeSound_InsertSound($aWAV,$iFreq, 200) ;Insert Tones
Next
_MakeSound_Write($aWAV) ;Save it to a file
_MakeSound_Shutdown() ; shutdown MakeSound
;play sound
$hSound = _SoundOpen(@ScriptDir & "\record.wav")
_SoundPlay($hSound)
While Sleep(100)
if _SoundPos($hSound,2) >= _SoundLength($hSound,2) Then ExitLoop
WEnd
_SoundClose($hSound)
ToDo
-BASS durch direktes WAV schreiben ersetzen
-übergänge zwischen den Tönen berechen (letzte Schwingung abtrennen)
-Stereo Generierung ermöglichen
-Sägezahn Töne
-Rechteck Töne
-Erst bei Null anfangen zu schreiben
-Pi als Double in die Berechnung mit einbeziehen