MIDI - MIDIIN auslesen
MIDI - MIDIIN auslesen
Moin!
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?
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?
-
- Beiträge: 72
- Registriert: Do 20. Jul 2017, 23:47
- OS, Lazarus, FPC: Win7 und Win10
- CPU-Target: xxBit
- Wohnort: Südheide (Schnuckenland)
Re: MIDI - MIDIIN auslesen
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
ü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.
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.
Re: MIDI - MIDIIN auslesen
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.
Ich glaube ich habe die Verschachtelung jetzt geblickt.
Danke nochmal...
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.
Ich glaube ich habe die Verschachtelung jetzt geblickt.
Danke nochmal...
- Jorg3000
- Lazarusforum e. V.
- Beiträge: 169
- Registriert: So 10. Okt 2021, 10:24
- OS, Lazarus, FPC: Win64
- Wohnort: NRW
Re: MIDI - MIDIIN auslesen
Off topic: Der Erfinder des MIDI-Standards ist vor 4 Tagen gestorben
https://www.heise.de/news/MIDI-Entwickl ... 31668.html
https://www.heise.de/news/MIDI-Entwickl ... 31668.html
-
- Beiträge: 72
- Registriert: Do 20. Jul 2017, 23:47
- OS, Lazarus, FPC: Win7 und Win10
- CPU-Target: xxBit
- Wohnort: Südheide (Schnuckenland)
Re: MIDI - MIDIIN auslesen
Jorg3000, danke für die Info. Das hatte ich noch gar nicht mitbekommen.
Beeindruckend, was Dave Smith alles entwickelt hat.
Beeindruckend, was Dave Smith alles entwickelt hat.
- 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
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
-
- Beiträge: 72
- Registriert: Do 20. Jul 2017, 23:47
- OS, Lazarus, FPC: Win7 und Win10
- CPU-Target: xxBit
- Wohnort: Südheide (Schnuckenland)
Re: MIDI - MIDIIN auslesen
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.
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.
Re: MIDI - MIDIIN auslesen
Fehler bei mir war das bereits ein anderes Programm MIDI belegt hatte.
Jetzt funktioniert alles Prima!!
Danke für die Hilfe.
Jetzt funktioniert alles Prima!!
Danke für die Hilfe.