Jump to content


Photo

[Solved] Help: check notes with follow the player position in Patt. Ed

check notes pattern editor check

  • Please log in to reply
57 replies to this topic

#51 Raul (ulneiz)

Raul (ulneiz)

    Guruh Member

  • Normal Members
  • PipPipPipPipPipPipPipPipPipPipPipPip
  • 999 posts
  • Gender:Male
  • Location:Spain

Posted 15 May 2017 - 19:15

Just as a side note I always found that your best question is still -> http://forum.renoise...roup-for-clone/

 

Checking this out. I think there is a simple way. Check if the selected track does not have note columns. If the track selected do not have note columns is not a Track, and if it is within a Group, it must be a Group. A Group can only contain Groups or Tracks ^_^. Confronting the cloning of whole groups is a challenge for me. Until Taktik does not update to the next version of Renoise (3.1.1), I should not try. The next version will have improvements related to a bug in the groups.

 

Related: http://forum.renoise...s-other-things/


:excl: Development of my tool: GT16-Colors

 

:excl: My API wishlist R3.1 (updated 24 July 2017):

Spoiler

 

:excl: My Renoise 3.1 wishlist (updated 26 September 2017):

Spoiler

#52 4Tey

4Tey

    Chief Above Chief Member

  • Normal Members
  • PipPipPipPipPipPip
  • 382 posts
  • Gender:Male

Posted 15 May 2017 - 19:50

 

Checking this out. I think there is a simple way. Check if the selected track does not have note columns. If the track selected do not have note columns is not a Track, and if it is within a Group, it must be a Group. A Group can only contain Groups or Tracks ^_^Confronting the cloning of whole groups is a challenge for me. Until Taktik does not update to the next version of Renoise (3.1.1), I should not try. The next version will have improvements related to a bug in the groups.

Hmm Raul, bold statements indeed ;)  I still say that is a very good question in a way.  I admit that I only looked at it very briefly.  The idea of a recursive function from Joule is probably sound (but tricky).  However I found that before you even get to that to write a function that takes a top level group and copies all groups/tracks within the top level group and places it next to the group (i.e. you have completely cloned the top level group) is difficult with the functions you have on offer from the current API.  Even Taktik (as you point out Raul) produces a bugged version of this in Renoise 3.1.  Put it this way Raul, if Taktik doesn't add anymore helper functions for when it comes to traversing the structure of the groups/tracks in Renoise (or even add like a clone group call), then I'm afraid you are in the same boat as you are now.  Which means to answer that question would probably make this thread about 'follow player position' look like a small casual walk-in-the-park in simplicity in comparison to coming up with a stable and robust algorithm that answers that other thread :D  Not saying it isn't possible (offhand) (I'm sure Danoise/Joule could come up with something), but I think that it would take some thought to write that function/code :)



#53 danoise

danoise

    Probably More God or Borg Than Human Member

  • Renoise Team
  • PipPipPipPipPipPipPipPipPipPipPipPipPipPipPip
  • 6407 posts
  • Gender:Male
  • Location:Berlin
  • Interests:wildlife + urban trekking

Posted 16 May 2017 - 18:36

Check if the selected track does not have note columns. If the track selected do not have note columns is not a Track, and if it is within a Group, it must be a Group.

 
Don't assume anything here - each track has a type you can compare against: 

renoise.Track.TRACK_TYPE_SEQUENCER
renoise.Track.TRACK_TYPE_MASTER
renoise.Track.TRACK_TYPE_SEND
renoise.Track.TRACK_TYPE_GROUP

You'll still have to wait for a fix for the bogged cloning of groups, though. This is obviously a bug in Renoise itself. 


Tracking with Stuff. API wishlist | Soundcloud


#54 Raul (ulneiz)

Raul (ulneiz)

    Guruh Member

  • Normal Members
  • PipPipPipPipPipPipPipPipPipPipPipPip
  • 999 posts
  • Gender:Male
  • Location:Spain

Posted 16 May 2017 - 19:06

 
Don't assume anything here - each track has a type you can compare against: 

renoise.Track.TRACK_TYPE_SEQUENCER
renoise.Track.TRACK_TYPE_MASTER
renoise.Track.TRACK_TYPE_SEND
renoise.Track.TRACK_TYPE_GROUP

...

 

Yes, I do not remember exactly why I have trouble checking out child groups (groups within a group). I assumed to compare with renoise.Track.TRACK_TYPE_GROUP was sufficient, but I was not able. It would have to start again to know how to properly clone. Now I have this issue parked.

 

...

 

With regard to reading the first line of each pattern, I have finally chosen to rely on the observable of the pattern, by a separate function. The TNC tool has already been published as module inside the GT16-Colors tool, here:

 

http://forum.renoise...11/#entry354120


Edited by Raul (ulneiz), 16 May 2017 - 19:12.

:excl: Development of my tool: GT16-Colors

 

:excl: My API wishlist R3.1 (updated 24 July 2017):

