Menu

Release

2020-12-16
2023-07-20
  • Normann Simplified

    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.

     
  • nik

    nik - 2021-01-19

    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
    • Normann Simplified

      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

       
  • nik

    nik - 2021-02-07

    Great Norman

    i try to fetch midi information from an external device and sent it with additional midi info.

    thx a lot

     
  • David Baxter

    David Baxter - 2021-02-27

    Looking forward to those examples! My current midi components don't work in 64 bit, and your appear to do so.

     
  • Normann Simplified

    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
  • Normann Simplified

    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.

     
  • Normann Simplified

    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
  • Normann Simplified

    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.

     
  • Giuseppe Fava

    Giuseppe Fava - 2022-08-04

    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?

     
    • norm4nn

      norm4nn - 2022-08-05

      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

       
      • Giuseppe Fava

        Giuseppe Fava - 2022-08-23

        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 :-)

         
  • norm4nn

    norm4nn - 2022-08-24

    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:

      var LDevice: TMIDIOutDevice;
      LDevice := TMIDIOutDevice(MIDIOutDevices1.Devices[0]);
    

    (Above would properbly give you the built-in "Microsoft GS Wavetable Synth")

    Check if the device is opened:

      if not LDevice.Active then
        LDevice.Open;
    

    And your device will have all the send MIDI functions available, e.g.:

        LDevice.SendMIDIChannelPressure(AChannel, APressure)
        LDevice.SendMIDIControlChange(AChannel, AIndex, AData)
        LDevice.SendMIDINoteOff(AChannel, ANote, AVelocity)
        LDevice.SendMIDINoteOn(AChannel, ANote, AVelocity)
        LDevice.SendMIDIPitchBend(AChannel, AData)
        LDevice.SendMIDIPolyPressure(AChannel, ANote, AData)
        LDevice.SendMIDIProgramChange(AChannel, AProgram)
        LDevice.SendMIDISystemRealTime(AMessage)
    

    You can send a MIDI Note On message easily as:

      LDevice.SendMIDINoteOn(0, 64, 64);
    

    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
  • Giuseppe Fava

    Giuseppe Fava - 2022-08-27

    I think this is good for me...
    thank you Normann :-)

     
  • Giuseppe Fava

    Giuseppe Fava - 2023-05-16

    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

     
  • adriano

    adriano - 2023-07-19
     

    Last edit: adriano 2023-08-09
  • adriano

    adriano - 2023-07-20
     

    Last edit: adriano 2023-08-09

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.