ahhh i bet i know what’s up. it will add it if it is less than the depth of an existing track - it won’t push down beyond the current max depth. i’ll get that fixed.


:slight_smile: :slight_smile: thank youuu let me know how you like using it. i spent a lot of time on the user experience

1 Like

it’s not only that. if there are no tracks within that depth, it will give you feedback saying something like “x/y is out of bounds”.
sometimes, when a deeper track exists, it will deepen the track where a note or command in put in.
but sometimes, it will not.
if it does not, then deepening the track after a note has been put in will reveal the note that was just put it. but sometimes, it will not do that either.
(I think depending on if that slot has been assigned an index number or not yet?)

it’s nice that shortening a track is non-destructive, so that slot content deeper down in a track is saved if the track is made shorter, and can then be accessed/revealed again if the track is made deeper again. it adds great possibilities for performing and altering sequences on the fly.

but if you shorten a track, the index stays the same; only deepening a track seems to update index numbers for slots. I think is part of the explanation here, because when entering notes out of bounds, it treats tracks differently depending on whether or not it has been of a different depth previously or not. or?
again, this might be a non-issue. I’m just trying to figure out what’s going on and how to make use of this structure in the best way : )

yet another video with an example of what I mean (starting from a blank project where all tracks are set to default to 4 rows):

1 Like

Brilliant stuff, I was expecting a lot of these features to take weeks or months, not days! Thank you so much!

1 Like

Here’s an idea for the backlog if it might be useful to anyone.

I was trying to create a cheeky volume fade with samples and velocity. I wasn’t clever enough to figure out a 1-liner command to set velocity values from 0 to full over a given range. I’d love to do that for synth macros too, and fire off routines to swap things around.

IIRC Renoise had an interpolate function, where you set the start and end values on their respective rows, select the range, and use an interpolate tool to do the rest.

Coming from another angle: In lighting design work, consoles typically have something similar for the command line. E.g. Channels 1 through 10 @ 0% through 100%. Or multiple values Channel 1 through 10 @ 0% through 100% through 0% to create a build and fade, alternately done with a modifier like mirror when selecting the range. Similar process for color or focus values and so on and it really saves on programming time.

Not sure how that might translate to Yggdrasil commands though. X1 Y1 interpolate;velocity X2 Y2 ? Another term like fill or spread?

Again, this is just a partially formed idea for the backlogs. And, I might have missed an existing way to do this in Yggdrasil!

@2197 ahhh fantastic. yes there is definitely something awry here. i’ll put some time into this again. thanks for the detailed notes and the video. they help alot.

@Spacejacker you’re welcome!

@Philternaut yessss this is in the backlog. (at the risk of overpromising) in addition to interpolation for committing values i want interpolation for one shot / live usage. so you could do something like X fadeout;10s and it would automate the level over 10 seconds.


question what is more useful:

  • 1.) interpolating the values and committing to slots
    or
  • 2.) introducing automation where you could set a value at slot a, set another value at slot b, and yggdrasil is smart enough to just look ahead and see what the value at any between position is?
4 Likes

Oooooh sick. Nice!!

For my way of working, the second method would be my preference. I really don’t care what the intermediate values are so long as the automation happens between point A and point B. Especially if that makes it easier to nudge start/stop values around at will.

2 Likes

Fade out would be rad! Cool if it could be for a track, group of tracks (&& would get us there), or all tracks.

I will second @Philternaut, the second implementation sounds more useful and potentially easier to wrap my head around in practice.

2 Likes

also second option : )

1 Like

@tyleretters I’m not able to get the k3 assign to work on the current release.

Press k3 and on screen it returns:
“Assign k3 with: k3 = …”

I enter “k3 = unsolo”

Yggdrasil shows the command acceptance animation.

Press k3 again, does not unsolo and returns:
“Assign me with: k3 = …”

EDIT: separate issue but the same session, had a crash when trying to copy/paste from track one to track two. Both set to synth clade, track one had both a random in 1 1 and a lucky in 1 5. Track one was 12 steps long and full of note info, track 2 was 8 steps no note info yet, may have been different clock divisions. Tracks 4 through 7 were all ypc clades. Bpm 60 and all clock divs were 1 or greater. Will try to replicate with minimal steps.

Edit 2: can’t reproduce, had been up an running for a while with many voice parameter changes, mutes, track stop/plays, and 4 tracks of longer sample playback… might have just hit a system limitation rather than anything else? I am able to get a freeze when pushing through parameter changes on the voice of a second synth track ( 2 synth;m1;99 ) when the decay time on the first voice is long.

1 Like

Started exploring Yggdrasil yesterday with my new Norns shield, really cool! had no issues and found it surprisingly simple/intuitive when I was using it with the internal synth voices.

When I tried to use it with Crow the first channel (outs 1 and 2) worked fine but the second channel seemed to output the clock signal instead of gates? It did seem to clock to an enternal signal into Crow just fine. This may be user error since I am new to crow and norns.

Also I haven’t tried it yet but I was planning to use my Ansible as an expander for crow via i2c, is this supported?

1 Like

v1.0.15

  • NEW Use the lacuna @ phenomenon to first disable the current track, then enable and queue any other track. The net effect is a clean handoff of one track to another. Lacunae honor ascending and descending tracks (it is smart enough to start at the top or bottom of a track) but lacunae do not effect solo and mute attributes. Thus, it is possible to queue and and play muted track. This is a feature, not a bug.
  • FIX Any command specifically targeting a slot deeper than the track will automatically fill the track to that depth.
  • FIX K3 assignment works again.
  • FIX Copy and paste tracks works again.
  • DEV Complete overhaul of the clock architecture to use 96 PPQN. clock commands remain the same.

lacuna demo


@corey - k3 and copy/paste are fixed. sorry about the regression issues.

@eschlappi that is awesome! i’m glad you’re enjoying it. i’ve been having some severe issues with getting crow to work as expected. i’ve kinda given up on it for now. need to come back with a fresh set of eyes in a week or two. i have no plans to do any ansible stuff at the moment.

6 Likes

I also get similar freezes on my shield, but it’s been difficult to repro/document. It’s typically when I have 4-5 tracks full of ypc and internal synths with varyimg track clocks and lengths, then edit a synth parameter with the sequencer running, or paste something.
EDIT: This happens very frequently. 75% of the time I sit down to a session at least.
MOAR EDIT: I have not tried since lacuna update so will see how it goes tonight.

if (when) it happens again send me the run file please

1 Like

lacuna is so neat, clever and fun! i always loved trackers for their precision and speed, where you can program all the details of a full piece of music and then execute. but i never really thought of them as the best tools for experimentation, live interaction and happy mistakes (even though lsdj has brilliant gestures for live playability and variable pattern length for each channel). the functions and ui of yggdrasil really changes that, though. it just lends itself to a completely different type of usage for me, and i love it. lacuna, user variables and routines are really brilliant for performing with. suddenly, i find myself practicing input performance and live coding – a skill most often not associated with trackers!

again, here’s an open list of ideas concerning ux and functions that’ve come to mind while tracking. sorry if i’m repeating things that already has been mentioned. don’t mean to bloat – i’m just so stoked about this script!

  • could lacuna also be given an y-value, or be combined with anchor somehow, to jump to a certain row on given track? @2;8 or @2#8. I tried combining it with && but didn’t work.
  • close sample selector on enter/commit sample (alt close on enter if nothing is changed)
  • “select…” in editor changes name to loaded sample filename
  • clock as phenomenon (!) to change playback speed at given slot
  • individual track sync (as phenomenon), to sync one track to another. for instance 1 sync;2 would line up track 1 with 2’s position.
  • wait and/or offset phenomenon, pauses playback of track for x beats, or pushes a track’s playback position by x. can be used to sync up (or out) tracks, but also for rhythmic programming: 1 4 wait;4 and/or 1 offset;2
    edit: just realised shift is exactly what i meant with offset, and as phenomenon it can be achieved with anchor. wait would still be cool.
  • global synced track wide phenomena? perhaps there could be a toggleable global phenomena track: 0. maybe all phenomena wouldn’t work (like lacuna), but some would be really cool. imagine being able to 0 2 end all tracks to create a beat repeat like effect across the whole project (could also be achieved with anchor), or randomise all tracks with random or lucky on a certain step, or reverse all tracks simultaneously…
    and most importantly: in combination with the clock-phenomenon, being able to add swing to the whole project by alternating clock speeds on every other row.
  • increase/decrease all values of specified command on track, e.g. 2 vel;add;10 to add 10 to all velocity values on track 2, or 1 synth;m1;sub;25 to subtract 25 from all slots with m1 values (not sure about the syntax on this, but you get the idea). if you’ve programmed a complex macro pattern for your synth clade, or cc pattern to your midi hardware, it would be nice to be able to change the overall value while maintaining the difference relationships.
  • cut/copy/paste specified commands (vel, cc, macros etc) like 1 copy;vel and 2 2 paste;m2. should work with selection too.
  • learn = any command like you do with k3 to listen for and assign a midi controller input
  • being able to enter random values within a range, for instance vel;50-90 randomises a value every time between 50-90
1 Like

thanks for the feedback! i’m so gad you dig lacuna!!! yeah the combo of tracker + livecoding was really interesting to me. it is really exciting it is working for you.

i’ve logged your feature ideas in the backlog (mostly under deep freeze), but i have some specific questions:

“select…” in editor changes name to loaded sample filename

this one feels like it would be frustrating because it would appear as if you were supposed to type the same name (like the rest of the fields) then. can you say more about how this would work? is the user just supposed to know that the sample is a special field? maybe there’s an indicator of some sort…

close sample selector on enter/commit sample (alt close on enter if nothing is changed)

my thinking here was you may want to audition multiple samples.

2 Likes

i thought it’d make sense since all other fields in the editor show their value. it’s kinda already indicated by not having a blinking text cursor/vertical line. also, if there is a sample loaded, the user have either already used the sample-selector or loaded one from the terminal. at least in the first case the user will already know how it works.

ah, yes – you’re right. that does indeed seem important enough to keep at the cost of a single extra key press. when i think a step further, it also makes sense to already have your finger on the esc key, so you can double tap it to view the full tracker page. i was thinking before double tapping enter to load sample, close loader and close the editor would work (similar to the other fields, which is really neat)… but then you would just close and open the sample selector :sweat_smile:

Loving this tracker @tyleretters !

8 Likes

you bring up a good point


@Quixotic7 this is totally lovely. adding it to the gallery!

2 Likes

playing around with sequencing monomachine with yggdrasil. simple but fun stuff: variable depths and clocks, random, lucky and lacuna. be aware of funky video editing (had to shorten it a bit).

edit: updated video link to youtube, cause the other service i used was super slugish

7 Likes

:clap::clap: oh man that was so cool. sounded great. did you synthesize the samples? i’m unfamiliar with everything monomachine does.

gave me an idea for a new command too – the ability to automatically put whatever at the end of a track. so 4 end @1 for example.

2 Likes