Пока ещё генератором назвать нельзя, но уже легче экспериментировать/манипулировать звуком. Может пригодится для создания мелодии какой-нибудь програмке в качестве завершения какого либо процесса или как многие любят добавить в окно "О программе".
Код:
; @AZJIO 18.05.2010
#include <GUIConstants.au3>
#NoTrayIcon
Global $text
GUICreate("Генератор мелодий",270,360) ; размер окна
$text = ''
GUICtrlCreateLabel ('Эталон', 5,8,60,20)
$kamerton=GUICtrlCreateCombo ("", 80,5,60,20)
GUICtrlSetData(-1,'330|349|370|392|415|440|466|494|523|554|587|622', '440')
$FrequencyOut=GUICtrlCreateLabel ('', 150,8,60,20)
GUICtrlCreateLabel ('Октава: ', 5,38,60,20)
$oktava0=4
$oktavaL=GUICtrlCreateLabel ($oktava0, 50,38,10,20)
For $i = 1 To 8
Assign('oktava' & $i, GUICtrlCreateButton ($i, $i*20+50,36,20,20))
Next
GUICtrlCreateLabel ('Длительность', 5,68,74,20)
$Duration=GUICtrlCreateCombo ("", 90,65,50,20)
GUICtrlSetData(-1,'1|2|3|4|5|6|7|8', '4')
GUICtrlCreateLabel ('/10 сек', 150,68,60,20)
$pause=GUICtrlCreateButton ("p", 245,133,20,20)
;Генерация кнопок
For $i = 1 To 12
Assign('nota' & $i, GUICtrlCreateButton ($i, $i*20-15,110,20,20))
Next
For $i = 1 To 12
Assign('addnota' & $i, GUICtrlCreateButton ($i, $i*20-15,133,20,20))
Next
$Edit1 = GUICtrlCreateEdit('', 5, 160, 260, 170)
$play=GUICtrlCreateButton ("Воспроизвести", 82,333,100,22)
$Clear=GUICtrlCreateButton ("Очистить", 192,333,60,22)
$Cancel=GUICtrlCreateButton ("Отмена", 10,333,60,22)
GUISetState ()
While 1
$msg = GUIGetMsg()
For $i = 1 To 12
If $msg = Eval('nota' & $i) Then _nota($i)
If $msg = Eval('addnota' & $i) Then _nota($i,1)
Next
For $i = 1 To 8
If $msg = Eval('oktava' & $i) Then
$oktava0=$i
GUICtrlSetData($oktavaL, $i)
EndIf
Next
Select
Case $msg = $Cancel
$text=StringRegExpReplace($text, '(?s)(^.*)\r\n(.*)\r\n$', '\1')&@CRLF
If @Extended=0 Then $text=''
GUICtrlSetData($Edit1, $text)
Case $msg = $Clear
$text=''
GUICtrlSetData($Edit1, '')
Case $msg = $play
$text=GUICtrlRead ($Edit1)
If $text<>'' Then
$file = FileOpen(@TempDir&'\Beepfile.au3',2)
FileWrite($file, $text)
FileClose($file)
$sAutoIt_Path = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir")
If @error Then ContinueLoop
Run('"'&$sAutoIt_Path&'\AutoIt3.exe" "'&@TempDir&'\Beepfile.au3"', '', @SW_HIDE)
EndIf
Case $msg = $pause
$Duration0=GUICtrlRead ($Duration)*100
$text&='Sleep('&$Duration0&')'&@CRLF
GUICtrlSetData($Edit1, $text)
Case $msg = -3
ExitLoop
EndSelect
WEnd
Func _nota($i,$add=0)
$Duration0=GUICtrlRead ($Duration)*100
$kamerton0=GUICtrlRead ($kamerton)*2^(1/6)/16
$Frequency=Ceiling ($kamerton0*2^$oktava0*2^($i/12))
GUICtrlSetData($FrequencyOut, 'f: '&$Frequency&' Гц')
Beep($Frequency, $Duration0)
If $add=1 Then
$text=GUICtrlRead ($Edit1)
$text&='Beep('&$Frequency&','&$Duration0&')'&@CRLF
GUICtrlSetData($Edit1, $text)
EndIf
EndFunc