Midi-Library 0.4

Übersicht BlitzBasic DLLs und Userlibs

Neue Antwort erstellen

Chester

Betreff: Midi-Library 0.4

BeitragSa, Jan 23, 2010 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
UPDATED 17.01.2011 - version 0.4
------------------
Hi,

diese DLL hab ich eigentlich schon länger nur für meinen Gebrauch programmiert, habe sie aber jetzt mal so programmiert, dass auch andere damit was anfangen können.

Damit kann man z.B. Keyboards aufnehmen, Geräte mit Midischnittstelle steuern, Computer mit Midischalter steuern, Midiklänge mit Microsoft GS Wavetable SW Synth abspielen uvm...

Dabei sind 4 Beispiele, die zum Verstehen reichen dürften.

Download

Funktionen:

Verbindung herstellen:
CountMidiInDevices() - Gibt die Anzahl der MidiIn Schnittstellen zurück
CountMidiOutDevices() - Gibt die Anzahl der MidiOut Schnittstellen zurück
MidiInGetName$(ID) - Gibt den Namen einer MidiIn Schnittstelle zurück, anhand der ID(0-CountMidi...)
MidiOutGetName$(ID) - s.o., das selbe für MidiOut
MidiOutOpen(ID) - öffnet MidiOut Schnittstelle
MidiInOpen(ID) - öffnet MidiIn Schnittstelle
MidiInStart(hMidi) - startet MidiIn Schnittstelle

Auswerten:
MidiEvent(hMidi) - gibt True zurück, wenn Event/Callback aufgerufen wurde, dann folgende Befehle abrufbar:
MidiGetParam1 - gibt Param1, in der Regel den Midibefehl selbst, zurück
MidiGetParam2 - gibt Param2, in der Regel ein Zeit-Offset , zurück
MidiGetMsg - gibt die Statusmessage zurück, z.B. MIM_DATA, MOM_DONE o.ä. (Verwendung unnötig)
MidiGetHandle - gibt das Handle der Midischnittstelle zurück (Verwendung unnötig)
MidiGetInstance - gibt die Instanz zurück (Verwendung unnötig)

Senden:
MidiOutShortMsg(hMidi,msg) - sendet eine 4-Byte Anweisung

Beenden:
MidiInStop(hMidi) - beendet eine MidiIn Verbindung
MidiInClose(hMidi) - schließt MidiIn Schnittstelle
MidiOutClose(hMidi) - schließt MidiOut Schnittstelle

Ganz hilfreiche Seite über Midi: http://www.zem-college.de/midi/mc_allg.htm

Lg,
Chester
  • Zuletzt bearbeitet von Chester am Mo, Jan 17, 2011 20:23, insgesamt 6-mal bearbeitet

FireballFlame

BeitragSa, Jan 23, 2010 21:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist bei mir irgendwie nicht zum Laufen zu kriegen. Egal was ich mache, ich bekomme immer "Userlib not found". Confused
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Chester

BeitragSo, Jan 24, 2010 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du die DLL im Ordner wo die Codes sind?

Habe nämlich den Ordner aus Versehen userlib und nicht userlibs genannt, deshalb funktioniert es nicht, wenn man es nur in den BB Ordner kopiert.

Ich lade nachher eine neue Version hoch.

Edit: Link oben aktualisiert. Sorry!
 

ChristianK

BeitragSo, Jan 24, 2010 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast die Debug-Version in das Archiv gepackt...
Außerdem wär es besser wenn du die CRT statisch linken würdest. Der "Userlib not found" Fehler kann nämlich dadurch entstehen, dass die C-Runtime nicht installiert ist.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

Chester

BeitragSo, Jan 24, 2010 16:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Verzeihung, hoffe ich habe nun alles richtig gemacht. Embarassed

Neue Version hochgeladen.

Chester

BeitragMo, Jan 17, 2011 20:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Update 0.4:

Nun ist es möglich, mehrere Midi Verbindungen gleichzeitig zu benutzen (auf Wunsch eines Users). Ansonsten wurden die Befehle mal ein wenig an ihre Ursprungsbefehle angepasst.

Xaymar

ehemals "Cgamer"

BeitragDi, Jan 18, 2011 20:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist das hier nicht i.e. genau dasselbe als wenn man dem Midi-Device direkt die Befehle gibt?(bzw. Microsoft Midi Mapper)
Warbseite

Midimaster

BeitragMi, Jan 19, 2011 11:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Chester

ich hätte großes Interesse daran die LIB zu nutzen. Aber schon die Beispiele laufen nicht an.

Was mache ich falsch? Ich sehe in den Beispielen auch keinen Verweis auf die DLL. Kann das so gehen?

So habe ich es gestartet:

RAR entpackt in einen Ordner...

Zitat:
C:\Dokumente und Einstellungen\Peter\Eigene Dateien\Midi


... die BB Beispiele aus diesem Ordner gestartet. Dann erhalte ich z.b. bei Beispiel "Receive Message.BB" folgende Fehlermeldung:


Zitat:
Function 'midioutopen`not found

Chester

BeitragMi, Jan 19, 2011 14:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Der userlibs Ordner aus dem Archiv, genaugenommen die MidiLib.decls muss in den C:\Programme\Blitz3D\userlibs (je nachdem wo B3D installiert ist) kopiert werden. Die MidiLib.dll muss sich dann entweder auch in diesem userlibs Ordner befinden, oder in dem Ordner, in dem der Code liegt.

