Probleme mit MidiOutOpen/Close: "schon geöffnet"

Ich habe folgendes Problem mit MidiOut: Ich bekomme den Midi-Port nicht brauchbar geöffnet.

Wenn ich MidiOutOpen in ein Hintergrund-Skript in die procedure OnLoad einbaue, dann meldet später ein Action-Skript den Fehler, der Midi-Port sei nicht geöffnet.

Hintergrund-Skript:

// Called after mAirList startup
procedure OnStartup;
begin
	MidiOutOpen(2);
end;

// Called before mAirList shutdown
procedure OnShutdown;
begin
	MidiOutClose(2);
end;

Schreibe ich MidiOutOpen in ein Action-Skript, meldet er beim zweiten Aufruf (logischerweise), dass der Port schon geöffnet ist.

Ich habe mir damit beholfen, den Port im Action-Skript zu öffnen und wieder zu schließen. Das hat aber zur Folge, dass mAirList dadurch auch jedesmal bei Open und/oder (?) Close $B0;$40;$00 … $BF;$40;$00 sendet, wie es pm98 schon 2012 beschrieben hat.

Action-Skript:

Begin SystemLog('WeWWe_Ultramizer_IN: Ultramizer aktiv'); MidiOutOpen(2); Sleep(1); MidiOut (2, $B0, $57, 1) ; Sleep(2); MidiOutClose(2); End.

Die Anwendung war relativ simpel: Ein Action-Skript soll einen Kompressor einschalten oder auf Bypass stellen. Daher machte das $B0;$40;$00 usw. keine Probleme.

Bei einem anderen Fall führt das aber dazu, dass gerade aktiviere Einstellungen durch diese $B0-Controller wieder deaktiviert werden.

Kurzum: Was muss ich tun, damit mAirList beim Starten MidiOut öffnet und Action-Skripte dann auch tatsächlich darauf zugreifen können?

Und: Was sollen diese $B0-Controller, die mAirList bei Open/Close sendet? Ich bin nicht so der MIDI-Profi, aber wenn ich es richtig sehe, ist $B0;$40 der Controller für das 1. Haltepedal. Offenbar setzt mAirList das 1. Haltepedal auf allen MIDI-Kanälen auf 0. Wozu? Warum nicht wenigstens ein All-Notes-Off-Befehl?

Übrigens habe ich mir bei dem Beispiel für das Action-Skript mit Sleep-Befehlen geholfen, weil sonst gar nichts beim Kompressor ankam. Trotzdem blieb das ganze unzuverlässig. Zufällig kam der Befehl manchmal beim Kompressor an, manchmal nicht. Als ob manches unterwegs verschluckt würde. Defekte Kabel kann ich ausschließen.

Kann jemand helfen?

Viele Grüße aus Hessen
Stefan

Versuchen Sie dies:

Begin
	SystemLog('WeWWe_Ultramizer_IN: Ultramizer aktiv');
	Sleep(1);
	MidiOut (2, $B0, $57, 1) ;
	Sleep(2);
End.

Sie öffnen Midi 2x.

Welche mAirList-Version? OnStartup und OnShutdown gibt es schon länger nicht mehr, heißt jetzt OnLoad und OnUnload.

Frohes Neues! :slight_smile:

Version ist 5.2.0.2905

Okay, wenn es OnStartup und OnShutdown nicht mehr gibt, nimm das mal bitte aus der Background Script Template.mls raus.

OnLoad/Unload wird dann aber bei jedem Aufruf des Scripts ausgeführt, richtig? Ich hatte zunächst auch OnLoad/Unload genutzt, aber das half auch nicht. Werde das noch mal ausprobieren.

Und dann komme ich ja auch wieder zu diesem Problem:

Das hat aber zur Folge, dass mAirList dadurch auch jedesmal bei Open und/oder (?) Close $B0;$40;$00 ... $BF;$40;$00 sendet, wie es pm98 schon 2012 beschrieben hat. Und: Was sollen diese $B0-Controller, die mAirList bei Open/Close sendet? Ich bin nicht so der MIDI-Profi, aber wenn ich es richtig sehe, ist $B0;$40 der Controller für das 1. Haltepedal. Offenbar setzt mAirList das 1. Haltepedal auf allen MIDI-Kanälen auf 0. Wozu? Warum nicht wenigstens ein All-Notes-Off-Befehl?

Was hat es damit auf sich?

Viele Grüße
Stefan