First package release is set to January 1st 2021. It will support basic MIDI componnets on both Win32 and Win64, and lay down foundation for the other platform, and work on sequencing engine and file stream componts as well.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hello,
is this already your 1st package release form jan 1st, 2020?
i started a test program to show the midi devices in delphi.
how can i get the midi messages from the midi devices?
can you give a simple program example?
i like your project.
regards
nik
Last edit: nik 2021-01-19
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Thanks for waiting. I've updated the files, and added 4 sample projects.
Beta release notes:
The update has the GNU General Public License notice, and the basic components with basic features are ready for Win32 and Win64 platforms.
I will work on the support for System Exclusive messages in the next couple of weekends. After that, the plan is to add support for more platforms before going for other supporting components or the visual components.
If you find any issues, just let me know ;-)
Best regards,
Normann
Last edit: Normann Simplified 2021-03-07
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
With updated lock-free message queue, to prevent locks between threads on sudden high CPU loads.
Work on (presumably) more stable timing thread using Real-Time Work Queue API is in progress. The Winapi.SysCtrls.Timers.pas has the option of using RTWorkQ, MMSystem, or the "built-in" threading timing solution used for the other platforms.
The MMSystem is default, but the work on RTWorkQ will continue, and hopefully the interval in between timing can be shorten once this can be controlled.
RTWorkQ is not available for Delphi, so it is a work in translating headers, and figure out how the APIs should be used with a little or no documentation of each API.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi Normann,
I found your components a few weeks ago. I would like to integrate them in my application to play a midi file to an output device. Mi app is based on Bass Library and i can only extract a midi event stream. Is there a way to integrate your components to a bass lib based application to do that?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Thank you Normann for your project...
I have deepened my knowledge of BASS lib and now I believe I am able to extract the MIDI events stream. Now my question is:
what is the correct way to send individual events to the midiout? I don't think I need the midi clock because the timing is already given by the bass library. I just need to know which of your components to use to open the midiout and send events ...
Can you help me? Thank you :-)
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
This should be the easiest part. You only need a TMIDIOutDevices component, which will maintain a list of all your MIDI-output devices on your computer. This does not depend on a MIDI clock.
From the TMIDIOutDevices component you can extract any of the available MIDI-output devices like:
You can also resend any MIDI message you have received as ShortMsg, eg.:
LDevice.SendMIDIShortMsg($404000);
You will of course need to control which device you would like to use, and you can use the TMIDIOutDevices component as it is, and you can easily get a string list of devices like:
MIDIOutDevices1.ListDevices(Memo1.Lines);
I hope this will get you started ;-)
Best regards,
Normann
Last edit: norm4nn 2022-08-24
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi Norman,
I have a new question about your beautiful components...
I need to eliminate some events (text/lyrics/chords events) from midi file and replace them with other events (lyrics or text events). The question is: how can I delete events and insert new ones, and after that, save the midifile? Is it possible?
Thanks for your advices
Giuseppe
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
First package release is set to January 1st 2021. It will support basic MIDI componnets on both Win32 and Win64, and lay down foundation for the other platform, and work on sequencing engine and file stream componts as well.
Hello,
is this already your 1st package release form jan 1st, 2020?
i started a test program to show the midi devices in delphi.
how can i get the midi messages from the midi devices?
can you give a simple program example?
i like your project.
regards
nik
Last edit: nik 2021-01-19
Hi Nik,
Sorry for the late response - my mail did not notify me on filtered mails :-/
But yes, I can work on a couple of simple examples, and upload these into a separate folder the coming week.
Also I hope I can make some updates on the components as well.
Best regards,
Normann
Great Norman
i try to fetch midi information from an external device and sent it with additional midi info.
thx a lot
Looking forward to those examples! My current midi components don't work in 64 bit, and your appear to do so.
Hi guys,
Thanks for waiting. I've updated the files, and added 4 sample projects.
Beta release notes:
The update has the GNU General Public License notice, and the basic components with basic features are ready for Win32 and Win64 platforms.
I will work on the support for System Exclusive messages in the next couple of weekends. After that, the plan is to add support for more platforms before going for other supporting components or the visual components.
If you find any issues, just let me know ;-)
Best regards,
Normann
Last edit: Normann Simplified 2021-03-07
Version 1.0.x released
The first package is released (Native20210314.zip), and includes packaging of:
MIDI Components:
TMIDIInDevices,
TMIDIOutDevices,
TMIDIClock,
TMIDIThru (beta),
and
TSysTimer.
TDeviceListBox,
TDeviceComboBox.
Target for version 1.1.x is:
TMIDISMFFile,
TMIDISimpleSequencer,
TSpectrumMeter,
and supporting components and classes.
Target for version 1.2.x is:
TMIDIRemotes,
TRemoteDevices,
TGaugeMeter,
and alike, but not yet decided.
Version 1.1.x released
The second package is released (Native20210330.zip), and includes packaging of:
MIDI Components:
TMIDIInDevices,
TMIDIOutDevices,
TMIDIClock,
TSMFFile,
TSMFSequencer,
TMIDIThru (beta).
System Components:
TSysTimer.
Device Components:
TDeviceListBox,
TDeviceComboBox.
Target for version 1.2.x is:
TMIDIRemotes,
TRemoteDevices,
TGaugeMeter,
TSpectrumMeter,
and alike, but not yet decided.
Last edit: Normann Simplified 2021-03-30
Version 1.4.155 (2021-05-16) released
With updated lock-free message queue, to prevent locks between threads on sudden high CPU loads.
Work on (presumably) more stable timing thread using Real-Time Work Queue API is in progress. The Winapi.SysCtrls.Timers.pas has the option of using RTWorkQ, MMSystem, or the "built-in" threading timing solution used for the other platforms.
The MMSystem is default, but the work on RTWorkQ will continue, and hopefully the interval in between timing can be shorten once this can be controlled.
RTWorkQ is not available for Delphi, so it is a work in translating headers, and figure out how the APIs should be used with a little or no documentation of each API.
Hi Normann,
I found your components a few weeks ago. I would like to integrate them in my application to play a midi file to an output device. Mi app is based on Bass Library and i can only extract a midi event stream. Is there a way to integrate your components to a bass lib based application to do that?
Hi Giuseppe,
I don't know much about Bass Library, so the two aren't built to be integrated. I'm sorry I wasn't able to help.
Best regards, Normann
Thank you Normann for your project...
I have deepened my knowledge of BASS lib and now I believe I am able to extract the MIDI events stream. Now my question is:
what is the correct way to send individual events to the midiout? I don't think I need the midi clock because the timing is already given by the bass library. I just need to know which of your components to use to open the midiout and send events ...
Can you help me? Thank you :-)
Hi Giuseppe,
This should be the easiest part. You only need a TMIDIOutDevices component, which will maintain a list of all your MIDI-output devices on your computer. This does not depend on a MIDI clock.
From the TMIDIOutDevices component you can extract any of the available MIDI-output devices like:
(Above would properbly give you the built-in "Microsoft GS Wavetable Synth")
Check if the device is opened:
And your device will have all the send MIDI functions available, e.g.:
You can send a MIDI Note On message easily as:
You can also resend any MIDI message you have received as ShortMsg, eg.:
You will of course need to control which device you would like to use, and you can use the TMIDIOutDevices component as it is, and you can easily get a string list of devices like:
I hope this will get you started ;-)
Best regards,
Normann
Last edit: norm4nn 2022-08-24
I think this is good for me...
thank you Normann :-)
Hi Norman,
I have a new question about your beautiful components...
I need to eliminate some events (text/lyrics/chords events) from midi file and replace them with other events (lyrics or text events). The question is: how can I delete events and insert new ones, and after that, save the midifile? Is it possible?
Thanks for your advices
Giuseppe
Last edit: adriano 2023-08-09
Last edit: adriano 2023-08-09