MIDI and USB Keyboard!
-
Alienoiz wrote:
Well? .. i realy would like to have this working?!
Please note that we're all volunteers here, answering questions in our free time, not getting paid for it. And there are also other things I enjoy doing in my free time. You're already doing what would be required for
NoteDuration
for other settings, likeCurrentInstrument
. You just need to do the same for the duration.If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
-
Alienoiz wrote:
Well? .. i realy would like to have this working?!
Please note that we're all volunteers here, answering questions in our free time, not getting paid for it. And there are also other things I enjoy doing in my free time. You're already doing what would be required for
NoteDuration
for other settings, likeCurrentInstrument
. You just need to do the same for the duration.If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
sorry..i am too lame for that..and ..i am not understanding... and btw..i respect you all..i am not making funny of you or anything like that...i ask..if you want to reply the better, if not, i must live with it without complaints...i aprecciate your efforts and etc... I am not a "sucking" guy.. Thanks, Duarte
-
sorry..i am too lame for that..and ..i am not understanding... and btw..i respect you all..i am not making funny of you or anything like that...i ask..if you want to reply the better, if not, i must live with it without complaints...i aprecciate your efforts and etc... I am not a "sucking" guy.. Thanks, Duarte
Alienoiz wrote:
sorry..i am too lame for that..and ..i am not understanding... and btw..i respect you all..i am not making funny of you or anything like that...i ask..if you want to reply the better, if not, i must live with it without complaints...i aprecciate your efforts and etc... I am not a "sucking" guy..
Let me clarify. Yes, of course I want to be respected. But not by being sucked up to. Eew. No - my idea here of helping people is to teach. So they learn and can do it themselves next time. So the way I want to be respected is by people taking the advice and at least making an effort to implement it by themselves. One more attempt:
Function MidiInProc(ByVal hMidiIn As Integer, ByVal wMsg As UInteger, ByVal dwInstance As Integer, ByVal dwParam1 As Integer, ByVal dwParam2 As Integer) As Integer Dim DataByte1 = (dwParam1) >> 8 m.PlayMIDINote(DataByte1, 127) m.NoteDuration = CInt(cboduration.Text) m.Pan = 50 End Function
The underlined line is the problem. You can't access
cboduration
inside that function because it's being executed by a different thread that originates from that MIDI-component. But only the UI-thread may access controls. You already modify other settings (thanNoteDuration
) on the UI-thread. Example:Private Sub cboInstruments\_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboInstruments.SelectedIndexChanged m.CurrentInstrument = cboInstruments.Text End Sub
You need to do the same for
m.NoteDuration
.If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
-
Alienoiz wrote:
sorry..i am too lame for that..and ..i am not understanding... and btw..i respect you all..i am not making funny of you or anything like that...i ask..if you want to reply the better, if not, i must live with it without complaints...i aprecciate your efforts and etc... I am not a "sucking" guy..
Let me clarify. Yes, of course I want to be respected. But not by being sucked up to. Eew. No - my idea here of helping people is to teach. So they learn and can do it themselves next time. So the way I want to be respected is by people taking the advice and at least making an effort to implement it by themselves. One more attempt:
Function MidiInProc(ByVal hMidiIn As Integer, ByVal wMsg As UInteger, ByVal dwInstance As Integer, ByVal dwParam1 As Integer, ByVal dwParam2 As Integer) As Integer Dim DataByte1 = (dwParam1) >> 8 m.PlayMIDINote(DataByte1, 127) m.NoteDuration = CInt(cboduration.Text) m.Pan = 50 End Function
The underlined line is the problem. You can't access
cboduration
inside that function because it's being executed by a different thread that originates from that MIDI-component. But only the UI-thread may access controls. You already modify other settings (thanNoteDuration
) on the UI-thread. Example:Private Sub cboInstruments\_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboInstruments.SelectedIndexChanged m.CurrentInstrument = cboInstruments.Text End Sub
You need to do the same for
m.NoteDuration
.If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
well..thanks..but i still do not understand.. i am not a coder..i just make these small gadgets to keep my head busy... I know the very basics of VB but normaly i interpret snippets and get them together to create my code on more advanced stuff... So i may be able to do what you say, but i am not understanding how..if i see the code, i understand it, but creating it is not my strongest point! I hope i am making myself clear!
-
well..thanks..but i still do not understand.. i am not a coder..i just make these small gadgets to keep my head busy... I know the very basics of VB but normaly i interpret snippets and get them together to create my code on more advanced stuff... So i may be able to do what you say, but i am not understanding how..if i see the code, i understand it, but creating it is not my strongest point! I hope i am making myself clear!
Alienoiz wrote:
i am not a coder..i just make these small gadgets to keep my head busy...
Why don't you start to learn it properly? Open the form designer. Right-click the CombBox for the note-duration and select Properties. In the properties pane click on the events-icon (small and easy to miss). Search for the SelectedIndexChanged-event in the list and make a double-click into the empty column to the right of it. Visual Studio switches to the source code and you will see a stub for the event-handler-function where you will only have to insert that one line from my previous message. Remove that line I underlined in the other function in my previous message. That should be it.
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
-
Alienoiz wrote:
i am not a coder..i just make these small gadgets to keep my head busy...
Why don't you start to learn it properly? Open the form designer. Right-click the CombBox for the note-duration and select Properties. In the properties pane click on the events-icon (small and easy to miss). Search for the SelectedIndexChanged-event in the list and make a double-click into the empty column to the right of it. Visual Studio switches to the source code and you will see a stub for the event-handler-function where you will only have to insert that one line from my previous message. Remove that line I underlined in the other function in my previous message. That should be it.
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
-
Alienoiz wrote:
i am not a coder..i just make these small gadgets to keep my head busy...
Why don't you start to learn it properly? Open the form designer. Right-click the CombBox for the note-duration and select Properties. In the properties pane click on the events-icon (small and easy to miss). Search for the SelectedIndexChanged-event in the list and make a double-click into the empty column to the right of it. Visual Studio switches to the source code and you will see a stub for the event-handler-function where you will only have to insert that one line from my previous message. Remove that line I underlined in the other function in my previous message. That should be it.
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
may i ask for your attention once again? my code has changed....i am now able to do everything i want from it...but i am just having a small problem... When i press the midi key of my controller it plays the note and when i unpress it it also plays the same note! I have tried the .StopMIDINote() function but i do not know where to insert it?!!! If i was using a button i would know..mousedown play..mouseup stop..but i am using my MIDI hardware keyboard! Below i show the code....if you have some advice i would appreciate it?!!?!? Thanks You!
Public Class Form1
Dim m As New clsMIDI
Dim hMidiIn As IntegerPrivate Sub Form1\_Load(sender As Object, e As EventArgs) Handles MyBase.Load FillInstrumentCombo() If midiInGetNumDevs() = 0 Then MsgBox("No MIDI devices connected") End If Dim InCaps As New MIDIINCAPS Dim DevCnt As Integer For DevCnt = 0 To (midiInGetNumDevs - 1) midiInGetDevCaps(DevCnt, InCaps, Len(InCaps)) ComboBox1.Items.Add(InCaps.szPname) Next DevCnt End Sub Private Sub Form1\_Closed(sender As Object, e As EventArgs) Handles Me.Closed midiInStop(hMidiIn) midiInReset(hMidiIn) midiInClose(hMidiIn) End Sub Public Declare Function midiInOpen Lib "winmm.dll" (ByRef hMidiIn As Integer, ByVal uDeviceID As Integer, ByVal dwCallback As MidiInCallback, ByVal dwInstance As Integer, ByVal dwFlags As Integer) As Integer Public Delegate Function MidiInCallback(ByVal hMidiIn As Integer, ByVal wMsg As UInteger, ByVal dwInstance As Integer, ByVal dwParam1 As Integer, ByVal dwParam2 As Integer) As Integer Public ptrCallback As New MidiInCallback(AddressOf MidiInProc) Public Const CALLBACK\_FUNCTION As Integer = &H30000 Public Const MIDI\_IO\_STATUS = &H20 Public Delegate Sub DisplayDataDelegate(dwParam1) Private Sub ComboBox1\_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged Dim DeviceID As Integer = ComboBox1.SelectedIndex midiInOpen(hMidiIn, DeviceID, ptrCallback, 0, CALLBACK\_FUNCTION Or MIDI\_IO\_STATUS) midiInStart(hMidiIn) Dim duration = CInt(cboduration.Text) m.NoteDuration = duration End Sub Dim DataByte1 As Byte Function MidiInProc(ByVal hMidiIn As Integer, ByVal wMsg As UInteger, ByVal dwInstance As Integer, ByVal dwParam1 As Integer, ByVal dwParam2 As Integer) As Integer
-
Alienoiz wrote:
i am not a coder..i just make these small gadgets to keep my head busy...
Why don't you start to learn it properly? Open the form designer. Right-click the CombBox for the note-duration and select Properties. In the properties pane click on the events-icon (small and easy to miss). Search for the SelectedIndexChanged-event in the list and make a double-click into the empty column to the right of it. Visual Studio switches to the source code and you will see a stub for the event-handler-function where you will only have to insert that one line from my previous message. Remove that line I underlined in the other function in my previous message. That should be it.
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
-
On the page you linked in another post (Visual Basic MIDI Piano[^]) there are these two subs which I assume are still somewhere in your code:
Private Sub Down(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown, Button2.MouseDown, Button3.MouseDown, Button4.MouseDown, Button5.MouseDown, Button6.MouseDown, Button7.MouseDown, Button8.MouseDown, Button9.MouseDown, Button10.MouseDown, Button11.MouseDown, Button12.MouseDown, Button13.MouseDown, Button14.MouseDown, Button15.MouseDown, Button16.MouseDown, Button17.MouseDown, Button18.MouseDown, Button19.MouseDown, Button20.MouseDown, Button21.MouseDown, Button22.MouseDown, Button23.MouseDown, Button24.MouseDown Jazz.MidiOut(&H90 + chan, Note(sender), 100) End Sub Private Sub Up(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseUp, Button2.MouseUp, Button3.MouseUp, Button4.MouseUp, Button5.MouseUp, Button6.MouseUp, Button7.MouseUp, Button8.MouseUp, Button9.MouseUp, Button10.MouseUp, Button11.MouseUp, Button12.MouseUp, Button13.MouseUp, Button14.MouseUp, Button15.MouseUp, Button16.MouseUp, Button17.MouseUp, Button18.MouseUp, Button19.MouseUp, Button20.MouseUp, Button21.MouseUp, Button22.MouseUp, Button23.MouseUp, Button24.MouseUp Jazz.MidiOut(&H80 + chan, Note(sender), 0) End Sub
Looks like it's supposed to start playing a note on KeyDown and stop playing it on KeyUp, without a predetermined duration, which you seem to have added. So I'm guessing all you need to do is to either remove the "Up"-sub and the event-wiring for it or comment out the single line it it. If it doesn't work then I have no idea.
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
-
On the page you linked in another post (Visual Basic MIDI Piano[^]) there are these two subs which I assume are still somewhere in your code:
Private Sub Down(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown, Button2.MouseDown, Button3.MouseDown, Button4.MouseDown, Button5.MouseDown, Button6.MouseDown, Button7.MouseDown, Button8.MouseDown, Button9.MouseDown, Button10.MouseDown, Button11.MouseDown, Button12.MouseDown, Button13.MouseDown, Button14.MouseDown, Button15.MouseDown, Button16.MouseDown, Button17.MouseDown, Button18.MouseDown, Button19.MouseDown, Button20.MouseDown, Button21.MouseDown, Button22.MouseDown, Button23.MouseDown, Button24.MouseDown Jazz.MidiOut(&H90 + chan, Note(sender), 100) End Sub Private Sub Up(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseUp, Button2.MouseUp, Button3.MouseUp, Button4.MouseUp, Button5.MouseUp, Button6.MouseUp, Button7.MouseUp, Button8.MouseUp, Button9.MouseUp, Button10.MouseUp, Button11.MouseUp, Button12.MouseUp, Button13.MouseUp, Button14.MouseUp, Button15.MouseUp, Button16.MouseUp, Button17.MouseUp, Button18.MouseUp, Button19.MouseUp, Button20.MouseUp, Button21.MouseUp, Button22.MouseUp, Button23.MouseUp, Button24.MouseUp Jazz.MidiOut(&H80 + chan, Note(sender), 0) End Sub
Looks like it's supposed to start playing a note on KeyDown and stop playing it on KeyUp, without a predetermined duration, which you seem to have added. So I'm guessing all you need to do is to either remove the "Up"-sub and the event-wiring for it or comment out the single line it it. If it doesn't work then I have no idea.
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
hi..i am not using the jazzmidi control anymore! Now i am using a module called clsMIDI! You can check it in the concorrence : ) (sorry) https://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=8305&lngWId=10 Thanks!
-
On the page you linked in another post (Visual Basic MIDI Piano[^]) there are these two subs which I assume are still somewhere in your code:
Private Sub Down(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown, Button2.MouseDown, Button3.MouseDown, Button4.MouseDown, Button5.MouseDown, Button6.MouseDown, Button7.MouseDown, Button8.MouseDown, Button9.MouseDown, Button10.MouseDown, Button11.MouseDown, Button12.MouseDown, Button13.MouseDown, Button14.MouseDown, Button15.MouseDown, Button16.MouseDown, Button17.MouseDown, Button18.MouseDown, Button19.MouseDown, Button20.MouseDown, Button21.MouseDown, Button22.MouseDown, Button23.MouseDown, Button24.MouseDown Jazz.MidiOut(&H90 + chan, Note(sender), 100) End Sub Private Sub Up(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseUp, Button2.MouseUp, Button3.MouseUp, Button4.MouseUp, Button5.MouseUp, Button6.MouseUp, Button7.MouseUp, Button8.MouseUp, Button9.MouseUp, Button10.MouseUp, Button11.MouseUp, Button12.MouseUp, Button13.MouseUp, Button14.MouseUp, Button15.MouseUp, Button16.MouseUp, Button17.MouseUp, Button18.MouseUp, Button19.MouseUp, Button20.MouseUp, Button21.MouseUp, Button22.MouseUp, Button23.MouseUp, Button24.MouseUp Jazz.MidiOut(&H80 + chan, Note(sender), 0) End Sub
Looks like it's supposed to start playing a note on KeyDown and stop playing it on KeyUp, without a predetermined duration, which you seem to have added. So I'm guessing all you need to do is to either remove the "Up"-sub and the event-wiring for it or comment out the single line it it. If it doesn't work then I have no idea.
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
I think the solution is somewhere in these lines of code:
Dim DataByte1 = (dwParam1 And &HFF00) >> 8
m.PlayMIDINote(DataByte1, 127)If i leave like that, when i press the key of my MIDI Controller the note plays and when i unpress it it plays again! But if i set it like this:
Dim DataByte1 = (dwParam1) >> 8
m.PlayMIDINote(DataByte1, 127)It only plays when i unpress the key.... Well.... it is the opposite of what i need...i need it to play when i press and silent when i unpress!!
-
On the page you linked in another post (Visual Basic MIDI Piano[^]) there are these two subs which I assume are still somewhere in your code:
Private Sub Down(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown, Button2.MouseDown, Button3.MouseDown, Button4.MouseDown, Button5.MouseDown, Button6.MouseDown, Button7.MouseDown, Button8.MouseDown, Button9.MouseDown, Button10.MouseDown, Button11.MouseDown, Button12.MouseDown, Button13.MouseDown, Button14.MouseDown, Button15.MouseDown, Button16.MouseDown, Button17.MouseDown, Button18.MouseDown, Button19.MouseDown, Button20.MouseDown, Button21.MouseDown, Button22.MouseDown, Button23.MouseDown, Button24.MouseDown Jazz.MidiOut(&H90 + chan, Note(sender), 100) End Sub Private Sub Up(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseUp, Button2.MouseUp, Button3.MouseUp, Button4.MouseUp, Button5.MouseUp, Button6.MouseUp, Button7.MouseUp, Button8.MouseUp, Button9.MouseUp, Button10.MouseUp, Button11.MouseUp, Button12.MouseUp, Button13.MouseUp, Button14.MouseUp, Button15.MouseUp, Button16.MouseUp, Button17.MouseUp, Button18.MouseUp, Button19.MouseUp, Button20.MouseUp, Button21.MouseUp, Button22.MouseUp, Button23.MouseUp, Button24.MouseUp Jazz.MidiOut(&H80 + chan, Note(sender), 0) End Sub
Looks like it's supposed to start playing a note on KeyDown and stop playing it on KeyUp, without a predetermined duration, which you seem to have added. So I'm guessing all you need to do is to either remove the "Up"-sub and the event-wiring for it or comment out the single line it it. If it doesn't work then I have no idea.
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
-
In the code you linked a note gets played by a mouse left click. You say you play notes by pressing keys but I don't see any of that in your code. Can you show the code that handles key presses?
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
-
In the code you linked a note gets played by a mouse left click. You say you play notes by pressing keys but I don't see any of that in your code. Can you show the code that handles key presses?
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
The keys i say are the keys from my piano MIDI keyboard (hardware piano keyboard)!... Not from PC´s keyboard!!! This is all the code i have now....plus the clsMIDI module:
Imports System.Runtime.InteropServices
Public Class Form1
Dim m As New clsMIDI
Dim hMidiIn As IntegerPrivate Sub Form1\_Load(sender As Object, e As EventArgs) Handles MyBase.Load FillInstrumentCombo() If midiInGetNumDevs() = 0 Then MsgBox("No MIDI devices connected!") End If Dim InCaps As New MIDIINCAPS Dim DevCnt As Integer For DevCnt = 0 To (midiInGetNumDevs - 1) midiInGetDevCaps(DevCnt, InCaps, Len(InCaps)) ComboBox1.Items.Add(InCaps.szPname) Next DevCnt End Sub Declare Function midiInOpen Lib "winmm.dll" (ByRef lphMidiIn As Integer, ByVal uDeviceID As Integer, ByVal dwCallback As MidiDelegate, ByVal dwInstance As Integer, ByVal dwFlags As Integer) As Integer Public Delegate Sub MidiDelegate(ByVal MidiInHandle As Int32, ByVal wMsg As Int32, ByVal Instance As Int32, ByVal wParam As Int32, ByVal lParam As Int32) Public ptrCallback As New MidiDelegate(AddressOf MidiInProc) Public Delegate Sub DisplayDataDelegate(wParam) Private Sub ComboBox1\_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged midiInStop(hMidiIn) midiInReset(hMidiIn) midiInClose(hMidiIn) Dim DeviceID As Integer = ComboBox1.SelectedIndex midiInOpen(hMidiIn, DeviceID, ptrCallback, 0, CALLBACK\_FUNCTION Or MIDI\_IO\_STATUS) midiInStart(hMidiIn) Dim duration = CInt(cboduration.Text) m.NoteDuration = duration End Sub Function MidiInProc(ByVal MidiInHandle As Int32, ByVal wMsg As Int32, ByVal Instance As Int32, ByVal wParam As Int32, ByVal lParam As Int32) As Integer TextBox1.Invoke(New DisplayDataDelegate(AddressOf DisplayData), New Object() {wParam}) Dim DataByte3 = (wParam And &HFF00) >> 8 m.PlayMIDINote(DataByte3, 127) End Function Private Sub DisplayData(wParam) Dim StatusByte As Byte Dim DataByte1 As Byte Dim DataByte2 As Byte StatusByte = (wParam And &HFF) DataByte1 = (wParam And &HFF00) >> 8 DataByte2 = (wParam And &HFF0000) >> 16 TextBox1.AppendText(String.Format("{0:X2} {1:X2} {2:X2}{3}", StatusByte, DataByte1, D
-
The keys i say are the keys from my piano MIDI keyboard (hardware piano keyboard)!... Not from PC´s keyboard!!! This is all the code i have now....plus the clsMIDI module:
Imports System.Runtime.InteropServices
Public Class Form1
Dim m As New clsMIDI
Dim hMidiIn As IntegerPrivate Sub Form1\_Load(sender As Object, e As EventArgs) Handles MyBase.Load FillInstrumentCombo() If midiInGetNumDevs() = 0 Then MsgBox("No MIDI devices connected!") End If Dim InCaps As New MIDIINCAPS Dim DevCnt As Integer For DevCnt = 0 To (midiInGetNumDevs - 1) midiInGetDevCaps(DevCnt, InCaps, Len(InCaps)) ComboBox1.Items.Add(InCaps.szPname) Next DevCnt End Sub Declare Function midiInOpen Lib "winmm.dll" (ByRef lphMidiIn As Integer, ByVal uDeviceID As Integer, ByVal dwCallback As MidiDelegate, ByVal dwInstance As Integer, ByVal dwFlags As Integer) As Integer Public Delegate Sub MidiDelegate(ByVal MidiInHandle As Int32, ByVal wMsg As Int32, ByVal Instance As Int32, ByVal wParam As Int32, ByVal lParam As Int32) Public ptrCallback As New MidiDelegate(AddressOf MidiInProc) Public Delegate Sub DisplayDataDelegate(wParam) Private Sub ComboBox1\_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged midiInStop(hMidiIn) midiInReset(hMidiIn) midiInClose(hMidiIn) Dim DeviceID As Integer = ComboBox1.SelectedIndex midiInOpen(hMidiIn, DeviceID, ptrCallback, 0, CALLBACK\_FUNCTION Or MIDI\_IO\_STATUS) midiInStart(hMidiIn) Dim duration = CInt(cboduration.Text) m.NoteDuration = duration End Sub Function MidiInProc(ByVal MidiInHandle As Int32, ByVal wMsg As Int32, ByVal Instance As Int32, ByVal wParam As Int32, ByVal lParam As Int32) As Integer TextBox1.Invoke(New DisplayDataDelegate(AddressOf DisplayData), New Object() {wParam}) Dim DataByte3 = (wParam And &HFF00) >> 8 m.PlayMIDINote(DataByte3, 127) End Function Private Sub DisplayData(wParam) Dim StatusByte As Byte Dim DataByte1 As Byte Dim DataByte2 As Byte StatusByte = (wParam And &HFF) DataByte1 = (wParam And &HFF00) >> 8 DataByte2 = (wParam And &HFF0000) >> 16 TextBox1.AppendText(String.Format("{0:X2} {1:X2} {2:X2}{3}", StatusByte, DataByte1, D
Alienoiz wrote:
The keys i say are the keys from my piano MIDI keyboard (hardware piano keyboard)!... Not from PC´s keyboard!!!
Alright :laugh: Please post the contents of your
TextBox1
after pressing and releasing a single key.If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
-
The keys i say are the keys from my piano MIDI keyboard (hardware piano keyboard)!... Not from PC´s keyboard!!! This is all the code i have now....plus the clsMIDI module:
Imports System.Runtime.InteropServices
Public Class Form1
Dim m As New clsMIDI
Dim hMidiIn As IntegerPrivate Sub Form1\_Load(sender As Object, e As EventArgs) Handles MyBase.Load FillInstrumentCombo() If midiInGetNumDevs() = 0 Then MsgBox("No MIDI devices connected!") End If Dim InCaps As New MIDIINCAPS Dim DevCnt As Integer For DevCnt = 0 To (midiInGetNumDevs - 1) midiInGetDevCaps(DevCnt, InCaps, Len(InCaps)) ComboBox1.Items.Add(InCaps.szPname) Next DevCnt End Sub Declare Function midiInOpen Lib "winmm.dll" (ByRef lphMidiIn As Integer, ByVal uDeviceID As Integer, ByVal dwCallback As MidiDelegate, ByVal dwInstance As Integer, ByVal dwFlags As Integer) As Integer Public Delegate Sub MidiDelegate(ByVal MidiInHandle As Int32, ByVal wMsg As Int32, ByVal Instance As Int32, ByVal wParam As Int32, ByVal lParam As Int32) Public ptrCallback As New MidiDelegate(AddressOf MidiInProc) Public Delegate Sub DisplayDataDelegate(wParam) Private Sub ComboBox1\_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged midiInStop(hMidiIn) midiInReset(hMidiIn) midiInClose(hMidiIn) Dim DeviceID As Integer = ComboBox1.SelectedIndex midiInOpen(hMidiIn, DeviceID, ptrCallback, 0, CALLBACK\_FUNCTION Or MIDI\_IO\_STATUS) midiInStart(hMidiIn) Dim duration = CInt(cboduration.Text) m.NoteDuration = duration End Sub Function MidiInProc(ByVal MidiInHandle As Int32, ByVal wMsg As Int32, ByVal Instance As Int32, ByVal wParam As Int32, ByVal lParam As Int32) As Integer TextBox1.Invoke(New DisplayDataDelegate(AddressOf DisplayData), New Object() {wParam}) Dim DataByte3 = (wParam And &HFF00) >> 8 m.PlayMIDINote(DataByte3, 127) End Function Private Sub DisplayData(wParam) Dim StatusByte As Byte Dim DataByte1 As Byte Dim DataByte2 As Byte StatusByte = (wParam And &HFF) DataByte1 = (wParam And &HFF00) >> 8 DataByte2 = (wParam And &HFF0000) >> 16 TextBox1.AppendText(String.Format("{0:X2} {1:X2} {2:X2}{3}", StatusByte, DataByte1, D
No - not for a single key but for two different keys please, in sequence.
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
-
No - not for a single key but for two different keys please, in sequence.
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
i am not understanding : (((( can you set an example?... i guess the textbox1 is not affecting the MIDI playing!!! What is making the play its the "m.playMIDINote" function!!! The textbox1 is just for showing the data that is being sent from the MIDI Keyboard into the PC!
-
i am not understanding : (((( can you set an example?... i guess the textbox1 is not affecting the MIDI playing!!! What is making the play its the "m.playMIDINote" function!!! The textbox1 is just for showing the data that is being sent from the MIDI Keyboard into the PC!
Alienoiz wrote:
The textbox1 is just for showing the data that is being sent from the MIDI Keyboard into the PC!
Yes and I want to see that
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
-
Alienoiz wrote:
The textbox1 is just for showing the data that is being sent from the MIDI Keyboard into the PC!
Yes and I want to see that
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
-
ouch..i am sorry..i understood something else.. here...00 00 00 appears when i select the MIDI keyboard from combobox1..next is the data from 3 followed keys: 00 00 00 90 30 36 80 30 00 90 31 38 80 31 00 90 32 22 80 32 00
OK - try this:
Function MidiInProc(ByVal MidiInHandle As Int32, ByVal wMsg As Int32, ByVal Instance As Int32, ByVal wParam As Int32, ByVal lParam As Int32) As Integer Dim Status As Byte Dim Note As Byte Dim Velocity As Byte TextBox1.Invoke(New DisplayDataDelegate(AddressOf DisplayData), New Object() {wParam}) Status = (wParam And &HFF) If Status = 90 Then Note = (wParam And &HFF00) >> 8 Velocity = (wParam And &HFF0000) >> 16 m.PlayMIDINote(Note, Velocity) End If End Function
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson