1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. eukalyptus

Beiträge von eukalyptus

  • progandy hat Geburtstag!

    • eukalyptus
    • 11. Oktober 2011 um 18:35

    Alles Gute und Danke für deine großartige Arbeit!

  • eine .exe Datei in GUI ausführen

    • eukalyptus
    • 8. Oktober 2011 um 10:26

    Meinst du so was?
    [ offen ] Programm.exe in einem AutoIt fenster ausführen

  • GDIPlus Grafik in mm/pt?

    • eukalyptus
    • 5. Oktober 2011 um 21:22

    Hi

    Zunächst mal benötigst du GDIp.au3: http://www.autoitscript.com/forum/topic/106021-gdipau3/
    Darin findest du die Funktion _GDIPlus_GraphicsSetPageUnit.

    Ich würde es in etwa so machen:
    Ein Backbuffer in der Größe des Fensters in Pixel Units
    Eine eigene Grafik in Milimeter Units zum zeichnen

    Spoiler anzeigen
    [autoit]

    #include <GDIP.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Opt("GUIOnEventMode", 1)

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

    _GDIPlus_Startup()

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

    $hGui = GUICreate("A4", 210, 297)
    GUISetOnEvent(-3, "_Exit")

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

    _GDIPlus_Startup()
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)
    $hBmpBuffer = _GDIPlus_BitmapCreateFromGraphics(210, 297, $hGraphics) ;Backbuffer verhindert flackern
    $hGfxBuffer = _GDIPlus_ImageGetGraphicsContext($hBmpBuffer)
    _GDIPlus_GraphicsClear($hGfxBuffer, 0xFF000000)

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

    $aSize = _CalcBitmapSize(210, 297) ;Wie groß ist das in Pixel?
    ConsoleWrite($aSize[0] & " " & $aSize[1] & @CRLF)
    $hBmpMilimeter = _GDIPlus_BitmapCreateFromGraphics($aSize[0], $aSize[1], $hGraphics)
    $hGfxMilimeter = _GDIPlus_ImageGetGraphicsContext($hBmpMilimeter)
    _GDIPlus_GraphicsSetPageUnit($hGfxMilimeter, 6)
    _GDIPlus_GraphicsClear($hGfxMilimeter, 0xFFFFFFFF)

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

    $hPen = _GDIPlus_PenCreate(0xFF000000, 4)
    _GDIPlus_GraphicsDrawRect($hGfxMilimeter, 1, 1, 208, 295, $hPen) ;Zeichnen in Millimeter

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

    _GDIPlus_ImageSaveToFile($hBmpMilimeter, @ScriptDir & "\A4.bmp") ;Speichern - Zieldatei sollte A4 Größe haben

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

    _GDIPlus_GraphicsDrawImageRect($hGfxBuffer, $hBmpMilimeter, 0, 0, 210, 297) ;zeichne Milimetergrafik verkleinert auf Backbuffer

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

    GUIRegisterMsg($WM_PAINT, "WM_PAINT")
    GUISetState()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _CalcBitmapSize($iW, $iH)
    Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND(_WinAPI_GetDesktopWindow())
    Local $aPoints[2][2]
    $aPoints[0][0] = 1
    $aPoints[1][0] = $iW
    $aPoints[1][1] = $iH

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

    _GDIPlus_GraphicsSetPageUnit($hGraphics, 6)
    Local $aResult = _GDIPlus_GraphicsTransformPoints($hGraphics, $aPoints, 2, 1)

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

    _GDIPlus_GraphicsDispose($hGraphics)

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

    Local $aReturn[2]
    $aReturn[0] = Ceiling($aResult[1][0])
    $aReturn[1] = Ceiling($aResult[1][1])

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

    Return $aReturn
    EndFunc ;==>_CalcBitmapSize

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

    Func WM_PAINT($hWnd, $uMsgm, $wParam, $lParam)
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBmpBuffer, 0, 0)
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_PAINT

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

    Func _Exit()
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_GraphicsDispose($hGfxMilimeter)
    _GDIPlus_BitmapDispose($hBmpMilimeter)
    _GDIPlus_GraphicsDispose($hGfxBuffer)
    _GDIPlus_BitmapDispose($hBmpBuffer)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_Exit

    [/autoit]

    E

  • name22 feiert seinen 17ten

    • eukalyptus
    • 5. Oktober 2011 um 08:55

    Alles Gute!

  • GDI+ Prozessorauslastung reduzieren

    • eukalyptus
    • 28. September 2011 um 10:07

    Dann hast du bisher immer GuiGetMsg verwendet, welches intern ein Sleep macht, wenn die Maus nicht bewegt wird...
    selbst dieses Script:

    [autoit]

    While 1
    WEnd

    [/autoit]

    hat etwa 50% bei mir

  • GDI+ Prozessorauslastung reduzieren

    • eukalyptus
    • 28. September 2011 um 09:38

    Das liegt nicht an GDI+, du brauchst nur ein Sleep(10) in der Schleife

  • Kleinere Autoit EXE´N mitliefern

    • eukalyptus
    • 28. September 2011 um 09:34

    Habs jetzt auch nicht ausprobiert, aber wenn man mehrere Scripte hat, reicht 1 Kompilierte Exe, von der aus die anderen Scripte gestartet werden können

    [autoit]

    Run(@AutoItExe & ' /AutoIt3ExecuteScript Script1.au3'

    [/autoit]
  • GDI+ Prozessorauslastung reduzieren

    • eukalyptus
    • 28. September 2011 um 09:29

    Sowas ist mir nicht bekannt.
    Welche CPU-Auslastung hat denn dein Script?

  • GDI+ Prozessorauslastung reduzieren

    • eukalyptus
    • 28. September 2011 um 09:14

    Du kannst z.B. mit _GDIPlus_GraphicsSetInterpolationMode (GDIp.au3) oder _GDIPlus_GraphicsSetSmoothingMode schnellere Algorithmen einstellen.
    Meinst du das?

  • [GDI+]Bilddrehung via Matrizen

    • eukalyptus
    • 28. September 2011 um 09:07

    Du musst zuerst die Matrix zum Drehmittelpunkt verschieben, dann Drehen und dann wieder zurückverschieben

    [autoit]

    _GDIPlus_MatrixTranslate($hMatrix, $iWidth / 2, $iHeight / 2)
    _GDIPlus_MatrixRotate($hMatrix, $iAngle)
    _GDIPlus_MatrixTranslate($hMatrix, -$iWidth / 2, -$iHeight / 2)

    [/autoit]

    E

  • GDI+, gezeichnetes löschen

    • eukalyptus
    • 27. September 2011 um 22:53
    Zitat von most_wanted

    hätte jetz nicht gedacht, dass das "löschen" von gezeichneten linien so kompliziert sein würde...


    Betrachte GDI+ wie ein Grafikprogramm. Wenn du z.B. in MSPaint ein Foto hast und einen roten Strich drauf malst, wie löschst du diesen, ohne die "Rückgangig" Funktion zu benutzen? ;)

    Nimm für den Anfang keine transparenten Fenster und werde mit den einfachen Zeichenfunktionen (DrawLine, FillRect, DrawImage...) vertraut.
    Dann mach ein paar Versuche mit Backbuffer und RegisterMsg ($WM_PAINT)

    Hier ein gutes Tutorial: Gdi+ Tutorial [Part 5]

    Um GDI+ auf LayeredWindows zu benutzen, bedarf es schon eines gewissen Grundverständnisses und gehört schon eher zum Expertenlevel.
    Deshalb mach mal das Tutorial durch und versuch dich dann an einfachen Spielen wie Pong oder Snake

    E

  • GDI+, gezeichnetes löschen

    • eukalyptus
    • 27. September 2011 um 10:45

    $iWidth und $iHeight geben einfach die Größe des Fensters an
    Und sind in diesem Fall das gleiche wie @DesktopWidth bzw. @DesktopHeight

    Vielleicht solltest du zuerst mit etwas leichterem üben, bevor du dich über so ein schwieriges Script hermachst ;)

  • GDI+ _GDIPlus_GraphicsDrawImageRect on event?

    • eukalyptus
    • 27. September 2011 um 10:38

    Ich mach das immer mit einem Label hinter der Grafik.
    Damit das Label die Grafik nicht stört, muss man SS_OwnerDraw Style angeben

    [autoit]

    GUICtrlCreateLabel("", X, Y, W, H, 0x0000000D)

    [/autoit]

    Und mit GuiCtrlSetOnEvent kann man dann die gewünschte Funktion zuweisen

    E

  • GDI+, gezeichnetes löschen

    • eukalyptus
    • 26. September 2011 um 15:11

    Rein theoretisch musst du nur in der Farbe 0xFFABCDEF den alten Strich übermalen.

    Das klappt jedoch nicht immer. Wenn ich mich recht erinnere, dann geht das zwar mit FillRect, aber nicht mit FillEllipse oder DrawLine!
    GraphicsClear scheint auch nicht zu funktionieren... so als ob Windows nicht immer 100% die richtige Farbe erwischt ;)

    Probier mal das hier:

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>

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

    HotKeySet("{ESC}", "_Exit")

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

    $iWidth = @DesktopWidth
    $iHeight = @DesktopHeight

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

    _GDIPlus_Startup()

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

    $hGui = GUICreate("", $iWidth, $iHeight, 0, 0, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST, $WS_EX_TRANSPARENT))
    GUISetState()

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

    $aMPos_Old = MouseGetPos()

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

    While Sleep(10)
    $aMPos = MouseGetPos()
    If $aMPos[0] <> $aMPos_Old[0] Or $aMPos[1] <> $aMPos_Old[1] Then
    _UpdateWindow($hGui, $iWidth, $iHeight, $aMPos)
    $aMPos_Old = $aMPos
    EndIf
    WEnd

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

    Func _UpdateWindow($hWnd, $iW, $iH, $aMPos)
    Local $tSize = DllStructCreate("long X;long Y")
    DllStructSetData($tSize, "X", $iW)
    DllStructSetData($tSize, "Y", $iH)

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

    Local $tSource = DllStructCreate("long X;long Y")

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

    Local $tBlendI = DllStructCreate("byte Op;byte Flags;byte Alpha;byte Format")
    DllStructSetData($tBlendI, "Alpha", 0xFF)
    DllStructSetData($tBlendI, "Format", 1)

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

    Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    Local $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iW, $iH, $hGraphics)
    Local $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap)

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

    $hPen = _GDIPlus_PenCreate(0xFFFF0000, 2)
    _GDIPlus_GraphicsDrawLine($hContext, $iW / 2, $iH / 2, $aMPos[0], $aMPos[1], $hPen)

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

    Local $hDC = _WinAPI_GetDC($hWnd)
    Local $hDCS = _WinAPI_CreateCompatibleDC($hDC)
    Local $hBmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
    Local $hOrig = _WinAPI_SelectObject($hDCS, $hBmp)

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

    _WinAPI_UpdateLayeredWindow($hWnd, $hDC, 0, DllStructGetPtr($tSize), $hDCS, DllStructGetPtr($tSource), 0, DllStructGetPtr($tBlendI), 2)

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

    _GDIPlus_PenDispose($hPen)

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

    _GDIPlus_GraphicsDispose($hContext)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hGraphics)

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

    _WinAPI_SelectObject($hDCS, $hOrig)
    _WinAPI_DeleteObject($hBmp)
    _WinAPI_ReleaseDC($hWnd, $hDC)
    EndFunc ;==>_UpdateWindow

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

    Func _Exit()
    _GDIPlus_Shutdown()
    GUIDelete($hGui)
    Exit
    EndFunc ;==>_Exit

    [/autoit]
  • GDI+ Bild wird gestaucht

    • eukalyptus
    • 26. September 2011 um 14:14

    Es funktioniert übrigens auch so:

    [autoit]

    _GDIPlus_GraphicsDrawImageRectRect($buffer, $bk, $x, $y, 431, 400, 0, 0, 832, 800)

    [/autoit]

    Hier das Beispiel, was genau _GDIPlus_GraphicsDrawImageRectRect macht:
    Cursortasten zum bewegen; F1 - F4 zum ändern der Größe

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>

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

    Opt("GUIOnEventMode", 1)

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

    $iX = 0
    $iY = 0
    $iW = 100
    $iH = 100

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

    HotKeySet("{UP}", "_Move")
    HotKeySet("{DOWN}", "_Move")
    HotKeySet("{LEFT}", "_Move")
    HotKeySet("{RIGHT}", "_Move")
    HotKeySet("{F1}", "_Size")
    HotKeySet("{F2}", "_Size")
    HotKeySet("{F3}", "_Size")
    HotKeySet("{F4}", "_Size")

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

    _GDIPlus_Startup()

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

    $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\back.png")

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

    $hGui_SRC = GUICreate("Quelle", 431, 400, 0, 0)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    $hGFX_SRC = _GDIPlus_GraphicsCreateFromHWND($hGui_SRC)
    $hBMP_SRC_Buf = _GDIPlus_BitmapCreateFromGraphics(431, 400, $hGFX_SRC)
    $hGFX_SRC_Buf = _GDIPlus_ImageGetGraphicsContext($hBMP_SRC_Buf)
    GUISetState()

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

    $hGui_DST = GUICreate("Ziel", 200, 200, 450, 0)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    $hGFX_DST = _GDIPlus_GraphicsCreateFromHWND($hGui_DST)
    $hBMP_DST_Buf = _GDIPlus_BitmapCreateFromGraphics(200, 200, $hGFX_DST)
    $hGFX_DST_Buf = _GDIPlus_ImageGetGraphicsContext($hBMP_DST_Buf)
    GUISetState()

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

    $hPen = _GDIPlus_PenCreate(0xFFFF4040, 1)
    _Draw()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Draw()
    _GDIPlus_GraphicsClear($hGFX_SRC_Buf, 0xFF000000)
    _GDIPlus_GraphicsDrawImage($hGFX_SRC_Buf, $hImage, 0, 0)
    _GDIPlus_GraphicsDrawRect($hGFX_SRC_Buf, $iX, $iY, $iW, $iH, $hPen)
    _GDIPlus_GraphicsDrawImage($hGFX_SRC, $hBMP_SRC_Buf, 0, 0)

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

    _GDIPlus_GraphicsClear($hGFX_DST_Buf, 0xFF000000)
    _GDIPlus_GraphicsDrawImageRectRect($hGFX_DST_Buf, $hImage, $iX, $iY, $iW, $iH, 0, 0, 200, 200)
    _GDIPlus_GraphicsDrawImage($hGFX_DST, $hBMP_DST_Buf, 0, 0)
    EndFunc ;==>_Draw

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

    Func _Move()
    Switch @HotKeyPressed
    Case "{UP}"
    $iY -= 1
    Case "{DOWN}"
    $iY += 1
    Case "{LEFT}"
    $iX -= 1
    Case "{RIGHT}"
    $iX += 1
    EndSwitch
    _Draw()
    EndFunc ;==>_Move

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

    Func _Size()
    Switch @HotKeyPressed
    Case "{F1}"
    $iW -= 1
    Case "{F2}"
    $iW += 1
    Case "{F3}"
    $iH -= 1
    Case "{F4}"
    $iH += 1
    EndSwitch
    _Draw()
    EndFunc ;==>_Size

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

    Func _Exit()
    _GDIPlus_PenDispose($hPen)

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

    _GDIPlus_ImageDispose($hImage)

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

    _GDIPlus_GraphicsDispose($hGFX_DST_Buf)
    _GDIPlus_BitmapDispose($hBMP_DST_Buf)
    _GDIPlus_GraphicsDispose($hGFX_DST)

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

    _GDIPlus_GraphicsDispose($hGFX_SRC_Buf)
    _GDIPlus_BitmapDispose($hBMP_SRC_Buf)
    _GDIPlus_GraphicsDispose($hGFX_SRC)

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

    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_Exit

    [/autoit]

    E

  • GDI+ Bild wird gestaucht

    • eukalyptus
    • 26. September 2011 um 13:48

    So besser?:

    [autoit]

    _GDIPlus_GraphicsDrawImageRectRect($buffer, $bk, 0, 0, 431, 400, -$x, -$y, 832, 800)

    [/autoit]

    Übrigens, das Bild wird nicht gestaucht, es sieht nur so aus, weil vom letzen Schleifendurchlauf noch "Bild Reste" übrig sind
    lösch am besten immer den Buffer mit

    [autoit]

    _GDIPlus_GraphicsClear($buffer, 0xFF000000)

    [/autoit]

    E

  • bass.dll frage zu datei speichern

    • eukalyptus
    • 19. September 2011 um 01:20

    Damit keine Missverständnisse aufkommen - von den Dll´s ist nur BassExt.dll von mir; alle anderen sind vom Un4Seen-Team (un4seen.com)
    Die Bass-UDF für AutoIt ist von BrettF, Prog@ndy und mir

    E

  • Bass Ton bearbeiten

    • eukalyptus
    • 19. September 2011 um 00:30

    Hier ein Beispielscript eines 31-Band EQs

    Spoiler anzeigen
    [autoit]

    #include "Bass.au3"
    #include "BassExt.au3"
    #include "BassFX.au3"
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #AutoIt3Wrapper_UseX64=n

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

    Opt("GUIOnEventMode", 1)

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

    $hGui = GUICreate("31 Band EQ", 1105, 350)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

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

    _GDIPlus_Startup()
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)
    $hBmpBuffer = _GDIPlus_BitmapCreateFromGraphics(1085, 100, $hGraphics)
    $hGfxBuffer = _GDIPlus_ImageGetGraphicsContext($hBmpBuffer)
    _GDIPlus_GraphicsSetSmoothingMode($hGfxBuffer, 2)
    $hBrush = _GDIPlus_BrushCreateSolid(0xFF00FF00)

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

    _BASS_Startup()
    _BASS_FX_Startup()
    _BASS_EXT_Startup()
    _BASS_Init(0, -1, 44100, 0, "")
    _BASS_RecordInit(-1)

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

    $hStream = _BASS_StreamCreate(44100, 2, 0, $STREAMPROC_PUSH, 0)

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

    $aPipe = _BASS_EXT_StreamPipeCreate($hStream, $BASS_EXT_STREAMPROC_PUSH)
    _BASS_ChannelPlay($hStream, True)

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

    $hRecord = _BASS_RecordStart(44100, 2, 0, $BASS_EXT_RecordProc, $aPipe[0])

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

    $aFreq = StringSplit("20,25,31.5,40,50,63,80,100,125,160,200,250,315,400,500,630,800,1000,1250,1600,2000,2500,3150,4000,5000,6300,8000,10000,12500,16000,20000", ",")
    Global $aFX[$aFreq[0] + 1]
    Global $aSlider[$aFreq[0] + 1][2]

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

    $iBW = 0.5

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

    For $i = 1 To $aFreq[0]
    $aFX[$i] = _BASS_ChannelSetFX($hRecord, $BASS_FX_BFX_BQF, $i)
    _BASS_FXSetParameters($aFX[$i], $BASS_BFX_BQF_PEAKINGEQ & "|" & $aFreq[$i] & "|0|" & $iBW & "|0|0|" & $BASS_BFX_CHANALL)
    GUICtrlCreateLabel(_FormatHz($aFreq[$i]), ($i - 1) * 35 + 10, 10, 35, 20, 1)
    $aSlider[$i][0] = GUICtrlCreateSlider(($i - 1) * 35 + 10, 30, 28, 200, 10)
    $aSlider[$i][1] = GUICtrlGetHandle($aSlider[$i][0])
    GUICtrlSetLimit(-1, 150, -150)
    GUICtrlSetOnEvent(-1, "_SetEQ")
    Next

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

    $aFFT = _BASS_EXT_CreateFFT(96, 0, 0, 1085, 100, 2, True)

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

    GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL")
    GUISetState()

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

    While 1
    _GDIPlus_GraphicsClear($hGfxBuffer, 0xFF000000)
    _BASS_EXT_ChannelGetFFT($hStream, $aFFT, 6)
    If Not @error Then DllCall($ghGDIPDll, "int", "GdipFillPolygon", "handle", $hGfxBuffer, "handle", $hBrush, "ptr", $aFFT[0], "int", $aFFT[1], "int", "FillModeAlternate")
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBmpBuffer, 10, 240)
    Sleep(20)
    WEnd

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

    Func _SetEQ()
    Local $iPos = GUICtrlRead(@GUI_CtrlId) / - 10
    For $i = 1 To $aFreq[0]
    If @GUI_CtrlId = $aSlider[$i][0] Then
    _BASS_FXSetParameters($aFX[$i], $BASS_BFX_BQF_PEAKINGEQ & "|" & $aFreq[$i] & "|" & $iPos & "|" & $iBW & "|0|0|" & $BASS_BFX_CHANALL)
    ToolTip($aFreq[$i] & "Hz " & $iPos & "dB")
    Return
    EndIf
    Next
    EndFunc ;==>_SetEQ

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

    Func WM_VSCROLL($hWnd, $Msg, $wParam, $lParam)
    Local $iCode = BitAND($wParam, 0x0000FFFF)
    Local $iPos = BitShift($wParam, 16) / - 10
    Local $iHi, $iLo
    If $iCode = 5 Then
    For $i = 1 To $aFreq[0]
    If $lParam = $aSlider[$i][1] Then
    _BASS_FXSetParameters($aFX[$i], $BASS_BFX_BQF_PEAKINGEQ & "|" & $aFreq[$i] & "|" & $iPos & "|" & $iBW & "|0|0|" & $BASS_BFX_CHANALL)
    ToolTip($aFreq[$i] & "Hz " & $iPos & "dB")
    Return $GUI_RUNDEFMSG
    EndIf
    Next
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_VSCROLL

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

    Func _FormatHz($iHz)
    Local $ikHz = Floor($iHz / 1000)
    If $ikHz > 0 Then
    $iHz = Mod($iHz, 1000)
    Return $ikHz & "k" & StringReplace($iHz, "0", "")
    Else
    Return $iHz
    EndIf
    EndFunc ;==>_FormatHz

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

    Func _Exit()
    _BASS_RecordFree()
    _BASS_StreamFree($hStream)
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_GraphicsDispose($hGfxBuffer)
    _GDIPlus_BitmapDispose($hBmpBuffer)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_Exit

    [/autoit]

    Das Ergebnis klingt jedoch nicht ganz sauber.
    Man müsste einen größeren Buffer verwenden, aber dann steigt die Latenz!
    Oder man verwendet BassAsio - dazu muss die Soundkarte jedoch einen Asiotreiber haben...
    Ein Beispiel zu Asio findest du in der Bass-Hilfe unter "_BASS_ASIO_ChannelEnable" - _BASS_ChannelSetFX kann dort genauso angewendet werden, wie hier.

    E

  • da InetGet nicht mehr geht: wie mit Bass.dll Mp3 speichern

    • eukalyptus
    • 18. September 2011 um 17:32

    Hier die Möglichkeit via Bass.dll: [ gelöst ] bass.dll frage zu datei speichern

  • bass.dll frage zu datei speichern

    • eukalyptus
    • 18. September 2011 um 17:29

    Hab gar nicht mehr gewusst, daß ich die MemoryBuffer-Funktion bereits in die DownloadProc integriert hatte... :whistling:

    so gehts:

    Spoiler anzeigen
    [autoit]

    #AutoIt3Wrapper_UseX64=n
    #include "Bass.au3"
    #include "BassExt.au3"

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

    HotKeySet("{ESC}", "_Exit")

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

    _BASS_Startup()
    _BASS_Ext_Startup()
    _BASS_Init(0, -1, 44100, 0, "")

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

    $tBuffer = DllStructCreate("byte[10000000]")
    $pBuffer = DllStructGetPtr($tBuffer)
    $iBuffer = DllStructGetSize($tBuffer)

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

    $aMP3Buffer = _BASS_EXT_MemoryBufferCreate()

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

    $hStream = _BASS_StreamCreateURL("http://dc370.4shared.com/img/777213322/c38560ec/dlink__2Fdownload_2F2v7poYoy_3Ftsid_3D20110910-35650-7cd66ec0/preview.mp3", _
    0, $BASS_STREAM_DECODE, $BASS_EXT_DownloadProc, $aMP3Buffer[0]) ;use callback function from bassext.dll

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

    $iLength = _BASS_ChannelGetLength($hStream, $BASS_POS_BYTE)
    $iBytes = 0

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

    While $iBytes < $iLength
    $iBytes += _BASS_ChannelGetData($hStream, $pBuffer, $iBuffer)
    ToolTip(Round($iBytes * 100 / $iLength, 1) & "%" & @CRLF & "MP3 Daten in Buffer: " & Round(_BASS_EXT_MemoryBufferGetSize($aMP3Buffer) / 1024, 1) & "KB")
    Sleep(500)
    WEnd

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

    $iSize = _BASS_EXT_MemoryBufferGetSize($aMP3Buffer)
    $bMP3Data = _BASS_EXT_MemoryBufferGetData($aMP3Buffer, $iSize)

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

    $hFile = FileOpen(@ScriptDir & "\Download.mp3", 18)
    FileWrite($hFile, $bMP3Data)
    FileClose($hFile)

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

    _Exit()

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

    Func _Exit()
    _BASS_StreamFree($hStream)
    _BASS_EXT_MemoryBufferDestroy($aMP3Buffer)
    _BASS_Free()
    Exit
    EndFunc ;==>_Exit

    [/autoit]

    E

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™