Jump to content


Photo

Global Groove - Documentation / How does it work?


  • Please log in to reply
14 replies to this topic

#1 fladd

fladd

    Guruh Motha Fakka is Levitating and Knows Everything About Renoise Member

  • Normal Members
  • PipPipPipPipPipPipPipPipPipPipPipPipPip
  • 1225 posts
  • Gender:Male
  • Location:The Netherlands

Posted 04 May 2014 - 02:03

In a final attempt to understand the quite controversial global groove function of Renoise, I aimed to recreate different global groove percentages using only the delay column. After trying out different things and consulting the documentation several times, I came to the conclusion that several things are not right.

The documentation says that when having a LBP setting of 4, where each line represents a 16th note, then the groove (when all sliders are set to the same values) will shift line 1 and 3 forward in time (they will be triggered later) while leaving lines 0 and 2 untouched. If we ignore for a moment that the sentence "Note that the numbers 0&1, 1&2, 2&3, 3&4 only apply to line numbers when using a Lines Per Beat Setting of 4" is incorrect and should rather read "Note that the sliders 0&1, 1&2, 2&3, 3&4 affect a delay of lines 1, 3, 5 and 7, respectively, when using a Lines Per Beat Setting of 4", then everything is working as expected so far.

To figure out the correct delay to use in the delay column I did the following: I created a pattern where a hihat is played on each row. I activated the global groove. I then rendered the first two rows (0 and 1). I hence expect the second row to be delayed according to the global groove settings. Looking at the rendered part in the sample editor, I now deleted the first half of the sample (from length 0 to length 80) in order to only see what happens to the delayed line.

I first did this procedure with the global groove set to 100%. According to the documentation "Technically speaking, a 100% groove would mean that the second note is triggered together with the third". Hence, in the sample editor, I should see complete silence now since I only rendered up to, but not including the third note. However, here is what I get:

Posted Image

The sample is delayed by an amount of something between AA and AB (where ff would actually be 100% as described in the documentation).

Next, I tried with a global groove setting of 50%, which is arguably more musically useful. Here is what I get:

Posted Image

The sample is delayed by an amount of something between 55 and 56. While this is clearly 50% of my first measure, it should be 80 according to the documentation.

The numbers 55 and AA should look familiar to us. They represent exact triplets with a LBP of 4. However, the global groove does not accurately hit these exact triplets.

To sum up, we learned 3 things:

  • The documentation of the global groove is incorrect
  • It is impossible to recreate the global groove settings with the delay column to achieve the groove on one track only
  • The global groove, while apparently trying to operate on triples, is not accurate

  • Ledger and tris like this

#2 fladd

fladd

    Guruh Motha Fakka is Levitating and Knows Everything About Renoise Member

  • Normal Members
  • PipPipPipPipPipPipPipPipPipPipPipPipPip
  • 1225 posts
  • Gender:Male
  • Location:The Netherlands

Posted 05 May 2014 - 22:59

Uhm...whoever changed the title of this topic: If you have to change it, could you at least change it in a way that leaves the statement correct? Thanks. To be more precise, the "or" should be a "and".

Also, I am surprised that there is so little (read: none) interest in this topic...

#3 freddryer

freddryer

    Advanced Member

  • Normal Members
  • PipPipPip
  • 70 posts

Posted 07 May 2014 - 13:39

This is interesting. And the more i think about it i realize i dont like the groove/shuffle thing i Renoise. I wish it was possible to put track swing/groove/shuffle with the use of midi files or something similar. This is a bit of topic but seriously its a really important topic and makes a big difference in the "feeling" of the music.

Thanks fladd for bringing this up!!
  • Ledger and Djeroek like this

#4 dblue

dblue

    Dodgy Geezer

  • Admins
  • PipPipPipPipPipPipPipPipPipPipPipPipPipPipPip
  • 5607 posts
  • Gender:Male
  • Location:Berlin
  • Interests:Code. Music. Graphics.

Posted 07 May 2014 - 17:17

In general, the current groove system is obviously a bit strange, so we definitely want to improve this and implement a new system at some point.

Anyway... The groove timings in the documentation are simply incorrect. This of course needs to be fixed.

Right now, 100% groove does not mean 100% note delay, but rather it equates to 2/3 of a pattern line — ie. a delay column value of AA, as you've already discovered.

