Daten von Midi-Port lesen
Übersicht

![]() |
4pacBetreff: Daten von Midi-Port lesen |
![]() Antworten mit Zitat ![]() |
---|---|---|
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... ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
http://www.soundboy.de/downloa...y_midi.pdf
könnte auch noch ganz gut sein. |
||
vertex.dreamfall.at | GitHub |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group