Has anyone played with the ii.jf.retune command at all? I’m getting odd behaviour.

For example, if I send

ii.jf.retune(2, 2, 1)
ii.jf.retune(6, 6, 1)

I would expect 2n and 6n to be the same as their default settings. But instead with the Intone knob at noon, they play the same pitch (Identity) but as I rotate clockwise they go DOWN (I would expect them to go up) with the same pitch and then quickly become inaudible. And if turn Intone counter they immediately turn off past noon and there’s no output at all.

If I send ii.jf.retune(0, 0, 0) everything resets to the defaults correctly. Any ideas?

I have a theory, just because I ran into some troubles with setting arguments in Geode. not at my JF at the moment, but what happens if you send:

ii.jf.retune(2, 2/1638, 1/1638)
ii.jf.retune(6, 6/1638, 1/1638)

?

I thought the same thing too after reading the above, but no dice. There is no response from JF at all when I send those commands from Druid or Max.

When i select ii-JF in the awake patch nothing is happening
did i erroneously assume that i could send info from awake to JF w/o patching normally?
i do not seem to be getting ii info sent from crow to JF

Im not sure if this is related to what @dan_derks was talking about but Im experiencing odd pitch behaviour when using JF as a complete voice and using crow to play jf from a cv and gate source.

The script is:

input[1].change = function(s)
ii.jf.play_note(input[2].volts,5)
end

function init()
ii.pullup(true)
ii.jf.mode(1)
input[1].mode(‘change’, 1, 0.1, ‘rising’)
end

All it doest is every time you send a trigger to input 1, it will sample the voltage at input 2 and send it to JF as a new note to play but it seems to me like it doesn’t always sample the correct cv. If i send in a simple sequence from a track of kria (ansible out to crow in) i feel like it may be sampling too soon? I had a thought to delay the trigger before sampling to fix the issue but im not sure how to do that as im a super noob to coding. Anyone have ideas?

Sounds like Kria’s gates are triggering the input.change before it’s CV output has settled. There’s no in-built delay function in crow at the moment, but I sketched up this solution to the problem (though it’s untested as I’m away from my case rn):

-- add this function to your script
-- (to be included in crow firmware in future)
function delay( time, action )
    local function devent()
        action() -- this line executes the delayed function
        metro.free(dmetro.id)
    end
    local dmetro = metro.init( devent, time, 1 )
end

-- delay the call that reads the input voltage by 3ms
-- the old line is 'wrapped' in a function
-- this stops it from being executed immediately
input[1].change = function(s)
    delay( 0.003, function() ii.jf.play_note(input[2].volts,5) end )
end

function init()
    ii.pullup(true)
    ii.jf.mode(1)
    input[1].mode('change', 1, 0.1, 'rising')
end
3 Likes

Amazing! Thanks for code additions.
I just had a go adding it and I’m getting an error in druid saying:

Metro.init : nothing available

Any ideas?

Cycle mode, and the time/intone knobs will have a big effect on what is going on. I generally have time around 10 o’clock and intone around 11 o’clock I think.

@cosmicsoundexplorer that needs to be lowercase metro. Did you see uppercase in some docs somewhere that we should fix?

@Galapagoose All I did was copy your code, paste it into mine and removed the

function init()
ii.pullup(true)
ii.jf.mode(1)
input[1].mode(‘change’, 1, 0.1, ‘rising’)
end

saved it and uploaded it to crow. it then starts running the script and then I get

Merto.init: nothing available

my code now looks like this:

input[1].change = function(s)
ii.jf.play_note(input[2].volts,5)
end

– add this function to your script
– (to be included in crow firmware in future)
function delay( time, action )
local function devent()
action() – this line executes the delayed function
metro.free(dmetro.id)
end
local dmetro = metro.init( devent, time, 1 )
end

– delay the call that reads the input voltage by 3ms
– the old line is ‘wrapped’ in a function
– this stops it from being executed immediately
input[1].change = function(s)
delay( 0.003, function() ii.jf.play_note(input[2].volts,5) end )
end

function init()
ii.pullup(true)
ii.jf.mode(1)
input[1].mode(‘change’, 1, 0.1, ‘rising’)
end

I’m still a super noob so i may have stuffed it up?

I had a look at metro.lua on github and the code has metro with an uppercase M throughout it. would that be the issue?

Also is there a simple way to have JF base frequency start lower as i like to tune my oscillators to C3 on kria’s 3rd octave setting to enable me to go up and down in octaves.

Cheers!

@dan_derks @Galapagoose

Just wanted to check in to see if you guys had had a chance to check out the tuning commands, still no dice on my end. Thanks!

so, with teletype: JF.TUNE 1 x 1 messages allow me to walk through the first x >= 6 harmonics. this is expected and traditional behavior.

but when using ii.jf.retune with crow in druid:

  • ii.jf.retune( 1,x,1 ) where x>=1 just shuts the channel off completely.
  • ii.jf.retune( 1,1,1 ) does not restore, which is unexpected.
  • ii.jf.retune( 0,0,0 ) restores as expected.
  • ii.jf.retune(1,3/1638.4,1) no change

I’m stumped, too. @Galapagoose, any ideas?

looks like all this might be getting addressed in coming update – hang tight!

1 Like

Hey @dan_derks. I wasn’t aware of this, but just checked and the i2c descriptor is wrong for Just Friends on crow. I corrected it on my end now, so this command will be fixed in the next crow update.

4 Likes

I’ve read a lot of things about going from crow to just friends, but is the reverse possible ? Like using Just Friends via Crow to modulate ableton for instance and triggering a drum machine ?

Not really feasible with just those two modules. You would probably want a DC-coupled interface (e.g. Expert Sleepers ES-8, various MOTU or RME interfaces) to send the voltages from JF’s outputs to your computer. Crow is more focused on taking commands from computers than giving them; it can be programmed to send serial messages back to the host but I would not rely on making use of that for control signals to Ableton. Plus, JF doesn’t transmit its output signals over I2C so you’d only be able to grab two of the seven JF outputs with Crow’s two inputs.

1 Like

You can definitely use the two CV inputs to capture signals & triggers from Just Friends, but @desolationjones is correct that it’s pretty limited compared to the number of rhythmic signals out of Just Friends. @voidstar & @dan_derks made some great Max4Live devices that do this voltage capturing really well.

An aside… making a Just Friends-ish modulation device in Max4Live would be a project I’d love to see someone create!

8 Likes

Just For Friends

There’s your name already…

7 Likes

Hey fellow Crow/JF users!

I feel as if since using my Crow/JF/Norns combo, JF is stuck in some sort of i2c limbo?

Last night I was trying to sequence Just Friends in sound mode and the time(v/oct) was not reacting to pitch CV from Ansible’s regular outputs.

Is there a way to reset Just Friends via Druid/Crow? Is there a “proper” way to shut down my system when using Norns to sequence JF via i2c from Crow?

I guess it seems like Just Friends is still listening to i2c when I want it to be standalone.

Any thoughts?

Thanks!

1 Like

on Norns I believe the thing you want is crow.ii.jf.mode(0). It should be very similar in Druid, probably without the crow prefix.

Per the docs, Druid is happy to help you learn how to script over i2c ii.help() or ii.<device>.help(), where <device> would be replaced with the name of the device you’re trying to learn about.

2 Likes

I’ll give this a shot! Also I wonder if I’m turning off my system with Norns outputting to JF/Crow from a script this may be causing my issue. Is it smart to switch the script I’m using back to audio out before powering down?