BassMidi.au3 ??

  • Hey @ all,
    ich hab soeben die BassMidi.dll runtergeladen. Gibt es dazu eigentlich schon eine BassMidi.au3? Ich habe in Google dazu nichts gefunden.

    mfG
    Developer30

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."

  • probieren kann man es ja mal^^. nur erfolg ist bei mir nicht garantiert xD

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."

  • Nimm am besten eine der mitgelieferten Quellcodes (z.b. BassMidi.bas im Verzeichnis VB) und übertrage Zeile für Zeile in AutoIt Code
    Dann hast du mal alle Konstanten und Funktionsheader fertig.

    Für die Funktionen selber halte dich an eine der fertigen UDF´s, z.B.: BassMix.au3
    Da kannst du auch vergleichen, wie die Funktionen aus BassMix.chm übersetzt wurden und es dann nachmachen...

    Ist zwar etwas Zeitaufwändig, aber sollte nicht allzu schwierig sein...

  • danke für die Tipps :)
    ich werde es mal probieren

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."

  • wenn im VB Script sowas wie

    Code
    Type BASS_MIDI_FONT
        font As Long           
        preset As Long        
        bank As Long
    End Type


    steht. Muss ich das auch beachten? Wenn ja, wie?

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."

  • ich habe eine Frage bezüglich Pointern. Also ich habe hier ein Auszug aus der BassMidi.chm:

    Zitat von BassMidi.chm

    DWORD BASS_MIDI_StreamGetEvents(
    HSTREAM handle,
    DWORD track,
    DWORD filter,
    BASS_MIDI_EVENT *events
    );


    BASS_MIDI_EVENT sieht in VB so aus:

    Spoiler anzeigen
    Code
    Type BASS_MIDI_EVENT
    	event_ As Long          ' MIDI_EVENT_xxx
    	param As Long
    	chan As Long
    	tick As Long            ' event position (ticks)
    	pos As Long             ' event position (bytes)
    End Type


    und in C so:

    Spoiler anzeigen
    Code
    typedef struct {
    	DWORD event;		// MIDI_EVENT_xxx
    	DWORD param;
    	DWORD chan;
    	DWORD tick;			// event position (ticks)
    	DWORD pos;			// event position (bytes)
    } BASS_MIDI_EVENT;


    jetzt hab ich das in AutoIt so zusammengefasst:

    Spoiler anzeigen
    [autoit]

    Global Const $BASS_MIDI_EVENT = "long event_; long param; long chan; long tick; long pos"

    [/autoit]


    Die Beschreibung von events lautet: Pointer to an array to receive the events... NULL = get the number of events without getting the events themselves.

    Wie komme ich nun in AutoIt auf den Richtigen Wert für >> BASS_MIDI_EVENT *events << heraus? Wie komme ich auf events und wie muss ich BASS_MIDI_EVENT auf events anwenden?

    mfG
    Developer30

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."

  • Nicht getestet, aber ich vermute, daß es so funktionieren sollte:

    [autoit]

    Func _BASS_MIDI_StreamGetEvents($handle, $track, $filter)
    Local $BASS_ret_ = DllCall($_ghBassMidiDll, "dword", "BASS_MIDI_StreamGetEvents", "dword", $handle, "dword", $track, "dword", $filter, "ptr", 0)
    If @error Then Return SetError(1, 1, 0)
    If $BASS_ret_[0] = $BASS_DWORD_ERR Then Return SetError(_BASS_ErrorGetCode(), 0, 0)

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

    Local $iCnt = $BASS_ret_[0]
    Local $tEvents = DllStructCreate("DWORD event[" & $iCnt & "]; DWORD param[" & $iCnt & "]; DWORD chan[" & $iCnt & "]; DWORD tick[" & $iCnt & "]; DWORD pos[" & $iCnt & "];")

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

    $BASS_ret_ = DllCall($_ghBassMidiDll, "dword", "BASS_MIDI_StreamGetEvents", "dword", $handle, "dword", $track, "dword", $filter, "ptr", DllStructGetPtr($tEvents))
    If @error Then Return SetError(1, 1, 0)
    If $BASS_ret_[0] = $BASS_DWORD_ERR Then Return SetError(_BASS_ErrorGetCode(), 0, 0)

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

    Local $aReturn[$iCnt + 1][5]
    $aReturn[0][0] = $iCnt
    For $i = 1 To $iCnt
    $aReturn[$i][0] = DllStructGetData($tEvents, "event", $i)
    $aReturn[$i][1] = DllStructGetData($tEvents, "param", $i)
    $aReturn[$i][2] = DllStructGetData($tEvents, "chan", $i)
    $aReturn[$i][3] = DllStructGetData($tEvents, "tick", $i)
    $aReturn[$i][4] = DllStructGetData($tEvents, "pos", $i)
    Next
    Return $aReturn
    EndFunc

    [/autoit]

    mfgE