Midi Abfrage ....

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Midi Abfrage ....

Beitrag von NicTheQuick »

Ich habe leider keine Zeit mir diese Tabelle genauer anzuschauen. Außerdem habe ich das Gerät nicht und schon seit mindestens 12 Jahren auch kein Windows mehr. Sprich ich kann meinen eigenen Code jetzt eh nicht mehr testen.
Benutzeravatar
Mauli
Beiträge: 46
Registriert: 06.09.2004 13:27

Re: Midi Abfrage ....

Beitrag von Mauli »

:lol: Haha, habe nun auch so ein DDJ-200 zu Weihnachten bekommen, weil ich mal sowas erwähnte. Nun habe ich das Teil hier stehen und will es auch am liebsten zum "leuchten" bringen.

Die Abfrage funktionierte auch super, aber senden kann ich auch nichts an das Gerät. Ich würde gerne meinen MP3 Player damit steuern und auch eine Rückmeldung an die Tasten schicken.

2x ist mit der PC damit abgeschmiert. Im englischen Forum habe ich nun auch diese Diskussion verfolgt und ich finde, es sollte wieder aufgenommen werden. Die Controller sind doch feine Gadgets.

Code: Alles auswählen

EnableExplicit

Macro MIDIKeyMessage(Status, Channel, key, Velocity)
  ((Velocity << 16) | (key << 8) | (Status << 4) | (Channel - 1))
EndMacro

Macro MIDIInstrumentMessage(Channel, Instrument)
  (((Instrument - 1) << 8) | (%1100 << 4) | (Channel - 1))
EndMacro

Define iNumDev.i, around.i, moc.MIDIOUTCAPS, Instrument.i, Result.i, hmo.i,t,k,v

