Virtual Drummer

    • Offizieller Beitrag

    Hallo!

    Ich habe für ein freund der sich eine tastatur als Virituelles schlagzeug bauen will (also sone art mobiles schlagzeug :P ) bzw gebaut hat ein Virtual Drummer gebaut.. Jetzt hab ich es ein bisschen umgeändert,so das es auch menschen ohne modifizierter Tastatur benutzen können!
    Hier das Ergebnis:

    Spoiler anzeigen
    [autoit]

    ;>>>>>><<<<<<
    ;>Version 1.02<
    ;>>>>>><<<<<<
    #include <Sound.au3>
    #include <GUIConstants.au3>
    $hwnd = GUICreate("",640,480,-1,-1,$WS_POPUP,$WS_EX_TOOLWINDOW)
    GUICtrlCreatePic("Pics\VD.jpg",0,0,640,480)
    DllCall ( "user32.dll", "int", "AnimateWindow", "hwnd", $hwnd, "int", 1000, "long", 0x00080000 );fade-in

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

    ;h=hi-hat
    $hi_hat = _SoundOpen(@ScriptDir & "\Sounds\Hi-Hat.wav")
    ;s=snare
    $snare = _SoundOpen(@ScriptDir & "\Sounds\Snare.mp3")
    ;b=bassdrum
    $bassdrum = _SoundOpen(@ScriptDir & "\Sounds\Bassdrum.mp3")
    ;k=kleine tom (tom1)
    $tom1 = _SoundOpen(@ScriptDir & "\Sounds\Tom1.wav")
    ;g=große tom (tom2)
    $tom2 = _SoundOpen(@ScriptDir & "\Sounds\Tom2.wav")
    ;m=stand tom (tom3)
    $tom3 = _SoundOpen(@ScriptDir & "\Sounds\Tom3.wav")
    ;1=Becken 1
    $becken1 = _SoundOpen(@ScriptDir & "\Sounds\Becken1.mp3")
    ;2=Becken 2
    $becken2 = _SoundOpen(@ScriptDir & "\Sounds\Becken2.mp3")

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

    Sleep(1000)

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

    $mainGui = GUICreate("Virtual Drummer - By GtaSpider", 479, 365, 196, 141)
    GUISetBkColor(0xFFFFFF)
    $bassdrumpic = GUICtrlCreatePic("Pics\BassDrum.jpg", 208, 184, 168, 162, BitOR($SS_NOTIFY,$WS_GROUP))
    $snarepic = GUICtrlCreatePic("Pics\Snare.jpg", 352, 112, 120, 85, BitOR($SS_NOTIFY,$WS_GROUP))
    $tom1pic = GUICtrlCreatePic("Pics\Tom1.jpg", 147, 80, 90, 65, BitOR($SS_NOTIFY,$WS_GROUP))
    $tom2pic = GUICtrlCreatePic("Pics\Tom2.jpg", 251, 40, 90, 65, BitOR($SS_NOTIFY,$WS_GROUP))
    $tom3pic = GUICtrlCreatePic("Pics\Tom3.jpg", 251, 112, 90, 65, BitOR($SS_NOTIFY,$WS_GROUP))
    $becken1pic = GUICtrlCreatePic("Pics\becken1.jpg", 8, 32, 124, 100, BitOR($SS_NOTIFY,$WS_GROUP))
    $becken2pic = GUICtrlCreatePic("Pics\becken2.jpg", 368, 8, 92, 76, BitOR($SS_NOTIFY,$WS_GROUP))
    $hi_hatpic = GUICtrlCreatePic("Pics\Hi-hat.jpg", 144, 22, 97, 45, BitOR($SS_NOTIFY,$WS_GROUP))
    GUICtrlCreatePic("Pics\GTASpider.jpg", 17, 192, 159, 153, BitOR($SS_NOTIFY,$WS_GROUP))
    GUICtrlCreateLabel("By GtaSpider", 17, 160, 159, 30)
    GUICtrlSetFont(-1, 18, 400, 0, "MS Sans Serif")
    GUICtrlSetBkColor(-1, 0xFFFFFF)

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

    HotKeySet("h","hi_hat")
    HotKeySet("s","snare")
    HotKeySet("b","bassdrum")
    HotKeySet("j","tom1")
    HotKeySet("k","tom2")
    HotKeySet("m","tom3")
    HotKeySet("1","becken1")
    HotKeySet("2","becken2")

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

    DllCall ( "user32.dll", "int", "AnimateWindow", "hwnd", $hwnd, "int", 200, "long", 0x00090000 );fade-out
    GUISetState(@SW_SHOW)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Func hi_hat()
    GUICtrlSetImage($hi_hatpic,"Pics\Hi-hat_used.jpg")
    mciSendString("play " & $hi_hat)
    If Not WinActive($mainGui) Then
    HotKeySet("h")
    Send("h")
    HotKeySet("h","hi_hat")
    EndIf
    $hi_hat = _SoundOpen(@ScriptDir & "\Sounds\Hi-Hat.wav")
    GUICtrlSetImage($hi_hatpic,"Pics\Hi-hat.jpg")
    EndFunc

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

    Func snare()
    GUICtrlSetImage($snarepic,"Pics\snare_used.jpg")
    mciSendString("play " & $snare)
    If Not WinActive($mainGui) Then
    HotKeySet("s")
    Send("s")
    HotKeySet("s","snare")
    EndIf
    $snare = _SoundOpen(@ScriptDir & "\Sounds\snare.mp3")
    GUICtrlSetImage($snarepic,"Pics\snare.jpg")
    EndFunc

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

    Func bassdrum()
    GUICtrlSetImage($bassdrumpic,"Pics\bassdrum_used.jpg")
    mciSendString("play " & $bassdrum)
    If Not WinActive($mainGui) Then
    HotKeySet("b")
    Send("b")
    HotKeySet("b","bassdrum")
    EndIf
    $bassdrum = _SoundOpen(@ScriptDir & "\Sounds\bassdrum.mp3")
    GUICtrlSetImage($bassdrumpic,"Pics\bassdrum.jpg")
    EndFunc

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

    Func tom1()
    GUICtrlSetImage($tom1pic,"Pics\tom1_used.jpg")
    mciSendString("play " & $tom1)
    If Not WinActive($mainGui) Then
    HotKeySet("j")
    Send("j")
    HotKeySet("j","tom1")
    EndIf
    $tom1 = _SoundOpen(@ScriptDir & "\Sounds\tom1.wav")
    GUICtrlSetImage($tom1pic,"Pics\tom1.jpg")
    EndFunc

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

    Func tom2()
    GUICtrlSetImage($tom2pic,"Pics\tom2_used.jpg")
    mciSendString("play " & $tom2)
    If Not WinActive($mainGui) Then
    HotKeySet("k")
    Send("k")
    HotKeySet("k","tom2")
    EndIf
    $tom2 = _SoundOpen(@ScriptDir & "\Sounds\tom2.wav")
    GUICtrlSetImage($tom2pic,"Pics\tom2.jpg")
    EndFunc

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

    Func tom3()
    GUICtrlSetImage($tom3pic,"Pics\tom3_used.jpg")
    mciSendString("play " & $tom3)
    If Not WinActive($mainGui) Then
    HotKeySet("m")
    Send("m")
    HotKeySet("m","tom3")
    EndIf
    $tom3 = _SoundOpen(@ScriptDir & "\Sounds\tom3.wav")
    GUICtrlSetImage($tom3pic,"Pics\tom3.jpg")
    EndFunc

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

    Func becken1()
    GUICtrlSetImage($becken1pic,"Pics\becken1_used.jpg")
    mciSendString("play " & $becken1)
    If Not WinActive($mainGui) Then
    HotKeySet("1")
    Send("1")
    HotKeySet("1","becken1")
    EndIf
    $becken1 = _SoundOpen(@ScriptDir & "\Sounds\Becken1.mp3")
    GUICtrlSetImage($becken1pic,"Pics\becken1.jpg")
    EndFunc

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

    Func becken2()
    GUICtrlSetImage($becken2pic,"Pics\becken2_used.jpg")
    mciSendString("play " & $becken2)
    If Not WinActive($mainGui) Then
    HotKeySet("2")
    Send("2")
    HotKeySet("2","becken2")
    EndIf
    $becken2 = _SoundOpen(@ScriptDir & "\Sounds\Becken2.mp3")
    GUICtrlSetImage($becken2pic,"Pics\becken2.jpg")
    EndFunc

    [/autoit]

    Dafür sind natürlich pics und sounds notwendig... die gesamte zip mit allem drum und dran im Anhang!

    Mfg Spider

    Edit1: Update von 1.00 -> 1.02:
    -Wenn taste gedrückt wird wird ein Send gemacht, um komfortabler zu schreiben, aber nur wenn das mainfenster nicht aktiv ist
    -kleiner bug entfernt..

  • lol da teil it geil^^ nur da due it er lociert dann die uctaen, alo wenn ic ier wa creien will, it den uctaen die auc eine Sound zugewien ind, ignoriert er die einfac , pielt den ound aer i foru wird die tate ozuagen "ignoriert"..

    o, etzt noc einal lear :)


    Also, es wäre gut wenn du noch ein Send() einfügen würdest, da:

    Angenommen ich hab das Script aktiv - um mich musikalisch zu erfreuen - will aber auch im forum schreiben und drücke zb: S , spielt er nen sound, aber ich kann nicht schreiben: hasso , sondern hao .....

    VLl kann man das ändern? :)

  • Hehehe das ding ist geil^^

    nur ich hatte vorher in einem anderen script "soundsetwavevolume(0)" gemacht, da hat es nix gemacht -.- du solltest vllt F1 und F2 als lautstärke regler missbrauchen, oder einfach am anfang "soundset...(100)" machen^^
    -
    hey wie wärs mit nem kleinen contest?^^
    Jeder (der will) macht mit den netten sounds und autoit (vllt mit sleep^^) einen art lied :)
    möge der beste drummer gewinnen!
    Hinweis: wenn man den drum script umbaut, die tasten iner ini speichert und nebenbei noch nen kleinen counter laufenlässt (muss ja schön kompliziert sein^^)... dann kann man teoretisch per tasten drücken ein nettes musikstück schaffen...
    erst archivieren, mit sound, taste, zeit... danach zusammenpuzzeln^^

    Mal sehen ob wer auf die idee eingeht (ich bin leider zu unmusikalisch und ein vollkommener autoit noob :( )

    Edit GtaSpider: Habe mal die beiden einträge zusammen gefügt.

  • Jo, das wäre geil :)

    Meint ihr das so?


    zb:

    Send("j")
    sleep(100)
    send("j")
    sleep(50)
    sned("b")


    ODer dass eine .mp3 aufgenommen wird? ;)

  • Also wenn das von Autoit als mp3 (geht das oO?) aufgenommen wird wärs schon goil :)
    aber ich dachte mehr daran das man per virtual drummer und den Send/sleep befehlen nen lied macht =)
    spider koennte aber das prog soweit ändern das es im hintergrund nen millisekunden timer mitlaufen lässt und jedes mal wenn eine taste gedrückt wird, zb ~ alle 400 ms drückt man B, das es in einer datei/ini was weiss ich die taste+zeit speichert...
    nur wie man das am besten ausliest, da bin ich ueberfragt :)
    also entweder man strengt sich selber an und rechnet den abstand etc der tasten (in ms) aus und arbeitet mit sleep+wait oder jemandkriegt ne brauchbare idee wie man das per autoit machen kann.
    eine idee von mir wäre das man irgendwie

    [autoit]

    $sleepzeit = $taste1ms - $taste2ms
    ;rechnet und dann eine art
    Send({}&$taste)
    Sleep($sleepzeit)
    Send({}&$taste2)
    ;etc etc macht :) ob das mit den vars in sleep und send funtz weis ich nicht ^^ nie benutzt :)

    [/autoit]

    EDIT:
    es wäre auch ne idee wenn spider immer die taste speichert, nen timer starten lässt und sobald die 2te taste gedrückt wurde den ersten timer anhält, alles in ne ini packt
    zb: [Tasten]
    1
    B
    2
    B
    [Zeit]
    600 (taste 1 - taste 2 abstand [timer 1])
    100 (taste 2 - taste 3 abstand [timer 2]) .....
    500
    100
    das wäre dann einfacher auszulesen..
    ausserdem kann man das per hand leichter nachkorrigieren, wenn man zb 20ms drueber ist :) das sieht man^^

    Einmal editiert, zuletzt von Phillipk (5. November 2006 um 20:42)