Spoiler

 

:excl: My Renoise 3.1 wishlist (updated 26 September 2017):

Spoiler

#55 Raul (ulneiz)

Raul (ulneiz)

    Guruh Member

  • Normal Members
  • PipPipPipPipPipPipPipPipPipPipPipPip
  • 999 posts
  • Gender:Male
  • Location:Spain

Posted 16 May 2017 - 19:12

...

 

You'll still have to wait for a fix for the bogged cloning of groups, though. This is obviously a bug in Renoise itself. 

 

Yes, I'm waiting patiently.


:excl: Development of my tool: GT16-Colors

 

:excl: My API wishlist R3.1 (updated 24 July 2017):

Spoiler

 

:excl: My Renoise 3.1 wishlist (updated 26 September 2017):

Spoiler

#56 Raul (ulneiz)

Raul (ulneiz)

    Guruh Member

  • Normal Members
  • PipPipPipPipPipPipPipPipPipPipPipPip
  • 999 posts
  • Gender:Male
  • Location:Spain

Posted 25 May 2017 - 14:19

Hello again! I put this topic as solved!

 

Thank you very much for all the help!

 

I would like to leave only one reflection. I think it would be a good thing if we had an effective line observable. To avoid having to resort to timers or other more complicated methods, which only a few people could build.

 

Finally, it seems that there are two ways to solve this issue:

  1. Using a timer that constantly bombards the update of each line. This is the method I have chosen, because the code is simpler. which is not 100% reliable at high speed.
  2. Use a kind of cache memory to read all the data of each pattern and project them in real time when necessary. I understand that it is more or less what Joule proposes. That cache must be updated every time the composer modifies anything in the pattern editor, within the range of the cache. I still do not understand this point. For this I would need to see a simple tool that works this way.

To create tools of this type, it is necessary to optimize the maximum code, as Danoise warns. Simply avoiding unnecessary calls increases the reaction speed to work "in real time" within the limits of the timer.

 

If the objective is to read data from particular note columns, it is better to create a function that directly returns that data without having to check empty pattern lines or empty track lines. The reason is that a timer is used. The more chained operations, the later it will return the data. Apparently, the shortest route to get the data is the fastest. That does not add conditions before.

 

A reliable tool would be one that works perfectly at a high speed, something like 900 BPM & 8 LPB as minimum without any error. With timer it is frankly difficult to achieve that.

 

Finally, being able to get reliable data from the line can accommodate a lot of useful tools:

  • Time reader, with resolution in tenths of a second, per line. A time marker could be built.
  • A visual metronome configurable. This is very interesting.
  • Converter of musical notes, even with a selector of clef.
  • Of course, an orderly note follower to find melody errors and to improve the melody (my tool).
  • A track player based on blocks per pattern.
  • Up to 3 track players  based on blocks per pattern. The composer could select 3 tracks to compare.
  • Etc.
If there is no reliable way of reading data for each line, all these tools can return problems...

:excl: Development of my tool: GT16-Colors

 

:excl: My API wishlist R3.1 (updated 24 July 2017):

Spoiler

 

:excl: My Renoise 3.1 wishlist (updated 26 September 2017):

Spoiler

#57 Raul (ulneiz)

Raul (ulneiz)

    Guruh Member

  • Normal Members
  • PipPipPipPipPipPipPipPipPipPipPipPip
  • 999 posts
  • Gender:Male
  • Location:Spain

Posted 15 July 2017 - 19:49

:blink:


Edited by Raul (ulneiz), 15 July 2017 - 22:27.

:excl: Development of my tool: GT16-Colors

 

:excl: My API wishlist R3.1 (updated 24 July 2017):

Spoiler

 

:excl: My Renoise 3.1 wishlist (updated 26 September 2017):

Spoiler

#58 Raul (ulneiz)

Raul (ulneiz)

    Guruh Member

  • Normal Members
  • PipPipPipPipPipPipPipPipPipPipPipPip
  • 999 posts
  • Gender:Male
  • Location:Spain

Posted 18 July 2017 - 22:27

Okay, I've been reviewing again what exactly happens here. And now it's very clear. I have come to use a timer of 1ms (practically in real time), to trace the selected line constantly, not including the first line of each pattern.

 

The results have been excellent, without any kind of strange error. It is 100% clear that the jump from one pattern to another causes some alteration in the reading (perhaps a little delay) that randomly returns errors.

 

This means that if this small problem were solved in line one, we could use a timer of 1ms without any error in all the lines. So the problem is not the very small time of the timer, but what happens before the timer takes over.

 

Please, I formally request that this be solved that provokes errors when jumping between patterns. A _observable for selected_line_index it could work almost instantly (1ms). But you must go very thin at the precise moment  change of pattern.


:excl: Development of my tool: GT16-Colors

 

:excl: My API wishlist R3.1 (updated 24 July 2017):

Spoiler

 

:excl: My Renoise 3.1 wishlist (updated 26 September 2017):

Spoiler