iNumDev = midiOutGetNumDevs_()
For around = 0 To iNumDev - 1
  midiOutGetDevCaps_(around, moc, SizeOf(MIDIOUTCAPS))
  Debug " " + Str(around) + " " + PeekS(@moc\szPname[0], #MAXPNAMELEN)
Next

Result = midiOutOpen_(@hmo,1, #Null, #Null, #CALLBACK_NULL)

If Result = #MMSYSERR_NOERROR
     midiOutShortMsg_(hmo, MIDIInstrumentMessage(10, 1))
      Delay(500)
     midiOutShortMsg_(hmo, MIDIKeyMessage(%1001,10, 4, 0))
      Delay(500)
   Result = midiOutClose_(hmo)
Else
  Debug "midiOutOpen Error: " + Str(Result)
EndIf
auch damit habe ich mal rumgespielt, aber kam nicht bei raus. Auch die MIDI_IN müsste da noch rein, um wenigstens abzufragen. Midi ist schon eine interessante Sache.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Midi Abfrage ....

Beitrag von NicTheQuick »

Im zweiten Post hier ist ein Thread von mir verlinkt mit eine guten Vorlage zum Arbeiten mit MIDI. Wenn du MIDI-Out verwenden möchtest, musst du aber die shared Variable setzen.

Wieso ist dein PC eigentlich abgeschmiert? :?
Benutzeravatar
Mauli
Beiträge: 46
Registriert: 06.09.2004 13:27

Re: Midi Abfrage ....

Beitrag von Mauli »

Warum Windows abschmierte weis ich nicht. Aber es passierte immer, wenn ich das Midi Programm getestet hatte. Bisher 3x. Bin jetzt auch kein Profi in Pb, daher weiß ich nicht genau was du meinst.
Benutzeravatar
Larissa22
Beiträge: 3
Registriert: 25.12.2020 22:44

Re: Midi Abfrage ....

Beitrag von Larissa22 »

Hey, ich bin komplett neu hier und habe bisher nur gelesen. Ich bin DJ und programmiere mit PB auch so einige Spielereien wie Soundboards, Effektboards oder andere coole Toolz für meine GIGs. Ist eben mit PB echt easy :allright:

Nun bin ich auch auf diese MIDI Geschichte aufgesprungen, denn ich habe ein Launchpad, welches ich gerne selbst ansteuern würde. Ich benutze dieses hier :

https://www.gear4music.de/de/Keyboards- ... i-MK3/34U1

Ein klasse Teil, aber es würde mir mehr helfen, wenn ich´s besser integrieren könnte. Nicht überall brauche ich diese mitgelieferte Software, sondern es passte perfekt zu meinen kleinen Helferleins. Ich kann die Tasten mit dem geposteten Code oben zwar abfragen, aber wie krieg ich die Pads zum leuchten ? Wäre cool, wenn da jemand ´ner Anfängerin helfen könnte <)

Auch der Code zum Abfragen kommt mir sehr überladen vor, braucht man das alles ??
Benutzeravatar
Then
Beiträge: 278
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Re: Midi Abfrage ....

Beitrag von Then »

Habe mal den Code deutlich verkleinert (Man möge mir die Fehler verzeihen, aber auch gerne zeigen)

Code: Alles auswählen

#MIDIRequ_InSet = 2 
#MIDIRequ_OutSet = 1 
OutDevice.l=1
InDevice.l=0
MIDIResult=3
InfoOut.MIDIOUTCAPS  

Structure MIDIData 
  Channel.b 
  Note.b 
  Velocity.b 
  Null.b 
EndStructure 

Procedure MidiInProc(hMidiIn.l, wMsg.l, dwInstance.l, dwParam1.l, dwParam2.l) 
 Protected Status.l, OnOf.l, NoteNr.l, Velocity.l 
  Select wMsg 
   Case #MM_MIM_DATA 
    Status=dwParam1 & $FF
    key1=(dwParam1 >>  8) & $FF  
    key2=(dwParam1 >> 16) & $FF 
    key3=dwParam1 & $F          
    key4=dwParam2
    SetGadgetText(11,Str(Status))
    SetGadgetText(12,Str(key1))
    SetGadgetText(13,Str(key2))
    SetGadgetText(14,Str(key3))
    SetGadgetText(15,Str(key4))
   EndSelect 
EndProcedure 

If MIDIResult & #MIDIRequ_InSet 
  hMidiIn.l 
  If midiInOpen_(@hMidiIn, InDevice, @MidiInProc(), 0, #CALLBACK_FUNCTION) = #MMSYSERR_NOERROR 
    If midiInStart_(hMidiIn) = #MMSYSERR_NOERROR  
    EndIf 
  EndIf 
EndIf 

If hMidiIn And hMidiOut 
  If midiConnect_(hMidiIn, hMidiOut, 0) = 0 
  EndIf 
EndIf 

main:
OpenWindow(0,0,0,260,90,"",#PB_Window_ScreenCentered)
TextGadget(1, 10,10,40,20,"Status")
TextGadget(2, 60,10,40,20,"Key1")
TextGadget(3,110,10,40,20,"Key2")
TextGadget(4,160,10,40,20,"Key3")
TextGadget(5,210,10,40,20,"Key4")
ButtonGadget(7,10,60,80,20,"EXIT")
StringGadget(11, 10,30,40,20,"",#PB_Text_Right)
StringGadget(12, 60,30,40,20,"",#PB_Text_Right)
StringGadget(13,110,30,40,20,"",#PB_Text_Right)
StringGadget(14,160,30,40,20,"",#PB_Text_Right)
StringGadget(15,210,30,40,20,"",#PB_Text_Right)

Repeat
 Delay(1)

 Event=WindowEvent()
 Select Event 
  Case #PB_Event_Gadget 
   Gadget=EventGadget()
   Select Gadget
    Case 7
     midiDisconnect_(hMidiIn, hMidiOut, 0) 
     While midiInClose_(hMidiIn) = #MIDIERR_STILLPLAYING : Wend 
     While midiOutClose_(hMidiOut) = #MIDIERR_STILLPLAYING : Wend 
    End
    
   EndSelect
 EndSelect
ForEver  
Damit kannste den Datenfluss der MIDI Schnittstelle anzeigen. Wie man jedoch wieder einen genauen Wert (0-127) vom Drehregler bekommt, kriege ich nicht hin, sorry. Vielleicht schafft es ein anderer....
PB 6.10LTs / Windows 11 64Bit (i9/32GB/ 1TB-SSD+4TB-HDD/3060GTX12GB) / 2x27" Multitouch

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Benutzeravatar
Larissa22
Beiträge: 3
Registriert: 25.12.2020 22:44

Re: Midi Abfrage ....

Beitrag von Larissa22 »

Hi, danke, habe nun Zeit gefunden diesen wirklich kurzen Code zu testen. Funktioniert super :allright: , aber wie kann ich nun den genauen Wert der Regler oder Jogwheels finden. Dieser sollte laut Beschreibung (und anderen Codes) von 0-127 gehen.

Wichtiger wäre mir eben, wie man nun per MIDI sendet. Ist scheinbar doch nicht so einfach :?
Benutzeravatar
Stuhli
Beiträge: 75
Registriert: 18.10.2004 10:05

Re: Midi Abfrage ....

Beitrag von Stuhli »

Also, wenn ich an meinen Wheels drehe, wird der Wert, der ausgegeben wird immer größer, egal in welche Richtung ich drehe. Jetzt muss quasi nur der Unterschied zwischen Ausgangswert und Endwert ausgerechnet werden und anhand der Drehbewegung kann man diesen dann von einer vorgegebenen Variable subtrahieren oder addieren.

Wie das genau geht... :| keine Ahnung. Vielleicht erbarmt sich ja doch mal einer der "Profis" und hilft uns. Da ja nun doch mehrere Leute genau dieses Thema derzeit verstehen wollen.
SYNTAX ERROR IN 30! TYPE MISMATCH
Antworten