Coder Social home page Coder Social logo

carrierdown / mutateful Goto Github PK

View Code? Open in Web Editor NEW
395.0 14.0 13.0 1.6 MB

Add-on for Ableton Live that enables live coding functionality fully integrated into Live's session view.

License: GNU General Public License v3.0

JavaScript 45.55% C# 52.54% HTML 0.08% Svelte 1.19% TypeScript 0.64%
m4l maxforlive ableton-live ableton live live-api live-coding csharp dotnet6 algorithmic-composition

mutateful's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mutateful's Issues

Very easy to crash app with bad formula

Inputting an incorrect formula crashes the app.
For example [A1] =b1 slice /8 results in

Received 1 clips and formula: [<b1>0] slice /8 transpose -12
Unhandled exception. System.FormatException: Input string was not in a correct format.

Support nested statements

Nested statements could be very useful to specify a pre-transformation to a clip inline, without having to set up a separate clip/cell with this transformation first. For instance, consider the difference between

[A1] beat
[A2] =A1 resize .5
[A3] =A1 A2 interleave -ranges 1/16

and

[A1] beat
[A2] =A1 (A1 resize .5) interleave -ranges 1/16

Enhancement: Invertable filters.

Passing the arg -invert to a filter command would leave the result rather than deleting it.

Reasoning: Often less interesting passages contain longer note to accentuate cadence and the flourishes would be shorter.

I could look at this, if it is non trivial. Many thanks

Loop

Extend one or more clips by looping, by specifying a loop factor or absolute length.

Enhancement: Insert silence

It would be helpful to pad silence

perhaps
padtime [-at time] [duration]

and just insert that as blank space
Many thanks, Even just at the start would be fine.

This is particularly relevant for things like SCAN where the results can be hard to envisage in advance and hard to sync in retrospect.

Not least it can be used for rhythm nudging. At which point a negative value might be handy to delete time at the start too.

Port _ x * ' and : operators from re<urse

These operators would be very useful to have in mutateful as well.

Examples:

  • 1x5 becomes 1 1 1 1 1
  • Ranged values like 1:5 (start at 1, interpolate towards 5 for the length of the clip), or 1:5:1 (start at one, end at 5, increment by 1 for each step, possibly wrapping back to 1 if the clip is long enough)
  • Silence, discardable values: _
  • Fill operator: *
  • Alternation operator: ' (e.g. 1 2'3'4 1 becomes 1 2 1 1 3 1 1 4 1 ... and so on)

UDP Socket Failure OSX 10.14.5

Unable to get formulas running properly on OSX 10.14.5: no MIDI data generated upon execution via [Cmd+R, return] renaming of clips. Opening the patcher for mutateful.amxd from Ableton, patcher console reads "sadam.udpReceiver - can't open socket."

Update - trashing and restoring .mxe externals and running the mutateful.app from v1.0.0 (instead of latest version) has it working for me.

Component Path Issue

Having a bit of trouble running the UNIX exec application on macOS Mojave 10.14.5 despite it working perfectly before. Receiving the following issue with both the v1.0.1 and v1.0 builds upon opening:

The application to execute does not exist: '/private/var/folders/6x/x59ln4fd5y1dvdz7zlxm5rph0000gn/T/.net/Mutate4l/cgscinom.sti/Mutate4l.dll'.

Seems to be looking for a .dll library file but the path goes bad after [/T/], and I can't seem to find anything helpful in the code or patchers for either version. Any help would be appreciated, excited to work with the new commands!

ParseTokensToCommand fails on zero length list

image

Getting a System.ArgumentOutOfRangeException: 'Index was out of range. Must be non-negative and less than the size of the collection.
Arg_ParamName_Name' sometimes. I am guessing this is linked to the initial setup with the backend but I'm not 100% sure on a repro case yet.

UDP Connection

I get the bug "On macOS there seems to sometimes be an issue with activating the externals needed for the patcher to work"
which i can resolve as by opening the m4l device as you suggested.
But as soon as i close it the connection is lost again. So i would need to keep the device open all the time to work with mutateful.

Mix

Command to mix two or more clips

Support scales, scale degrees, note values

Support input like =a1 setpitch c3 c#3 e4 g#4 (which will make notes and clip references interchangeable in many cases, but can be parsed based on context, i.e. implicit casting).

Also support input like =a1 scale dorian f#

As well as possibly things like =a1 setscale dorian f# setoctave 4 setpitch 1 4 2 1 5 (where the numbers represent degrees of the current scale)

REQUEST FOR INFORMATION. Durations greater than a quaver

How does one express a crotchet, minim, semibreve and moreover multiples of those for durations?

I tried the obvious "1" for a crochet and got an error about mixing formats.
Rather than report that (annoyingly) as a bug I am checking how would one would express it.

I am assuming it must be 1/1 for crotchet, 2/1 minim, 4/1 semibreve, 8/1 breve, 16/1 longa, et cetera.

Lets say Take is the command. How would one say
Start at "4 bars and 2 beats" and take "2 bars and 3 beats"

is it 9/2 5/2 ?

If so, that's pretty tortuous for the average user probably, I am not even sure the maths in that example would be correct and obviously some really fiddly values could result. :\ And that was a really easy example :\

perhaps some sort of shorthand? Maybe check for two periods in the string and do a Bars.Beats.Ticks conversion? Live works like that internally AFAIK, at least as far as the average user is concerned.
Possibly request for enhancement?

"Relength" Relen and RL

In practical use commands that don't have a TLA (Two/three letter acronym in this case) are cumbersome. Going forward if all command could have a TLA that would be ideal.
(With exception to things that possibly have no good shortname like "scan")

