Mag sein, daß ich da jetzt daneben liege, aber Includes sind immer im selben Verzeichnis wie das Hauptscript
Auch, wenn die Datei in einem anderen Verzeichnis liegt, denn beim Ausführen/Compilieren wird der Code ja in das Hauptscript eingefügt...
E
Mag sein, daß ich da jetzt daneben liege, aber Includes sind immer im selben Verzeichnis wie das Hauptscript
Auch, wenn die Datei in einem anderen Verzeichnis liegt, denn beim Ausführen/Compilieren wird der Code ja in das Hauptscript eingefügt...
E
Hier findest du in MemFont.zip das Script Generate.au3:
UDF - TrueType Fonts im Script mitgeben und verwenden
Das kannst du für jede Art von Datei verwenden
E
Hi
Hab da was gebastelt:
#include <GDIP.au3>
#include <GDIPlus.au3>
#include <GDIPlusConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("MustDeclareVars", 1)
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]Global $aImage = _LoadMultiPageImage(@ScriptDir & "\MultiPage.Tif")
If @error Or Not IsArray($aImage) Then
MsgBox(0, "ERROR", "Mehrseitiges Bild konnte nicht geöffnet werden")
Exit
EndIf
Global $iWidth = _GDIPlus_ImageGetWidth($aImage[1]) * 96 / _GDIPlus_ImageGetHorizontalResolution($aImage[1])
Global $iHeight = _GDIPlus_ImageGetHeight($aImage[1]) * 96 / _GDIPlus_ImageGetVerticalResolution($aImage[1])
Global $hGui = GUICreate("Mehrseitiges Bild", $iWidth, $iHeight)
GUISetState()
Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)
Global $hBmpBuffer = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hGraphics)
Global $hGfxBuffer = _GDIPlus_ImageGetGraphicsContext($hBmpBuffer)
_GDIPlus_GraphicsClear($hGfxBuffer, 0xFFFFFFFF)
GUIRegisterMsg($WM_PAINT, "WM_PAINT")
GUIRegisterMsg($WM_ERASEBKGND, "WM_ERASEBKGND")
For $i = 1 To $aImage[0]
_GDIPlus_ImageRotateFlip($aImage[$i], 2)
_GDIPlus_GraphicsDrawImage($hGfxBuffer, $aImage[$i], 0, 0)
_GDIPlus_GraphicsDrawImage($hGraphics, $hBmpBuffer, 0, 0)
MsgBox(0, "Seite " & $i & "/" & $aImage[0], "Diese Seite wurde um 180° gedreht...")
Next
_SaveMultiPageImage($aImage, @ScriptDir & "\MultiPage_Rotated.tif")
If @error Then
MsgBox(0, "ERROR", "Mehrseitiges Bild konnte nicht gespeichert werden")
Exit
EndIf
MsgBox(0, "", "Mehrseitiges Bild wurde als TIFF gespeichert...")
For $i = 1 To $aImage[0]
_GDIPlus_BitmapDispose($aImage[$i])
Next
_GDIPlus_GraphicsDispose($hGfxBuffer)
_GDIPlus_BitmapDispose($hBmpBuffer)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
Func _SaveMultiPageImage($aImage, $sPath)
If Not IsArray($aImage) Then Return SetError(1, 1, False)
Local $sExt = __GDIPlus_ExtractFileExt($sPath)
Local $sCLSID = _GDIPlus_EncodersGetCLSID($sExt)
If $sCLSID = "" Then Return SetError(1, 2, False)
Local $tData = DllStructCreate("int Data")
DllStructSetData($tData, "Data", $GDIP_EVTMULTIFRAME)
Local $tParams = _GDIPlus_ParamInit(1)
_GDIPlus_ParamAdd($tParams, $GDIP_EPGSAVEFLAG, 1, $GDIP_EPTLONG, DllStructGetPtr($tData, "Data"))
_GDIPlus_ImageSaveToFileEx($aImage[1], $sPath, $sCLSID, DllStructGetPtr($tParams))
[/autoit] [autoit][/autoit] [autoit]$tParams = _GDIPlus_ParamInit(1)
DllStructSetData($tData, "Data", $GDIP_EVTFRAMEDIMENSIONPAGE)
_GDIPlus_ParamAdd($tParams, $GDIP_EPGSAVEFLAG, 1, $GDIP_EPTLONG, DllStructGetPtr($tData, "Data"))
For $i = 2 To $aImage[0]
_GDIPlus_ImageSaveAddImage($aImage[1], $aImage[$i], DllStructGetPtr($tParams))
If @error Then Return SetError(1, $i + 1, False)
Next
Return True
EndFunc ;==>_SaveMultiPageImage
Func _LoadMultiPageImage($sPath)
Local $hImage = _GDIPlus_ImageLoadFromFile($sPath)
If @error Then Return SetError(1, 1, False)
Local $iCount = _GDIPlus_ImageGetFrameDimensionsCount($hImage)
If Not $iCount Then Return SetError(1, 2, False)
Local $aList = _GDIPlus_ImageGetFrameDimensionsList($hImage)
If @error Or Not IsArray($aList) Then Return SetError(1, 3, False)
Local $iPixelFormat, $iImageW, $iImageH
Local $aReturn[1], $iCnt = 0
For $i = 1 To $aList[0]
$iCount = _GDIPlus_ImageGetFrameCount($hImage, $aList[$i])
For $j = 1 To $iCount
_GDIPlus_ImageSelectActiveFrame($hImage, $aList[$i], $j)
$iCnt += 1
ReDim $aReturn[$iCnt + 1]
$iPixelFormat = _GDIPlus_ImageGetPixelFormat($hImage)
$iImageW = _GDIPlus_ImageGetWidth($hImage)
$iImageH = _GDIPlus_ImageGetHeight($hImage)
$aReturn[$iCnt] = _GDIPlus_BitmapCloneArea($hImage, 0, 0, $iImageW, $iImageH, $iPixelFormat)
Next
Next
_GDIPlus_ImageDispose($hImage)
$aReturn[0] = $iCnt
Return $aReturn
EndFunc ;==>_LoadMultiPageImage
Func WM_PAINT($hWnd, $uMsgm, $wParam, $lParam)
_GDIPlus_GraphicsDrawImage($hGraphics, $hBmpBuffer, 0, 0)
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_PAINT
Func WM_ERASEBKGND($hWnd, $uMsgm, $wParam, $lParam)
_GDIPlus_GraphicsDrawImage($hGraphics, $hBmpBuffer, 0, 0)
Return True
EndFunc ;==>WM_ERASEBKGND
E
Ups! Ich hab tatsächlich vergessen eine Soundkartenauswahl zu machen!
Muß man derzeit bei
_BASS_Init(0, -1, 44100)
[/autoit](mitleren Wert verändern) manuell einstellen...
-1 = Standart Soundkarte
1 = erster Ausgang / Soundkarte
2 = zweiter
usw...
meistens sollte -1 aber funktionieren!
name22: die Potis verstellt man mit Maus Links-Rechts / die Fader mit Maus Auf-Ab
Rechte Maustaste = Feineinstellung
Werd mir deinen Vorschlag aber für die nächste Version parat halten - Danke!
Hab es nicht getestet, aber es sollte funktionieren, wenn du das Script mit
[autoit]#AutoIt3Wrapper_UseX64=n
[/autoit]kompilierst/ausführst
Hi
Ich habe mal begonnen mich mit der Generierung von Wellenformen (Sinus, Rechteck usw...) und Filter zu beschäftigen.
Dann bin ich reingekippt und dieser Synthesizer ist entstanden:
Demnächst werde ich das Ding komplett neu schreiben, da die CPU-Auslastung einfach viel zu hoch ist.
Ich hab einfach zu sehr um den heißen Brei herumprogrammiert
Trotzdem hier mal diese Version, welche (abgesehen von ein paar bugs) ganz gut funktioniert - finde ich
Läuft nur unter 32bit!
Falls sich jemand mit Synthesizern auskennt, würde ich mich über neue Presets freuen, bzw über gewünschte Features die ich in die neue Version einbauen soll.
Geplant hab ich mal 3 OSC´s, FM und Apreggiator
Die BassSynth.dll, die die eigentlichen Berechnungen durchführt, ist in Lazarus programmiert
Steuerung mit Tastatur:
Der Synthesizer kann auch über ein angeschlossenes Midikeyboard gespielt werden
Ich verwende die Schriftart Tahoma - ich hoffe, daß diese auf allen euren Systemen vorhanden ist, sonst passt die grafische Darstellung nicht...
Na dann
Viel Spaß!
E
Hi
Hier hab ich mal wieder ein paar kleine GDI+ Spielereien für euch:
Update: 3D-Ball und MovingCurves
Viel Vergnügen...
E
Der einfachste Weg ist den Gain Parameter eines Effektes zu verwenden; z.B.:
#include "Bass.au3"
[/autoit] [autoit][/autoit] [autoit]$sFile = FileOpenDialog("Open...", "", "playable formats (*.MP3;*.MP2;*.MP1;*.OGG;*.WAV;*.AIFF;*.AIF)")
[/autoit] [autoit][/autoit] [autoit]GUICreate("Test")
$cSlider = GUICtrlCreateSlider(10, 10, 240, 30)
GUICtrlSetLimit(-1, 120)
GUICtrlSetData(-1, 60)
GUISetState()
_BASS_Startup()
_BASS_Init(0, -1, 44100, 0, "")
$hStream = _BASS_StreamCreateFile(False, $sFile, 0, 0, BitOR($BASS_SAMPLE_FLOAT, $BASS_SAMPLE_LOOP))
$hFX = _BASS_ChannelSetFX($hStream, $BASS_FX_DX8_COMPRESSOR, 1)
_BASS_FXSetParameters($hFX, "0|0.01|50|0|1|0")
_BASS_ChannelPlay($hStream, True)
[/autoit] [autoit][/autoit] [autoit]$idB = 0
While _BASS_ChannelIsActive($hStream) And GUIGetMsg() <> -3
$iTemp = GUICtrlRead($cSlider) - 60
If $iTemp <> $idB Then
$idB = $iTemp
ToolTip($idB & " dB")
_BASS_FXSetParameters($hFX, $idB & "|0.01|50|0|1|0")
EndIf
Sleep(20)
WEnd
_Exit()
Func _Exit()
_BASS_ChannelRemoveFX($hStream, $hFX)
_BASS_StreamFree($hStream)
_BASS_Free()
Exit
EndFunc ;==>_Exit
Rein theoretisch könnte man das auch mit einer Mixingmatrix und einem Mixerchannel lösen (wenn man Werte größer als 1 verwendet), das hab ich aber noch nie probiert...
Oder mit einer DSP-Funktion, diese muss aber in einer anderen Sprache als .dll erstellt werden... (siehe callback tutorial in der Hilfe ;))
E
Alles anzeigenMeinst Du so etwas?
Spoiler anzeigen
[autoit]#include <GuiConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>$hGui = GUICreate("", 400, 300)
[/autoit] [autoit][/autoit] [autoit]
$hTab = GUICtrlCreateLabel("", 10, 10, 380, 280)
GUISetState()GUIRegisterMsg($WM_KILLFOCUS, "WM_KILLFOCUS")
[/autoit] [autoit][/autoit] [autoit]
GUIRegisterMsg($WM_SETFOCUS, "WM_SETFOCUS")
GUIRegisterMsg($WM_ACTIVATEAPP, "WM_ACTIVATEAPP")While GUIGetMsg() <> -3
[/autoit] [autoit][/autoit] [autoit]
Sleep(10)
WEndFunc WM_KILLFOCUS($hWnd, $Msg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite("!KILLFOCUS " & $hGui & " " & $hWnd & " " & $wParam & @CRLF)
EndFunc ;==>WM_KILLFOCUSFunc WM_SETFOCUS($hWnd, $Msg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite("+SETFOCUS " & $hGui & " " & $hWnd & " " & $wParam & @CRLF)
EndFunc ;==>WM_SETFOCUSFunc WM_ACTIVATEAPP($hWnd, $Msg, $wParam, $lParam)
[/autoit]
If $wParam Then
ConsoleWrite("+Activated " & $hGui & " " & $hWnd & " " & $wParam & @CRLF)
Else
ConsoleWrite("-Deactivated " & $hGui & " " & $hWnd & " " & $wParam & @CRLF)
EndIf
Return $GUI_RUNDEFMSG
EndFunc
Ja! Dankeschön!
Wenn man bei diesem Script die Zeile 4 aktiviert, dann funktionieren WM_SETFOCUS u WM_KILLFOCUS nicht mehr!
[autoit]#include <WindowsConstants.au3>
[/autoit][autoit][/autoit][autoit]$hGui = GUICreate("", 400, 300)
;$hTab = GUICtrlCreateTab(0, 0, 400, 300)
GUISetState()
GUIRegisterMsg($WM_KILLFOCUS, "WM_KILLFOCUS")
GUIRegisterMsg($WM_SETFOCUS, "WM_SETFOCUS")
While GUIGetMsg() <> -3
Sleep(10)
WEnd
Func WM_KILLFOCUS($hWnd, $Msg, $wParam, $lParam)
ConsoleWrite("!KILLFOCUS " & $hGui & " " & $hWnd & " " & $wParam & @CRLF)
EndFunc ;==>WM_KILLFOCUS
Func WM_SETFOCUS($hWnd, $Msg, $wParam, $lParam)
ConsoleWrite("+SETFOCUS " & $hGui & " " & $hWnd & " " & $wParam & @CRLF)
EndFunc ;==>WM_SETFOCUS
Hat jemand eine Idee oder Lösung für dieses Problem?
Danke
E
AutoIt Scripte haben immer ein verstecktes Fenster. Da könntest du ein InputControl erstellen und von einem anderen Script aus via ControlSetText etwas reinschreiben.
Dazu gibt es auch schon Beispiele, die finde ich aber grad nicht...
oder du verwendest dies hier: Exchange Variables UDF Beta
E
Was mich auchnoch interessiert sind die Matrix funktionen, ich hab es bis jetzt noch nicht geschafft die Achse in den Mittelpunkt zu setzen. Ich denke der Trick liegt in
[autoit]_GDIPlus_MatrixTranslate($hMatrix, -$iW2, -$iH2)
[/autoit]
Richtig! ![]()
_GDIPlus_MatrixTranslate setzt quasi den Offset auf einer "Graphics"
Der Rotationspunkt liegt auf den Koordinaten 0/0, deshalb muss man vorher den Offset in die Mitte verschieben
_GDIPlus_MatrixTranslate($hMatrix, $iW / 2, $iH / 2)
[/autoit]dann Rotieren
[autoit]_GDIPlus_MatrixRotate($hMatrix, 0.3, False)
[/autoit]und dann wieder den Offset zurücksetzen
[autoit]_GDIPlus_MatrixTranslate($hMatrix, -$iW / 2, -$iH / 2)
[/autoit], denn erstens wird sonst auch das Bild mit diesem Offset gezeichnent und zweitens addieren sich die Werte und beim zweiten Schleifendurchlauf hat man dann schon den doppelten Offset.
E
Sehr cool! ![]()
2 Verbesseungsvorschläge:
.) Du könntest auf BassEnc verzichten und die Wav selber herstellen. Wie das geht siehst du in BassExt.au3 bei der Funktion _BASS_EXT_SpVoice2Memory und dessen Beispielscript. Das Resultat kannst du direkt aus dem Speicher abspielen und/oder binär als Wav speichern.
.) Crossfades zwischen den Tönen berechnen. Vielleicht genügt es auch schon, wenn du immer die letzte Schwingung beim Nulldurchgang stoppst.
Und wenn du Lust hast noch Rechteck, Dreieck, Sägezahn usw -Wellen
...
E
Mit dieser UDF lassen sich Icons Toolbars erstellen, wie man sie von Mac oder z.B.: MobyDock, ObjectDock her kennt.
Beispiele sind im ZIP-Archiv enthalten.
Donwload:
Viel Spaß!
ps: für Alle, die das schon vom µIt her kennen: Es handelt sich um die selbe Version, ich hab noch nichts verändert!
Hier ein kurzes Beispiel:
[autoit]OnAutoItExitRegister("_DeRegister")
[/autoit][autoit][/autoit][autoit]HotKeySet("{ESC}", "_Exit")
[/autoit][autoit][/autoit][autoit]Global Const $EVENT_SYSTEM_FOREGROUND = 0x03
Global $hProc, $hHook
_RegisterWinEvent()
[/autoit][autoit][/autoit][autoit]While 1
Sleep(5000)
WEnd
Func _RegisterWinEvent()
Local $hProc = DllCallbackRegister("_WinEventProc", "none", "hwnd;int;hwnd;long;long;int;int")
Local $aRet = DllCall("User32.dll", "hwnd", "SetWinEventHook", "uint", $EVENT_SYSTEM_FOREGROUND, "uint", $EVENT_SYSTEM_FOREGROUND, "hwnd", 0, "ptr", DllCallbackGetPtr($hProc), "int", 0, "int", 0, "uint", 0x2)
If Not @error And IsArray($aRet) Then $hHook = $aRet[0]
EndFunc ;==>_RegisterWinEvent
Func _WinEventProc($hHook, $iEvent, $hWnd, $idObject, $idChild, $iEventThread, $iEventTime)
Switch $iEvent
Case $EVENT_SYSTEM_FOREGROUND
Switch $hWnd
Case 0
Case Else
ToolTip("Fenster: " & $hWnd & " Hat den Fokus", 10, 10)
EndSwitch
EndSwitch
EndFunc ;==>_WinEventProc
Func _DeRegister()
DllCall("user32.dll", "int", "UnhookWinEvent", "hwnd", $hHook)
DllCallbackFree($hProc)
EndFunc ;==>_DeRegister
Func _Exit()
Exit
EndFunc ;==>_Exit
E
Hi
Such mal nach WinEventHook.
Ich hab das bei IconDOck verwendet. DL-Link findest du hier: IconDock - Mac style Icon toolbar
Innerhalb des Scriptes solltest du mit dem Suchbegriff WinEventProc etwas finden können...
Bei Fragen einfach melden!
E
Hi eukalyptus,
find ich super das du die BASS noch mal hier im Deutschen Forum hochlädst. Die CHM Hilfe war ja in der englischen Version nicht dabei...
Es handelt sich wie gesagt um eine neuere Version der UDF, welche es im englischen Forum noch nicht gibt.
Natürlich wird´s auf autoitscript.com auch bald veröffentlicht, jedoch ist mir die Hilfe noch etwas zu "beta"
Außerdem muss ich das natürlich noch mit BrettF besprechen, der mit mir diese neue Version erstellt hat, jedoch seit Herbst nicht mehr viel Zeit für das Projekt hat..
...Ich hab mal die Hilfe mal kurz duchrgeguckt und gesehn das bei vielen Funktionen nur #AutoIt3Wrapper_UseX64=n als Beispiel steht...
Die meisten meiner Beispiele entstanden quasi als Nebenprodukt aus Hilfethreads. Wenn eine Funktion noch kein Beispiel hat, dann wurde dazu noch keine Frage gestellt
Und soviel Zeit hab ich auch nicht, um für alle Funktionen Beispiele zu schreiben (deshalb sind auch viele Beispielscripte gleich und umfassen mehrere Funktionen)
#AutoIt3Wrapper_UseX64=n sollte in jedem Beispiel vorkommen, da die dll´s im example Ordner 32bit sind und nur so die Scripte auch auf 64bit OS direkt lauffähig sind.
Vielleicht mach ich noch einen Thread auf, wo alle Funktionen ohne Beispiel gelistet sind und ihr aufgerufen werdet, welche zu erstellen...
Gibt es überhaubt eine Möglichkeit mit der BASS Dll selber Wave Dateien zu erstellen? Also einen Kanal öffnen und dann da Piep Töne nacheinander reinzuschreiben.
Ja!
Im Beispiel zu _BASS_Encode_Write wird genau das gemacht - allerdings nur 1s lang.
Weitere Beispiele die zeigen wie man Sampledaten selber generiert sind z.B.:
_BASS_EXT_StreamPutBufferData, $BASS_EXT_StreamProc und Draw_Sample_Synth in "Advanced Examples"
E