Daten von Midi-Port lesen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

4pac

Betreff: Daten von Midi-Port lesen

BeitragSo, Aug 15, 2004 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Tag liebe Coderz,

kann mir einer sagen, wie ich unter BlitzBasic (ggf. auch unter Zuhilfename externer Libs/DLLs) Bytes auslesen kann, die über den Midi-Port der Soundkarte reinkommen? Um sich die Daten raw auf der Konsole anzeigen zu lassen oder auf einem Grafikbildschirm als Kurven o.ä. ausgeben zu lassen, und beispielsweise sowas wie den früheren "Kandinsky Music Painter" umzusetzen, den es für den Atari ST gab, und der Midi-Arrangements in abstrakte Computergrafiken umgesetzt hat?

Abenteuerliche, ja schon verwegene Konstruktionen habe ich heute Nachmittag zusammen mit einem Coder-Kumpel durchdacht - z.B. die Ausgaben vom Midi-Port mit einem schlauen Tool, daß es bereits gibt, umleiten in einen TCP/IP-Stream und dann mit BlitzBasic TCPStream über´s Netzwerk abgreifen... Confused haut aber alles nicht hin, und selbst wenn, wäre es für meinen Geschmack rechtlich wie auch technisch zu umständlich, mit einem fertigen Tool von anderen als Kernstück zu arbeiten, das man nicht ohne weiteres distribuieren darf.

Unter GFA-Basic (vor allem früher am Atari) ging das recht einfach, jeder Port hatte per GFA-Befehlssatz eine Nummer/Flag, unter der man Abfragen konnte, was am jeweiligen Port an Informationen reinkam. Ich habe keinen Plan von GFA-Basic, aber mein Kollege hat mir Quellcodes gezeigt und mir den Befehlssatz in Kurzform erklärt (und ich ihm dafür den von BlitzBasic). Leider hängt GFA dafür in vielen anderen Funktionalitäten Blitz hinterher, deshalb würde für uns mehr dafür sprechen, unsere Experimente in Blitz abzuwicklen.

Dieses Midi-Port-Problem stellt bei der Umsetzung unserer Ideen, in BlitzBasic Midi-Daten einzulesen, vor allem auch in Echtzeit, sie zu manipulieren und/oder zu verwursten zu coolen Visuals, das Nadelöhr schlechthin dar. Wäre cool, wenn uns jemand einen Tipp geben könnte, wie wir dieses Problem lösen können.

Viele Grüße,
Thomas

Vertex

BeitragSo, Aug 15, 2004 23:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Den ersten Tipp den ich dir geben kann ist die Adresse 0x201 ($201 in Blitz). Der Rest mit den Userlibs zum Ansprechen von Ports solltest du eigentlich kennen.
mfg olli
vertex.dreamfall.at | GitHub

4pac

BeitragMo, Aug 16, 2004 16:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hört sich verheißungsvoll an...

Vertex hat Folgendes geschrieben:
Der Rest mit den Userlibs zum Ansprechen von Ports solltest du eigentlich kennen.
mfg olli


Sollte ich? Woher? Ich hab nie mit Userlibs gearbeitet. Das Einbinden grundsätzlich bekomme ich sicher nach einem Beispiel hin, das ich hier im Forum finden kann. Aber wie bzw. mit welchen Userlibs man nun speziell Ports anspricht, ist mir leider nicht bekannt, ein kurzes Beispiel wäre cool.

Grüße,
Thomas

Vertex

BeitragMo, Aug 16, 2004 16:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Nee, ich bin davon ausgegangen, das du mit der Userlib aus dem LPT-Port Thread zurecht kommst.
Ersteinmal kannst du generell jedes Device unter Windows mit den API-befehlen CreateFile ansprechen. Da Blitz letzendlich auch mit dieser API-Funktion Dateien öffnet, ist es oft möglich, Devices direkt über Blitzbefehle zu steuern. Probleme ergeben sich aber bei z.B. COM spezifischen API-befehlen zum festlegen der Baudrate, Timeouts, Stopbits etc.(jaja, man kann diese Werte auch noch direkt als Dateiname angeben, aber dafür nicht nachträglich ändern), da das Blitzhandle nicht das Dateihandle von CreateFile ist.
Weiter kann man auch Devices wie z.B. LPT oder Systemlautsprecher über die besagte Userlib ansteuern. Unter Win2K oder XP ist es glaube ich so, das nur Treiber eine Zugriffsberechtigung zu einem Device haben. Somit braucht man glaube ich vorher einen Gameporttreiber um über CreateFile diesen Port anzusprechen, die IO Userlib sollte somit erst garnicht ausgeführt werden können.
USB-Devices sind über diese IO Userlib schwer oder garnicht anzusteuern. Habe mal einen alten Assemblercode zum ansteuern von USB-Mäusen gesehen, und da erschlägt es einen direkt, wieviel Aufwand das ist. Somit würde ich hier das ganze wirklich nur über Treiber realisieren (kann man wieder öffnen in dem man z.B. bei den USB-Experimentierboards von Cypress als Dateiname "ezusb1" oder so änlich angibt).
Im Net findet man leider ganz wenig über solche Sachen.

Zu dem beispiel:
Code: [AUSKLAPPEN]
While Not KeyDown(1)
   Cls : Locate 0, 0
   Print ReadPort($201)
Wend

Habe es mal mit einem 2 Button Joystick ausprobiert, und es ergaben sich folgende Werte:
46799860 ; Button A und B nicht gedrückt
46799844 ; Button A gedrückt
46799828 ; Button B gedrückt
46799812 ; Button A und B gedrückt
Weiter weiss ich nur, das X, Y und Z Achse über PWM(Pulsweitenmodulation) an den Gameport geschickt werden. Hatt getsren eine schöne Seite bei google gefunden, weiss abe rnicht mehr wie sie hieß.
mfg olli
vertex.dreamfall.at | GitHub

Vertex

BeitragSo, Aug 22, 2004 12:49
Antworten mit Zitat
Benutzer-Profile anzeigen
http://www.soundboy.de/downloa...y_midi.pdf
könnte auch noch ganz gut sein.
vertex.dreamfall.at | GitHub

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group