• Hey,

    mein erstes veröffentliches Script seit langem und eigentlich mein erstes GDI+ Experiment.

    Ihr könnt damit eine MP3 Datei öffnen und den Pegel grafisch darstellen lassen:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Outfile=SoundPegel.exe
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <Bass.au3>
    #include <BassConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <WindowsConstants.au3>
    #include <GdiPlus.au3>

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

    $l_max = 0
    $r_max = 0

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

    $fps = 0

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

    ;~ BASS
    _BASS_STARTUP("bass.dll")
    _BASS_Init(0, -1, 44100, 0, "")
    If @error Then
    MsgBox(16,"ERROR","")
    Exit
    EndIf

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

    $file = FileOpenDialog("Öffne Datei","","MP3 (*.mp3)")
    $diff = InputBox("Toleranz","Gebe den Toleranzwert ein",1)

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

    $hMusic = _BASS_StreamCreateFile(False,$file, 0, 0, 0)
    _BASS_ChannelPlay($hMusic, 1)
    $hLevels = _BASS_ChannelGetLevel ($hMusic)
    $hLevels_l = (_BASS_HiWord ($hLevels) / 32768) * 100
    $hLevels_r = (_BASS_LoWord ($hLevels) / 32768) * 100
    AdlibRegister("_FPS",1000)

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

    ;~ GUI
    $hGui = GUICreate("SoundPegel", 615, 166)
    GUISetBkColor(0x000000)
    GUISetState(@SW_SHOW)
    GUISetState(@SW_MAXIMIZE)

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

    ;~ Texte - Labels

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

    ;~ Links
    $lbl_1 = GUICtrlCreateLabel("",@DesktopWidth / 2 - 70,@DesktopHeight-80,100,50)
    _font_set($lbl_1)

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

    ;~ Rechts
    $lbl_2 = GUICtrlCreateLabel("",@DesktopWidth / 2 + 140,@DesktopHeight-80,100,50)
    _font_set($lbl_2)

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

    ;~ Max Werte
    $lbl_max_l = GUICtrlCreateLabel("",@DesktopWidth / 2 - 90,@DesktopHeight-60,100,50)
    $lbl_max_r = GUICtrlCreateLabel("",@DesktopWidth / 2 + 120,@DesktopHeight-60,100,50)
    _font_set($lbl_max_l)
    _font_set($lbl_max_r)

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

    ;~ FPS
    $lbl_fps = GUICtrlCreateLabel("",10,10,100,100)
    _font_set($lbl_fps)

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

    ;~ GDI+
    _GDIPlus_Startup() ;Starten
    Global $hBrush = _GDIPlus_BrushCreateSolid(0xFF00E5FF) ;Brush setzen
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    _GDIPlus_Shutdown() ;GDI+
    _BASS_Free() ;BASS
    Exit

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

    EndSwitch

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

    ;~ Pegel bekommen
    $hLevels_l_alt = $hLevels_l
    $hLevels_r_alt = $hLevels_r
    $hLevels = _BASS_ChannelGetLevel ($hMusic)
    $hLevels_l = (_BASS_HiWord ($hLevels) / 32768) * 100
    $hLevels_r = (_BASS_LoWord ($hLevels) / 32768) * 100

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

    ;~ Labels setzen
    GUICtrlSetData($lbl_1,Round($hLevels_l,3))
    GUICtrlSetData($lbl_2,Round($hLevels_r,3))

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

    ;~ Max Werte setzen - links
    If $l_max < $hLevels_l and $hLevels_l <> 100 Then
    $l_max = $hLevels_l
    GUICtrlSetData($lbl_max_l,"Max: "&Round($l_max,3))
    EndIf

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

    ;~ Max Werte setzen - rechts
    If $r_max < $hLevels_r and $hLevels_r <> 100 Then
    $r_max = $hLevels_r
    GUICtrlSetData($lbl_max_r,"Max: " &Round($r_max,3))
    EndIf

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

    ;~ GDI: Balken erstellen
    If Abs($hLevels_l - $hLevels_l_alt) > $diff or Abs($hLevels_r - $hLevels_r_alt) > $diff Then
    _WinAPI_RedrawWindow($hgui)
    $img_l = _GDIPlus_GraphicsFillRect($hGraphic,@DesktopWidth / 2 - 100,@DesktopHeight-100 -($hLevels_l*5),100,$hLevels_l*5,$hBrush)
    $img_r = _GDIPlus_GraphicsFillRect($hGraphic,@DesktopWidth / 2 +100,@DesktopHeight -100 -($hLevels_r*5),100,$hLevels_r*5,$hBrush)
    EndIf

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

    $fps += 1

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

    WEnd

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

    ;~ Funktion damit alles übersichtlicher wirkt
    Func _font_set($iCtrl)
    GUICtrlSetBkColor($iCtrl,-1)
    GUICtrlSetColor($iCtrl,0x00FBFF)
    GUICtrlSetFont($iCtrl,10,100)
    EndFunc

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

    Func _FPS()
    GUICtrlSetData($lbl_fps,"FPS: "&$fps)
    $fps = 0
    EndFunc

    [/autoit]

    //Max Werte
    //Vollbild
    //Werte unter Balken

    Vergisst nicht auf die BASS.dll UDF

    StevenX

    [Blockierte Grafik: http://stefan.blagojevic.at/loading.gif]

    Design, Modellbau, CAD <3
    AutoCAD, ArchiCAD, REVIT (ist ein Scheiss, habe aber das Zertifikat)

    Cinema 4D, RuckZuck Statik Programm

    Michael Bay als Architekt


    Da eine Glasfassade! Booom Sichtbeton! Laminiertes Bild auf Mosaiksteinchen! Granit! Granit! Granit! Sichtbetonwand mit 50° Neigung!
    Holzverkleidung erscheint da! Boooooom!

    2 Mal editiert, zuletzt von Stevenx (1. Februar 2014 um 17:33)

  • Fürs erste find ich das nicht schlecht. Habe nun kein Quellcode angeguckt, lediglich mal geschaut ob es funktioniert und wie es ausschaut. Wobei der optische Aspekt ja uninteressant ist, da man sich das ja bauen kann wie man mag ^^

    Somit +1 :P

    Grüße Yaerox

    Grüne Hölle

  • Fürs erste find ich das nicht schlecht. Habe nun kein Quellcode angeguckt, lediglich mal geschaut ob es funktioniert und wie es ausschaut. Wobei der optische Aspekt ja uninteressant ist, da man sich das ja bauen kann wie man mag ^^

    Somit +1 :P

    THX :D

    [Blockierte Grafik: http://stefan.blagojevic.at/loading.gif]

    Design, Modellbau, CAD <3
    AutoCAD, ArchiCAD, REVIT (ist ein Scheiss, habe aber das Zertifikat)

    Cinema 4D, RuckZuck Statik Programm

    Michael Bay als Architekt


    Da eine Glasfassade! Booom Sichtbeton! Laminiertes Bild auf Mosaiksteinchen! Granit! Granit! Granit! Sichtbetonwand mit 50° Neigung!
    Holzverkleidung erscheint da! Boooooom!

  • Paar Änderungen:
    //Max Werte
    //Vollbild
    //Werte unter Balken
    //FPS

    Ist die FPS Anzeige richtig?
    Uuund wie findet ihr meinen Schreibstil?

    Danke für zukünftiges Feedback

    Steve :D

    [Blockierte Grafik: http://stefan.blagojevic.at/loading.gif]

    Design, Modellbau, CAD <3
    AutoCAD, ArchiCAD, REVIT (ist ein Scheiss, habe aber das Zertifikat)

    Cinema 4D, RuckZuck Statik Programm

    Michael Bay als Architekt


    Da eine Glasfassade! Booom Sichtbeton! Laminiertes Bild auf Mosaiksteinchen! Granit! Granit! Granit! Sichtbetonwand mit 50° Neigung!
    Holzverkleidung erscheint da! Boooooom!

  • Hi, ich habe das Skript jetzt nicht ausgeführt sondern nur in den Code geguckt. (Bin zu faul bei meiner Bambusleitung mir die Bass.dll runter zu laden ^^)

    Ist die FPS Anzeige richtig?
    Soweit ich weiß steht FPS für Frames per Second oder so ähnlich. Müsste so korrekt sein. (Obwohl ich persönlich auf den Gebrauch von AdlibRegister verzichten würde...)

    Uuund wie findet ihr meinen Schreibstil?
    Nagut, jeder hat einen eigenen mit der Zeit entwickelt. Solange man den Code leicht verfolgen kann ist dieser also nicht schlecht. Alles abdere hängt an den persönlichen Vorzügen ab. Ich beispielsweise setze vor jeder Variable noch einen Präfix. Dann unterteile ich meinen Code in sinnvolle Codeabschnitte und mache dies sehr deutlich (Benutze das + Zeichen zum trennen):

    [autoit]

    ; ++++++++++ +++++++++ ++++++++ +++++++ +++++ ++++ +++ ++ +

    [/autoit]

    Zudem setze ich nach und vor einen Mathematischen Operator immer ein Leerzeichen. Da gibts aber auch wieder eine ausnahme wo ich das nicht mache...
    (Könnte ich stundenlang drüber schreiben ^^)

  • Hi, ich habe das Skript jetzt nicht ausgeführt sondern nur in den Code geguckt. (Bin zu faul bei meiner Bambusleitung mir die Bass.dll runter zu laden ^^)

    Ist die FPS Anzeige richtig?
    Soweit ich weiß steht FPS für Frames per Second oder so ähnlich. Müsste so korrekt sein. (Obwohl ich persönlich auf den Gebrauch von AdlibRegister verzichten würde...)

    Uuund wie findet ihr meinen Schreibstil?
    Nagut, jeder hat einen eigenen mit der Zeit entwickelt. Solange man den Code leicht verfolgen kann ist dieser also nicht schlecht. Alles abdere hängt an den persönlichen Vorzügen ab. Ich beispielsweise setze vor jeder Variable noch einen Präfix. Dann unterteile ich meinen Code in sinnvolle Codeabschnitte und mache dies sehr deutlich (Benutze das + Zeichen zum trennen):

    [autoit]

    ; ++++++++++ +++++++++ ++++++++ +++++++ +++++ ++++ +++ ++ +

    [/autoit]

    Zudem setze ich nach und vor einen Mathematischen Operator immer ein Leerzeichen. Da gibts aber auch wieder eine ausnahme wo ich das nicht mache...
    (Könnte ich stundenlang drüber schreiben ^^)


    KK, danke :D

    Steve

    [Blockierte Grafik: http://stefan.blagojevic.at/loading.gif]

    Design, Modellbau, CAD <3
    AutoCAD, ArchiCAD, REVIT (ist ein Scheiss, habe aber das Zertifikat)

    Cinema 4D, RuckZuck Statik Programm

    Michael Bay als Architekt


    Da eine Glasfassade! Booom Sichtbeton! Laminiertes Bild auf Mosaiksteinchen! Granit! Granit! Granit! Sichtbetonwand mit 50° Neigung!
    Holzverkleidung erscheint da! Boooooom!