So assuming the default 4 LPB (one 16th note per pattern line) and a groove setting of 100%, then:
  • Pattern line 0 will be extended by 2/3 of a line.
  • Pattern line 1 will be shortened to 1/3 of a line, and also delayed in time by 2/3 of a line.

I've quickly put together this simple tool which hopefully helps to visualize how the pattern lines are affected by the groove settings, and what each groove value equates to in terms of note delay column values.

Attached File  org.illformed.GrooveCalculator.xrnx   1.76KB   194 downloads

org.illformed.GrooveCalculator.gif
  • Ledger, Conner_Bw, vV and 4 others like this

#5 slippycurb

slippycurb

    Big Masta Member

  • Normal Members
  • PipPipPipPipPipPipPipPipPip
  • 515 posts
  • Gender:Male
  • Location:Ireland Co Galway
  • Interests:My interests change from day to day, but i always like eggs.

Posted 07 May 2014 - 19:27

thanks, this has always confused me somewhat, so i just didnt bother with the groove setting .........
  • Ledger likes this
"No one would have believed, in the last years of the nineteenth century, that this world was being watched keenly and closely by intelligences greater than man's and yet as mortal as his own;"


SuckOnThisElectronicEgg


https://www.facebook...ristiansvslions

#6 fladd

fladd

    Guruh Motha Fakka is Levitating and Knows Everything About Renoise Member

  • Normal Members
  • PipPipPipPipPipPipPipPipPipPipPipPipPip
  • 1225 posts
  • Gender:Male
  • Location:The Netherlands

Posted 07 May 2014 - 20:52

In general, the current groove system is obviously a bit strange, so we definitely want to improve this and implement a new system at some point.

Anyway... The groove timings in the documentation are simply incorrect. This of course needs to be fixed.

Right now, 100% groove does not mean 100% note delay, but rather it equates to 2/3 of a pattern line — ie. a delay column value of AA, as you've already discovered.

So assuming the default 4 LPB (one 16th note per pattern line) and a groove setting of 100%, then:

  • Pattern line 0 will be extended by 2/3 of a line.
  • Pattern line 1 will be shortened to 1/3 of a line, and also delayed in time by 2/3 of a line.

I've quickly put together this simple tool which hopefully helps to visualize how the pattern lines are affected by the groove settings, and what each groove value equates to in terms of note delay column values.



org.illformed.GrooveCalculator.gif


Thanks for confirming the documentation bug and thanks for the tool, it makes things very clear.

However, I would like to bring attention again to my point 3: The values are still a bit off AA, which means the global groove is inaccurate (albeit only a bit).

#7 Achenar

Achenar

    Big Masta Member

  • Renoise Team
  • PipPipPipPipPipPipPipPipPip
  • 526 posts
  • Gender:Male
  • Location:Aviemore, Scotland

Posted 07 May 2014 - 21:00

Thanks for pointing this out. I didn't originally write this part of the manual, but I'll test how it actually works and rewrite it to be accurate.

dh.pngsoundcloud.pngyt.pngfb.pngtw.png


#8 vV

vV

    God's or Borg's Chief and Ruler of All Species

  • Moderator
  • PipPipPipPipPipPipPipPipPipPipPipPipPipPipPipPip
  • 16855 posts
  • Gender:Male
  • Location:Netherlands

Posted 07 May 2014 - 21:46

Thanks for pointing this out. I didn't originally write this part of the manual, but I'll test how it actually works and rewrite it to be accurate.


Me neither, but i did put it there. It was a direct copy and paste part from one of dBlue's replies.
But a lot has changed meanwhile also to the timing model, it could be that the groove routines were never properly adjusted to the new sample precise timing schedules that got in since 1.8 or 1.9?
Would also mean that the French explanation should have to be adjusted as well.. (It seems updated to represent 3.0 as well very nice!)
Vv....


cpu Intel Core i7-4820K @3.70GHz
chipset Intel X79 chipset
mem 32 Gb 2400Mhz
os Win 7 64-bit SP1, DirectX 11
audio ESI ESP1010e - > Driver rev:2.0.6.0
video nVidia Geforce GTX780 - > Driver rev:335.23


Renoise Official Manual

#9 dblue

