HISE Logo Forum
    • Categories
    • Register
    • Login

    Best Way to Record from DAW and Play Back in Synch?

    Scheduled Pinned Locked Moved Unsolved Scripting
    2 Posts 2 Posters 177 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • clevername27C
      clevername27
      last edited by clevername27

      Hi folks, I wish to record outgoing MIDI data from the host DAW, and then play it back from HISE in synch with the DAW (with the notes being triggered at their original times). If y'all can help me with this, I promise to write up the corresponding documentation and post my code (as I've done in the past).

      Two ways I can think of here:

      1. The potentially easy way is to use the record function of the MIDI Player. But as @Christoph-Hart notes, that's not what it's made for. I've been able to record into it from the host DAW (with a looooooong bar), and play stuff back—and use getEventList to get a nicely-wrapped array of Message Holders. But there are a lot of questions in the details of keeping everything in synch. The TransportHandler and transport functions of the MIDI player seem to overlap? @ulrik had some adventures here, though I think what he/you were doing was much more reasonable.

      2. The more time-consuming (but probably proper) way is to create a real-time script that captures every incoming MIDI note. Package them manually into in an array of MessageHolders as the notes come in. Unless they're already coming in a Messages? It starts to get fuzzy. There's that nifty MIDI List thing, but that's only 128 entries long…I don't quite get what that's for? I'm back to the question of how to keep things in synch, but it's a little more clear because a TransportHanlder is definitely what's needed. (Although I might need stuff in the old JUCE Playhead struct? Like if the DAW transport is playing, but its recording, I don't want to try capturing anything.) But anyway, I use another real-time script to play the MIDI notes back—provided I get the clocks in synch, and know at all times where the DAW's playhead is. I think.

      The callbacks to use in both seem pretty clear in both cases - a really nice feature of HISE. Transport starts. Transport stops.

      Then there's the mighty MIDI Processor. I…honestly have no idea what it does. Only that it looks…useful. It's documented. I just…can't figure it out.

      LindonL 1 Reply Last reply Reply Quote 0
      • LindonL
        Lindon @clevername27
        last edited by

        @clevername27 so I think you are on the right path with option2.

        First you need some method(script) to record MIDI events arriving, and more specifically their time (as ppq?). So some "record" button that sets the script in ready mode, and on first event defines this as "start time", then everything is an offset from there until the user stops recording.

        At this point you would have a long list of events, so playback should be pretty simple - especially if you are using ppq instead of milliseconds - so the playback can be tempo aligned with the DAW tempo

        HISE Development for hire.
        www.channelrobot.com

        1 Reply Last reply Reply Quote 1
        • First post
          Last post

        52

        Online

        1.7k

        Users

        11.7k

        Topics

        101.9k

        Posts