@Xaymar: Wenn ich dich richtig verstanden habe, dann teilweise ja. Befehle wie MidiOutShortMsg wären eigentlich auch direkt möglich gewesen... Das wär dann allerdings eine ziemliche Fumlerei mit den Pointern/Banks (wie auch immer man das in BB umsetzten kann). Allerdings würde das Empfangen von Midisignalen über den direkten Weg nicht gehen, da dies auf einer Callbackfunktion basiert.

Midimaster

BeitragMi, Jan 19, 2011 22:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Chester, jetzt geht es.

Warum sendet deine DLL bei MIDI-Out immer 4 Bytes? Es gibt doch auch 1-Byte Nachrichten... Kann ich auch weniger senden? Oder muß ich dann 000000F8 z.B. für Midi-Clock senden?

ich werde mal ein paar Experiemente damit machen...

Wozu nutzt Du die Datei?

PacMani

BeitragMi, Jan 19, 2011 23:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Wunderbar.
Soweit ich das in Erinnerung habe, spielt Blitz ja MIDIs immer vollemuliert mit Microsofts Mistsynthesizer ab (und dann auch noch recht laut - wobei man das ja regulieren kann).

Chester

BeitragMi, Jan 19, 2011 23:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Nachrichten werden als 4-Byte Integer weitergegeben, d.h. ja, die Nachrichten werden mehr oder weniger automatisch mit Nullen ausgefüllt.

Ein Presetwechsel auf dem ersten Midichannel ginge z.B.

MidiOutShortMsg( $C100 + preset_nummer% )

Zitat:
Wozu nutzt Du die Datei?

Meinst du die Funktionen der DLL in BB?

Da ich Gitarre spiele und ich dabei nur selten Hände zum Umblättern frei hat, hab ich meinen Laptop auf einen Notenständer geschraubt und mir eine Notenanzeige programmiert. Das Fußpedal meines Gitarreneffektgerätes(mit MIDI-Ausgang) wird dann zum Scrollen missbraucht. Wink Klingt bescheuert, erfüllt aber seinen Zweck Very Happy
 

oli1992

BeitragDo, Mai 05, 2011 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei mir klappt alles mit der Abfrage vom Keyboard usw. , aber ich weiss nicht wie ich die Daten auswerten soll. Wenn ich immer dieselbe Taste drücke, gibt MidiGetParam1() immer verschiedene Daten aus. So ist es leider nicht realisierbar, auf jede Taste einen Sound zu legen......

Midimaster

BeitragFr, Mai 06, 2011 0:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß nicht genau, was Chesters msg$= MidiGetParam1() soll. Normalerweise sendet MIDI einzelne Bytes. Vielleicht hat er die ja zu einen String zusammengepappt.

Zerlege doch mal msg$ in Bytes und lass dir dann die ASCII-Werte anzeigen.


also, der MIDI-Sender kann laufend Daten erzeugen. wichtig ist, dass Du daraus den MIDI-NOTE-ON-Befehl erkennst. Er markiert den Anfang eines Paketes, dass bei einer gedrückten Taste versendet wird. Es besteht aus 3 Bytes:

message[0] = 143+Channel
message[1] = Ton
message[2] = Vol

Die 143 ist schon der "NOTE-ON" allerdings wurde in das Byte auch noch der MIDI-Kanal (0-15) addiert, deshalb ist alles von 143 bis 158 "NOTE-ON".

Der nächste Wert ist die gedrückte Taste. Theoretisch von 0 bis 127. Praktisch liegt der Wert aber meist zwischen 36 und 96. 36=C, 37=C#, 38=D, ....48=c, 49=c#,...60=c'....

Der dritte Wert ist die Anschlagsdynamic 1-127, wenn dein Keyboard sowas kann. ansonsten immer 64.
 

oli1992

BeitragFr, Mai 06, 2011 13:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, die Daten sind in einem String zusammengepappt. Der gespielte ton ist tatsächlich im 2ten Byte codiert. Habs jetzt aber hinbekommen. Vielen Dank

Anschlagsdynamik werde ich sicher auch benutzen. Es sollen Sounds abgespielt werden die zuvor mit meinem programmiertem Synthesizer erstellt worden sind. In Echtzeit wird er wohl eher nicht laufen^^

Einen schönen Tag noch.
 

rendomizer

BeitragDo, Jun 25, 2015 18:31
Antworten mit Zitat
Benutzer-Profile anzeigen
after a long search. finally something about m.i.d.i !!! I'm happy


rendomizer
  • Zuletzt bearbeitet von rendomizer am Do, Jun 25, 2015 21:38, insgesamt 2-mal bearbeitet
 

rendomizer

BeitragDo, Jun 25, 2015 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
fantastic !!!

rendomizer

KnorxThieus

BeitragSa, Jun 27, 2015 11:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Wow, so entdecke ich diese LIB auch noch … fantastisch, großes Lob! Very Happy
Hat jemand noch eine funktionierende Version des Links? Smile
Version: BlitzPlus / Blitz+

Chester

BeitragSa, Jun 27, 2015 14:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Über das Web Arhive kommt man noch dran:

http://web.archive.org/web/201...e.de/midi/

Am besten die Zip downloaden, dann hast du es offline Wink
 

rendomizer

BeitragMo, Jun 29, 2015 8:02
Antworten mit Zitat
Benutzer-Profile anzeigen
I am working on it and it's so easy to do ! for the web shearch input midi usb keyboard for blitz3d

Global hIn = MidiInOpen(0)

.debut
If MidiEvent(hIn) Then
MidiInStart(hIn)

msg$= MidiGetParam1()
Print Hex(msg$)
;affiche les données du clavier externe
EndIf



thank you Chester !

Neue Antwort erstellen


Übersicht BlitzBasic DLLs und Userlibs

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group