dblue

    Dodgy Geezer

  • Admins
  • PipPipPipPipPipPipPipPipPipPipPipPipPipPipPip
  • 5607 posts
  • Gender:Male
  • Location:Berlin
  • Interests:Code. Music. Graphics.

Posted 07 May 2014 - 21:57

The values are still a bit off AA

The song groove itself is sample accurate. You can quite easily test this by rendering some 16th notes with 100% groove, and then measuring the exact number of samples that each alternating 16th note has been delayed by.

The issue with the note delay column is simply a rounding error. It's obviously an integer with only 256 discrete values, so it cannot represent fractions such as 1/3 or 2/3 with total accuracy. For example, 2/3 of 256 is 170.666 recurring, so if you want to achieve a note delay value of 2/3, then you must either round down to 170 (0xAA), or round up to 171 (0xAB).

The bottom line here is that the groove settings were around long before we ever had the note delay column. The groove values themselves were never intended to correspond perfectly to exact note delay column values, and vice versa.

Aside from the academic argument, I wouldn't worry too much about the effect of this rounding error on your actual music. At a typical tempo of 120 BPM and 4 LPB, the difference between a note delay of 0xAA and 0xAB (ie. the duration of 1/256th of a pattern line) is a mere 0.488 milliseconds. I think we can safely consider this difference to be completely insignificant from a musical groove point of view, can't we? I defy anyone to actually be able to *hear* that difference in a blind test anyway :]
  • Djeroek, Achenar and radian like this

#10 slippycurb

slippycurb

    Big Masta Member

  • Normal Members
  • PipPipPipPipPipPipPipPipPip
  • 515 posts
  • Gender:Male
  • Location:Ireland Co Galway
  • Interests:My interests change from day to day, but i always like eggs.

Posted 08 May 2014 - 10:40

I defy anyone to actually be able to *hear* that difference in a blind test anyway :]


Thats like shouting "Attica"
"No one would have believed, in the last years of the nineteenth century, that this world was being watched keenly and closely by intelligences greater than man's and yet as mortal as his own;"


SuckOnThisElectronicEgg


https://www.facebook...ristiansvslions

#11 Ledger

Ledger

    Guruh Motha Fakka Knows More About Renoise Than Taktik

  • Normal Members
  • PipPipPipPipPipPipPipPipPipPipPipPipPipPip
  • 3378 posts
  • Gender:Male

Posted 06 January 2015 - 16:10

Was pointed here by taktik.

 

Really useful thread for my groove tool thanks!

 

Also thanks to dblue for the calculator tool!


--> Lua For Beginners <--
--> Lua for newbies <--

My Scripts On Forum

Top Tip!

 

cpu : Xeon 1231 v3, os : Win 7 64bit, audio: Audient iD4
posts as 4tune @ KvR and some other music related sites


#12 fladd

fladd

    Guruh Motha Fakka is Levitating and Knows Everything About Renoise Member

  • Normal Members
  • PipPipPipPipPipPipPipPipPipPipPipPipPip
  • 1225 posts
  • Gender:Male
  • Location:The Netherlands

Posted 09 October 2017 - 00:07

So, just to make sure that I really get it:

 

The formula to convert from a more traditional swing value (the way most hardware/software does; 50% = no swing, 66% = perfect triplet swing) to Renoise would be

y = 3 * x - 150

right?

 

And that holds for the global groove setting (where all 4 sliders have to be set to the resulting value) as well as for the shuffle setting in phrases, no matter what the LPB setting is. Correct?



#13 Ledger

Ledger

    Guruh Motha Fakka Knows More About Renoise Than Taktik

  • Normal Members
  • PipPipPipPipPipPipPipPipPipPipPipPipPipPip
  • 3378 posts
  • Gender:Male

Posted 09 October 2017 - 13:04

