MIDI - MIDIIN auslesen

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
ExMex
Beiträge: 3
Registriert: Do 26. Mai 2022, 18:59

MIDI - MIDIIN auslesen

Beitrag von ExMex »

Moin! :D

Ich habe folgende Datei verwendet.

http://breakoutbox.de/pascal/midi/midi.pas

Ich würde gerne das MIDIIN Signal auslesen.

// midi data event - ATTENTION - This code is executed inside a CALLBACK PROCEDURE !!!
property OnMidiData: TOnMidiInData read fOnMidiData write fOnMidiData;

Wie kann ich das anstellen?

Ich möchte gerne feststellen ob eine Taste am MIDI Gerät gedrückt wird.

Kann jemand helfen?

TSchnuckenbock
Beiträge: 71
Registriert: Do 20. Jul 2017, 23:47
OS, Lazarus, FPC: Win7 und Win10
CPU-Target: xxBit
Wohnort: Südheide (Schnuckenland)

Re: MIDI - MIDIIN auslesen

Beitrag von TSchnuckenbock »

Moin,

lad' dir mal von der selben Internetseite das Projekt "MidiDemo.zip"

http://breakoutbox.de/pascal/midi/MidiDemo.zip

runter. Da ist deine verlinkte Datei "Midi.pas" mit drin.
Dann entpacken und in Lazarus öffnen. Ich hab's mit Lazarus 2.0.6 probiert und es funktionierte.

Dann in der Demo klick auf den Button "Open all Devices" und anschließend erzeugst du mit deinem Midigerät einen Midi-Event, der dann in deiner Midi-Schnittstelle ankommen sollte. Ich hab 'ne Taste auf meinem Akai-MPK-irgendwas gedrückt.
Diese Event erscheint dann in Hex-Darstellung in der Liste des Programs.

Wieso ist das so?

Schau dir die Methode "TForm1.FormCreate" an. Da gibts die Zeile

Code: Alles auswählen

...
MidiInput.OnMidiData:= @Self.OnMidiInData;
...

über die du den MidiEvent ("TMidiInput.fOnMidiData")aus der Midi.pas verbindest mit dem Eventhandler (also der Procedure) "TForm1.OnMidiInData".

In der "procedure MidiInCallback" wird der Event abgefeuert und du landest in der "TForm1.OnMidiInData".

Setze z.B. mal einen Brechpunkt/Haltpunkt in der "TForm1.OnMidiInData" und schau dir den Aufrufstack/Calls stack an. Da kannst du sehen, was da abgeht.

ACHTUNG: Im Eventhandler "TForm1.OnMidiInData" geht's dann mit einem Postmessage weiter. Der dortige Kommentar läßt mich vermuten, daß in den Projekt mit Threads gearbeitet wird. Ich denke die Interrupt-Sache auf der Schnittstelle. Siehe Callback-Methode "MidiInCallback".

Man darf nicht aus einem anderen Thread/Prozess irgendwas an der Benutzer-Oberfläche des Hauptprogramms/-Threads machen.....das knallt. Durch das Postmessage findet aber eine Entkopplung statt, so daß die "Daten" an der Oberfläche (Ausgabeliste) angezeigt werden können.

Gruß vom Schnuckenbock.

ExMex
Beiträge: 3
Registriert: Do 26. Mai 2022, 18:59

Re: MIDI - MIDIIN auslesen

Beitrag von ExMex »

Jo, Vielen Dank!

Ich glaube das Problem liegt bei mir woanders. Ich habe 2 externe Midigeräte angeschlossen und von keinem erscheint ein Signal.
Sie werden aber in der Liste der Midigeräte aufgeführt und als geöffnete Geräte aufgeführt, sowie auch in der Liste für Inputs.

Ich werde es mal auf einem anderen Rechner testen.

:oops: :mrgreen:

Ich glaube ich habe die Verschachtelung jetzt geblickt.
Danke nochmal...

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 168
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: MIDI - MIDIIN auslesen

Beitrag von Jorg3000 »

Off topic: Der Erfinder des MIDI-Standards ist vor 4 Tagen gestorben
https://www.heise.de/news/MIDI-Entwickl ... 31668.html

TSchnuckenbock
Beiträge: 71
Registriert: Do 20. Jul 2017, 23:47
OS, Lazarus, FPC: Win7 und Win10
CPU-Target: xxBit
Wohnort: Südheide (Schnuckenland)

Re: MIDI - MIDIIN auslesen

Beitrag von TSchnuckenbock »

Jorg3000, danke für die Info. Das hatte ich noch gar nicht mitbekommen.

Beeindruckend, was Dave Smith alles entwickelt hat.

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: MIDI - MIDIIN auslesen

Beitrag von Winni »

ExMex hat geschrieben:
Fr 3. Jun 2022, 21:26

Ich werde es mal auf einem anderen Rechner testen.
Hi!

Hol Dir doch mal einen Atari ST. Der konnte 1986 schon problemlos Midi dank des OnBoard-Chips und hatte somit Einzug in die europäische Musiker-Welt. [Die Amis benutzten meistens Macs ]. Ich hab noch Anfang der 2010er Atari STs auf Bühnen gesehen - meistens "nackend" ohne das Plastik-Gehäuse in 19-Zoll-Racks eingebaut.

Lesenswert: https://www.stcarchiv.de/stc2000/03/midi-audio

Winni

TSchnuckenbock
Beiträge: 71
Registriert: Do 20. Jul 2017, 23:47
OS, Lazarus, FPC: Win7 und Win10
CPU-Target: xxBit
Wohnort: Südheide (Schnuckenland)

Re: MIDI - MIDIIN auslesen

Beitrag von TSchnuckenbock »

Also auf dem C64 ging MIDI auch. Das weiß ich aus eigener Erfahrung. Ich hatte mir damals ein MIDI-Interface über irgendeine Quelle aus der Zeitschrift "Keyboards" bestellt. Das war eine Platine mit den MIDI-Buchsen und man steckte das Ding nach Erinnerung in den Expension-Port vom C64. Ich hatte noch etwas Holz drumgebastelt als Schutz.
In der Zeitschrift "Keybords" waren auch die 4 (?) Routinen in Assembler abgedruckt, über die man das Interface ansprechen konnte. Das Hauptprogramm hatte ich immer in Basic und für die MIDI-Sache und alles was zeitkritisch war dann Assembler, was aus dem Basic-Programm heraus angesprungen wurde.

Das waren noch Zeiten.......damals waren gerade Steinberg und CLab am Start und eroberten den Markt mit ihrer Software.
Die schwenkten dann übrigens auf den Atari um, sobald der auf dem Markt war. Eben wegen dem eingebauten MIDI-Interface.

ExMex
Beiträge: 3
Registriert: Do 26. Mai 2022, 18:59

Re: MIDI - MIDIIN auslesen

Beitrag von ExMex »

Fehler bei mir war das bereits ein anderes Programm MIDI belegt hatte.

Jetzt funktioniert alles Prima!!

Danke für die Hilfe. :D

Antworten