For those cases that are currently missing a TLA obviously considerations such as 'clarity of short-name'; 'avoiding accidental cognates' and of course the general lack of namespace are key.

Recognising that would it be better to just provide a push with my ideas or do you want to hash it out in comments on this issue first?

Many thanks.

=d1 arp -by c1 -by b1 needs catching in parser

Welcome to mutateful!
Open Ableton Live, drop mutateful-connector.amxd onto one of the tracks, and start entering formulas.
watchedclips at 2557 set to 2524
Received 2 clips and formula: [0] arp -by [1]
Sent 309 bytes over UDP
Received 1 clips and formula: [0] relength 2.0
Sent 159 bytes over UDP
watchedclips at 2556 set to 2524
Received 3 clips and formula: [0] arp -by [1] -by [2]
Unhandled exception. System.ArgumentException: An item with the same key has already been added. Key: By
at System.Collections.Generic.Dictionary2.TryInsert(TKey key, TValue value, InsertionBehavior behavior) at Mutate4l.Cli.Parser.ParseTokensToCommand(IEnumerable1 tokens)
at Mutate4l.Cli.Parser.<>c.b__1_3(List1 x) at System.Linq.Enumerable.SelectListIterator2.ToList()
at System.Linq.Enumerable.ToList[TSource](IEnumerable1 source) at Mutate4l.Cli.Parser.ParseFormulaToChainedCommand(String formula, List1 clips, ClipMetaData metadata)
at Mutate4l.Cli.CliHandler.Start()
at Mutate4l.Program.Main(String[] args)

Edge case maybe but there

MacOS Formulas not working

Using macOS Sierra 10.12.6 formulas not working. Tried clicking the edit button and trying a formula but nothing changed.

Thanks!

Arrangement mode support

As seen in http://jgarcia.hungry.jp/project/alias-clips/ it is possible to track and update arrangement clips as well, provided they've been selected before and you don't move them in groups.

I don't know the details but I started implementing until I've found both your projects so I figured this much. You can observe the selected clip and keep track of it by id, even though they don't have a canonical path (though strangely they have a track as canonical parent).

Mutateful.app v1.0 doesn't work on macOS Catalina

Mutateful.app, when clicked, produces an error popup with message: "The application “Mutateful.app” can’t be opened."

I tried compiling it via command line:
dotnet publish -c Release /p:RuntimeIdentifier=osx.10.15-x64
and it worked.

Concat -with option

I've rewritten the concat to support a simple -with (since, in my mind this is concat and the original version is more like the unix cat command) perhaps this will seem stupid when I understand more however
= cc a1 -with b1
now results in a1+b1 in the new clip
if this is not ridiculous I could put together a pull. thanks.

Support chaining of commands

Old syntax:
interleave a1 a2 mode time ranges 1/4 => a3

New syntax?
a1 a2 interleave -mode time -range 1/4 => a3

All functions should support 1 or more inputs and outputs to support easy chaining without needing to worry about exact outputs of each step.

Establishing a hard upper note count bound per clip.

Doing some quick haze testing I noted that 909 notes appears to be the upper bound per clip.

image

Passing greater than this would cause the System.ArgumentException: 'Destination array is not long enough to copy all the items in the collection. Check array index and length. Arg_ParamName_Name' error pictured.

Can we confirm that 900 is a reasonable upper bound per clip and is there any situation where that value is further added to, that I have overlooked here. For example is this the total count of all notes passed in all clips for this one transaction? Just trying to establish if that is indeed the right place to drop in some defensive error-handling.

Many thanks

macOS errors loading UDP externals

Hi, I just started from scratch with the 1.1 release on Catalina 10.15.5. Populating the formula ids works correctly, but the formulas themselves don't do anything, and when I edit the device I see some errors in the Max console:

image

I just had the experience setting up gibberwocky of needing to use xattr to remove a quarantine attribute from externals before Max could load them, so it occurred to me that the problem here could be similar, but I actually have no idea where the sadam.udp* externals are (supposed to be) stored.

Getting this error in terminal "The application to execute does not exist"

Everything was working fine until today, when it started giving me this error:
exit;
The application to execute does not exist: '/private/var/folders/r9/zm8jfd9112l0w8r9xl56ycz00000gn/T/.net/Mutateful/iwn3ozxb.2zu/Mutate4l.dll'.
I am on High Sierra 10.13.5
Tried to download and relaunch but keep getting this, any ideas to what I might've done to cause it to do this?
Thanks

Morphing 2 clips

It would be great to have a functionality which allows smooth cross over of 2 clips. The function would work over x beats and switch pitches and or rhythm smoothly.

Common Time maths, Clip denominators and numerators,

Whilst doing some very basic tests I noted that all internal maths is performed with an assumption of 4/4 and clips that are copied in non common-time signatures via concat end up being 4/4 (and obviously the wrong length)

It may not be well known that one can name the scenes with a Signature and BPM and the transport auto-switches to it on playback. (Shown in diagram)

This being the case supporting multi time playback seems more critical.
Noted that Clip class did not have a concept of signature_numerator and signature_denominator properties and moreover I suppose this also need generalising to not mash up any other extant math wangles you did for establishing timings and whatnot. Thus I did not look at what it would take to support this end to end yet as you would very likely know the gotchas. But seemed worthy of note here. Seems to me that any extant maths would just need scaling by the reciprocal of the results from "factor of signature_numerator over signature_denominator" for both such that 3/4 from 4/4 gives us 1.33333333333 but maybe I am wrong there.

image

In the interim common-time is the only safe choice

Live 11?

Not sure if this issue is bc I'm using live 11 or if its another bug but there are no errors in the mutateful application or the m4l device but no formulas work. the automatic setting of clip names works but formulas dont create any notes.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.