Autoit Ocarina?

  • Ist es möglich in Autoit eine Ocarina zu machen wie es sie auf dem Ipad/Iphone gibt?
    Ich habe mich dran versucht, aber habe noch nie mit der Bass udf gearbeitet, und als ich sie mir angeschaut habe dachte ich mir nur: "omg"
    Tausend Funktionen...
    Gibt es keine Funktion wie Soundplay die keinen Delay beim abspielen des sounds hat?
    Habe ungern lust meinen Source mit tausend Funktionen von der Bass udf voll zu klatschen und dann die dll noch nachschieben zu müssen.

  • Wenn man mit der Soundplay funktion 2 sounds hintereinander abspielt, dann ist ein kleiner delay dazwischen.
    Brauch aber eine Funktion die es sofort abspielt, dass man bei einem loop nichts merkt.

  • Das dürfte schwierig werden, denn dieses Delay kommt vom Programm so wie ich das sehe. Du kannst ja schliesslich nicht zwei Befehle gleichzeitig aufrufen und zwischen den beiden Aufrufen vergeht halt auch ein wenig Zeit.

    Gruss Shadowigor

  • Das Warten wird wohl daran liegen, dass die normal in Autoit implementierte SoundPlay-Funktion solange wartet, bis der Sound komplett abgespielt wurde.
    Versuch mal, ob das hier funktioniert:

    Spoiler anzeigen
    [autoit]

    #include <Sound.au3>

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

    ; Öffne Sound-Datei ; dies muß verändert werden, falls das Skript unter Vista läuft
    $sound1 = _SoundOpen("")
    $sound2 = _SoundOpen("")
    If @error = 2 Then
    MsgBox(0, "Fehler", "Die Datei existiert nicht.")
    Exit
    ElseIf @extended <> 0 Then
    $extended = @extended ; Zuweisung, weil @extended nach DllCall-Aufruf geändert wird
    $stText = DllStructCreate("char[128]")
    $errorString = DllCall("winmm.dll", "short", "mciGetErrorStringA", "str", $extended, "ptr", DllStructGetPtr($stText), "int", 128)
    MsgBox(0, "Fehler", "Öffnen fehlgeschlagen." & @CRLF & "Fehlernummer: " & $extended & @CRLF & "Fehlerbeschreibung: " & DllStructGetData($stText, 1) & @CRLF & "Beachte: Möglicherweise kann der Sound dennoch korrekt abgespielt werden.")
    Else
    MsgBox(0, "Erfolgsmeldung", "Die Datei wurde erfolgreich geöffnet.")
    EndIf

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

    _SoundPlay($sound1, 0) ; 1 - Warten | 0 - Skript fortsetzen
    Sleep(500)
    _SoundStop($sound1)

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

    _SoundPlay($sound2, 0)
    Sleep(500)
    _SoundStop($sound2)

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

    _SoundClose($sound1)
    _SoundClose($sound2)

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


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

  • Leider nicht.
    Es liegt immernoch ein kleiner Delay dazwischen.
    Außerdem müsste ich dann für jeden Sound die exakte zeit feststellen und eintragen.
    Geht das nicht irgendwie einfacher?
    Könnte ich nicht eine Dll schreiben und meine eigenen Funktionen aufrufen?

  • Klar kannst du dir eine DLL programmieren und dann deine eigenen Funktionen daraus verwenden. ;) Allerdings wissen wir nicht ob du auch die nötigen Kenntnisse in zu mindest einer höheren Programmiersprache besitzt, um eine solche DLL zu schreiben... Außerdem stellt sich dann die Frage auf: Warum nicht gleich das komplette Programm in der schnelleren Programmiersprache schreiben?

    LG
    Christoph :)

  • Naja weil ich bisher nur dll's programmiert habe in c++.
    Habe mich noch nie mit dem erstellen einer GUI etc. auseinander gesetzt.