Jump to content

Real Time recording in SEQ V3 - revisited


Futureman
 Share

Recommended Posts

Hey TK, is it unrealistic to think that V3's realtime recording can be fixed up? Or is it beyond the scope of V3's hardware? (ever)

I know we discussed this indepth in another post,

http://www.midibox.org/forum/index.php/topic,11557.0.html

And that you probably will be working on SEQV4 more than anything, but the realtime recording of V3 is the only real thorn in it's side as far as a perfect sequencer goes (IMHO).

I hope you don't think I'm coming across rude, and maybe I'm a minority when it come's to useing realtime record, but I really really do miss it.

Much love.

Regards

Mike

Link to comment
Share on other sites

Hi Mike,

due to resource limitations of the PIC (RAM/Flash/Timers) it's unlikely that I will be able to provide a better quantisation algorithm for MBSEQ V3. It will be a piece of cake for MBSEQ V4 on the STM32, especially because I already adjusted the programming concepts to simplify the implementation of certain feature requests.

Best Regards, Thorsten.

Link to comment
Share on other sites

  • 4 months later...

Solved in MBSEQ V4! :)


      // take next step if it will be reached "soon" (>80% of current step)
      if( SEQ_BPM_IsRunning() ) {
        u32 timestamp = SEQ_BPM_TickGet();
        u8 shift_event = 0;
        if( t->timestamp_next_step_ref <= timestamp )
          shift_event = 1;
        else {
          s32 diff = (s32)t->timestamp_next_step_ref - (s32)timestamp;
          u32 tolerance = (t->step_length * 20) / 100; // usually 20% of 96 ticks -> 19 ticks
          // TODO: we could vary the tolerance depending on the BPM rate: than slower the clock, than lower the tolerance
          // as a simple replacement for constant time measuring
          if( diff < tolerance)
            shift_event = 1;
        }

        if( shift_event ) {
          int next_step = seq_record_step + 1; // tmp. variable used for u8 -> u32 conversion to handle 256 steps properly
          if( next_step > tcc->length ) // TODO: handle this correctly if track is played backwards
            next_step = tcc->loop;
#if DEBUG_VERBOSE_LEVEL >= 1
          MIOS32_MIDI_SendDebugMessage("Shifted step %d -> %d\n", seq_record_step, next_step);
#endif
          seq_record_step = next_step;
          t->state.REC_DONT_OVERWRITE_NEXT_STEP = 1; // next step won't be overwritten
          dont_play_step_now = 1; // next step will be played by sequencer, and not immediately
        }
      }
[/code]

Intensively tested by recording drum/mono/poly sequences which are played by Logic Audio, shifted by delays of +/- 20% of a 16th note.

Best Regards, Thorsten.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...