Definieren

  • Hallo,
    ich möchte ein Lied schreiben, dass nur mit Beep geschrieben ist (also nicht durch die Lautsprecher abgespielt wird). Ich würde gerne ein paar Töne vorher definieren, damit ich nicht immer die Frequenz eingeben muss.
    Beispiel: Ich habe

    [autoit]

    Beep(440, 400)

    [/autoit]


    aber ich möchte schreiben

    [autoit]

    Beep("a", 400)

    [/autoit]


    Das a müsste ich dann vorher als 440 Hertz definieren, dementsprechend auch z.B. das c als 261,63 Hertz, wie geht das?

  • So etwas aufwändiges möchte ich ja gar nicht. Wie kann ich denn die Töne definieren?

  • du kannst ja das script speichern dann

    [autoit]

    #include <_beepton.au3>

    [/autoit]


    und dann einfach

    [autoit]

    _beepton("c",100)

    [/autoit]


    dann sind alle schon definiert

  • Hier, schau dir mal mein Skript an:

    https://autoit.de/index.php?page=Thread&amp;threadID=16665

    Das ist ein Programm, mitdem du Melodien
    machen kannst. ;)
    Das wichtigste für dich, ist wahrscheinlich das:

    [autoit]

    $c_ton = 264

    [/autoit][autoit][/autoit][autoit]

    $c = "Beep($c_ton,60/$zeit*1000)"
    $cis = "Beep($c_ton*25/24,60/$zeit*1000)"
    $d = "Beep($c_ton*9/8,60/$zeit*1000)"
    $es = "Beep($c_ton*6/5,60/$zeit*1000)"
    $e = "Beep($c_ton*5/4,60/$zeit*1000)"
    $f = "Beep($c_ton*4/3,60/$zeit*1000)"
    $fis = "Beep($c_ton*25/18,60/$zeit*1000)"
    $g = "Beep($c_ton*3/2,60/$zeit*1000)"
    $as = "Beep($c_ton*8/5,60/$zeit*1000)"
    $a = "Beep($c_ton*5/3,60/$zeit*1000)"
    $b = "Beep($c_ton*9/5,60/$zeit*1000)"
    $h = "Beep($c_ton*15/8,60/$zeit*1000)"

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]


    MfG
    qixx

  • wenn es wirklich einfach gehalten werden soll und dennoch mit einer Look-Up-Tabelle gearbeitet werden soll dann schlage ich eher ein Dictionary vor anstatt über Variablennamen zu arbeiten:

    Spoiler anzeigen
    [autoit]

    $oToene = ObjCreate('Scripting.Dictionary')

    [/autoit] [autoit][/autoit] [autoit]

    $oToene.Add("a", 440)
    $oToene.Add("a#", 466.16)
    $oToene.Add("h", 493.88)
    $oToene.Add("c", 523.25)
    $oToene.Add("c#", 554.37)
    $oToene.Add("d", 587.33)
    $oToene.Add("d#", 622.25)
    $oToene.Add("e", 659.26)
    $oToene.Add("f", 698.46)
    $oToene.Add("f#", 739.99)
    $oToene.Add("g", 783.99)
    $oToene.Add("g#", 830.61)

    [/autoit] [autoit][/autoit] [autoit]

    $Frequenz = $oToene("d#")

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0,"Beepton", "Die Frequenz von d# ist: " & $Frequenz)

    [/autoit]
  • Die Beepton UDF war am Anfang auch nur ne Liste. Kannst ja mal meine Klaviatur in der Signatur anschauen. Da gibs ne Funktion, womit die Aufgezeichneten Töne als AutoIt-Script oder als exe ausgegeben werden.

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • Wenn du es dir noch einfacher machen willst dann kannst du das Dictionary auch automatisch erstellen lassen.
    Hab dir mal hier als Beispiel für die gesamte >>Standardklaviatur<< das Dictionary erstellt:

    Spoiler anzeigen
    [autoit]

    ; Frequenzbibliothek initialisieren:
    Global $Toene = _CreateToneTable(440)

    [/autoit] [autoit][/autoit] [autoit]

    ; Tonname definieren:
    $Tonname = "F#5"
    ; entsprechende Tonfrequenz in Tabelle nachschlagen:
    $Frequenz = $Toene($Tonname)

    [/autoit] [autoit][/autoit] [autoit]

    ;Ergebnis ausgeben:
    MsgBox(0, "", "Tonname: " & $Tonname & @CRLF & "Frequenz: " & $Frequenz)
    Beep($Frequenz, 1000)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Funktion welche eine Frequenzbibliothek anhand des Kammertones erstellt:
    Func _CreateToneTable($iKammer = 440)
    Local $oToene = ObjCreate('Scripting.Dictionary')
    If @error Or Not IsObj($oToene) Then Return SetError(1, 0, 0)
    Local $aBst = StringSplit("CCDDEFFGGAAB",'')
    Local $locKammer, $iFreq

    [/autoit] [autoit][/autoit] [autoit]

    For $x = 0 To 8
    $locKammer = $iKammer * 2 ^ ($x - 4)
    For $i = 1 To 12
    $iFreq = $locKammer * 2 ^ (($i - 10) / 12)
    If $aBst[$i] = $aBst[$i - 1] Then
    $oToene.Add($aBst[$i] & '#' & $x, $iFreq)
    $oToene.Add($aBst[$i + 1] & 'b' & $x, $iFreq)
    Else
    $oToene.Add($aBst[$i] & $x, $iFreq)
    EndIf
    Next
    Next
    Return $oToene
    EndFunc

    [/autoit]

    2 Mal editiert, zuletzt von AspirinJunkie (7. Februar 2010 um 10:53)