Can`t  remember off the top of my head and maybe the accuracy could be improved upon.., but I did a calculation function on my Groove control tool which gives:

 

Slider % vs. note delay vs. Drum machine %

 

The values are all displayed on the GUI:

 

 

https://www.renoise..../groove-control

 

Groove%20Tool%20large_0.png


Edited by Ledger, 09 October 2017 - 13:07.

--> Lua For Beginners <--
--> Lua for newbies <--

My Scripts On Forum

Top Tip!

 

cpu : Xeon 1231 v3, os : Win 7 64bit, audio: Audient iD4
posts as 4tune @ KvR and some other music related sites


#14 fladd

fladd

    Guruh Motha Fakka is Levitating and Knows Everything About Renoise Member

  • Normal Members
  • PipPipPipPipPipPipPipPipPipPipPipPipPip
  • 1225 posts
  • Gender:Male
  • Location:The Netherlands

Posted 09 October 2017 - 18:29

Can`t  remember off the top of my head and maybe the accuracy could be improved upon.., but I did a calculation function on my Groove control tool which gives:

 

Slider % vs. note delay vs. Drum machine %

 

The values are all displayed on the GUI:

 

 

https://www.renoise..../groove-control

 

Groove%20Tool%20large_0.png

 

Mmh, interesting. What exact formula did you use? According to my calculations, a Renoise groove value of 23 should result in 57.6 in a more standard (drum machine) swing notion.



#15 Ledger

Ledger

    Guruh Motha Fakka Knows More About Renoise Than Taktik

  • Normal Members
  • PipPipPipPipPipPipPipPipPipPipPipPipPipPip
  • 3378 posts
  • Gender:Male

Posted 09 October 2017 - 18:40

Here`s the code with notations, like I say, may not be fully precise..fortunately I seem to have made a lot of notes.

 

First function is note delay, second is for drum machine.

     --------------------------------------------------------------------------------------
      --Function that converts the percentage of the groove slider
      --to the equivalent pattern note delay value (every second 16th note). returns string
      local function convert_pc_to_sixteenth_delay()
        
        --get the groove slider percentage
        local groove_percent = renoise.song().transport.groove_amounts[1]
        --the renoise groove sliders range of 100% seem to covers a range of
        --0% to 66% of the delay range.  The full delay range is FF hex (256 decimal) so 66% is rounded to 170
        local RENOISE_GROOVE_MAX = 170
        
        --scale to 170 ((66%) three quarters of the 256 max delay range)
        local scaled_groove = 100 * (groove_percent/100) * RENOISE_GROOVE_MAX
        --scale to LPB value (default is 4)
        scaled_groove = scaled_groove * (renoise.song().transport.lpb/4)
        --convert to the hex value to show what would be typed into the pattern delay column
        --on every 16th note
        return string.format("%X", scaled_groove)
        
      end
      --------------------------------------------------------------------------------------
    --Function to convert renoise swing percentage to a Linn Drum equivalent (the first drum machine to implement swing in 1979) 
    --In a Linn Drum the swing values range from 50% to 100%
    --The 50% start value means equal time for the first sixteenth note and the second sixteenth note. i.e. 1 vs 2 and 2 vs 4 (of 16)
    --In renoise this is counted as 0% start value.  The renoise range
    --covers from Linns 50% to [[[87.5%]]]] (only three quarters of the Linns full range)
    --The following function accounts for all these factors

    local function convert_renoise_pc_to_Linn_pc()
      
      --get the groove slider percentage
      local groove_percent = renoise.song().transport.groove_amounts[1]
      
      local RENOISE_GROOVE_RANGE = (100/66) --slider covers 66% of a 16th note
      local SCALE_FACTOR = RENOISE_GROOVE_RANGE * 2 --Linns theoretical 0-100% range covers two 16th notes so multiply by 2
      local LINN_RANGE_START_PERCENTAGE = 50 --Linn starts at 50% so we add this at the end of the calculation
                                             
      --scale then * 100 for percent.
      groove_percent =  ((groove_percent / SCALE_FACTOR) * 100) + LINN_RANGE_START_PERCENTAGE
      
     --for drum machines that use Linn groove but start at 0% 
     -- local adjusted_groove = groove_percent / 2
     -- adjusted_groove = string.format("%.1f",adjusted_groove)
     
    -- return (string.format("%.1f",groove_percent).."% ".."["..adjusted_groove.."]") --format to 1dp
      return (string.format("%.1f",groove_percent).."%") --format to 1dp
    end

Edited by Ledger, 09 October 2017 - 18:45.

--> Lua For Beginners <--
--> Lua for newbies <--

My Scripts On Forum

Top Tip!

 

cpu : Xeon 1231 v3, os : Win 7 64bit, audio: Audient iD4
posts as 4tune @ KvR and some other music related sites