Can Grainstorm be adapted for the new Arc 2

  • I am considering trading my '11 Arc 2 for a '12 Arc 2.

    It seems like a fair trade, but my favorite application, the Stretta-designed "Grainstorm" engages the button-push functionality of the Arc.

    I am not a UI designer/conceptualist, nor am I a programmer.

    I am wondering if there's an easy way of adapting Grainstorm to work with the new Arcs.

    There must be a way, but my brain isn't so great for this kinda thing.

    Anyone have any ideas how to modify Grainstorm for the new Arcs?

    Lemmekow. Thanks!

    - c

  • Btw, this is Grainstorm, for those not familiar.

    http://docs.monome.org/doku.php?id=app:grainstorm

    - c

  • it would be pretty easy i think. you would just need to commandeer a row of grid buttons.

  • Anyone wanna volunteer to post a modified patch?

    - c

  • If you have an iPad you might want to take a look at an app called Samplr. It reminds me of Grainstorm in a way and is very fun to play!

  • That doesn't sound easy.
    ("I am not a UI designer/conceptualist, nor am I a programmer.")

    Parts of it are simple enough. Here's a generic code block that self-configures to your app (it sets its own prefix based on yours) and injects arc button signals when four onscreen buttons are pressed or released.


    ----------begin_max5_patcher----------
    1407.3oc6assaipCE84juBDpOlIEafPx4s47aTMpxAbndJXPXmLsmQ8e+XrA
    BPLINsoQjppJEJ91d4kWaisYyemNwdc1KXls0+X8f0jI+c5jIxjJSXR08SrS
    QuDlfXxhYSw+Ia8usmoxhiegKSN2hQR2lf33eVD9ua47LJqtP4Hd3SDZ7iE3
    PtxVtv4Nyr.9pKKWUdA5L2w5WU0gtMkPSvboQ8qRjDIskv9+vET25axnbJJE
    Ky5mEDTh891HaKutQ.UopRh+ZNVAEa6FiV1TLx+Iy.TBsV3GWTQJUrhnzjD7
    NbAijQa09SrQ44sRdRqpTRk+NS1PKl0jDgpRxoIoB7NRc8CTI91z5leOIF3K
    YOfj8V34TdwaYKVTLVFmjE9LNpc6amkioDZdAlgobDuxPMYGg2f1lveTOazM
    +MnP7fUV6nxD63BRTFsDDcpYYx0l6AgzPIPZ2Yjkfhx0TYlnerksFUTRbqSj
    MBrNSdVVR2rZFqDZcDkjJjsbhBrPmlFkjlWPn7NFBSQh13IVXQVRRmlRkyNM
    4DIFNCw+gDweR1VsoRQwI40CA1MbTDIFy3cSiihYcSoiyaacVam3No2yYlmE
    GKXjY6yViuZk6YfWsSZWW0ppUHFr43hGUzPG8be2YPqLZ4RuvtaENz2Uu+qb
    H5W0E3soSq+mYeprhm2UgU7toXkU9WERw8lhT7ctJjBbrPJoXFCE2gUZVmfq
    0c.yluA3HoJWO0RD5QXcHDndBA321RC+Doyjur6.j9Ok7JwiPC3Q0LTW.dL3
    qKOBNMOplS6BPitecoQmSSipYAu.zH71lF6rApdahBE9rki3O1I3RnKPxev.
    4R+809LkNjoqdxb4WWI4ct2iog2+L9Ug1z5NngTpefRlBe2Bzfur5yBApvV2
    ydkcuX2iaHubJNMHnkO+JCjoCPou6GjCOJkN6JRqx9nQSQp1HOzu92gYKmAV
    Hn+EQiElklhoUaB8JyDJsxGmIVbyyDUqh6iSEA29TgZiAebpX4MOUTMy5GmJ
    VMpoBkYM6I2PWeSIigNUAmgICmyn2t+DKSHzgNfNYGoLe8z.KaaQXMYWspBq
    tcoHLiSnMme6C66D8J3SjnntmWp5HFYkmzf5ngMZL6bg7RCgbvnAwtFhXf6n
    AxkOhyLgwnAxdlxxiGgAzT2OuQCjMUWTdJYiEV1zYLVLdfrugPFNdfroBiwC
    jAlxxKGOPN31Cxt2dPFdyA4yQJCGGSXrxPHeodRR0aipNlGrYnc3nGEVPrl+
    GQbdAY8VtZg0sCHiOZfIb5.e3Lda8ZAwQL9PFMNIaMJoJDTZpqlfBX5dRT9q
    Zj2jP5IgrCOesLlcpCclcn81BUD9L9U2iDMO.+Uy8KiDkkx8dETdCbQqn4Q2
    q2DnKRe.GFoOfEMAaTAhxH0zO78FkOJ0TiL5HBpcnjs3rMGFFOs6OaSq8.1r
    o7DEKQWiKPqRlJ3bIBm6nI2ZjB0jG6orBd6gi4hwi46eaRsJZRFMVSIm11C6
    ySi.OlFAnNK3OGMxxu0H5zHPi0HvqkFAbDMRf2m3zHdeKQzIQ.FKQ.WKIhyo
    CbzOGIhy2RDcRDGikHNW.IxPAXbYnXZwvkKZJiE9CgI+gf5y2xO1CcTwbvxE
    xKdtGOLi0HIfmaTF6LPnD+NHh00wc7I6eReBOW0aY0antWiLttazPlyE1Uz5
    1ZbIz2KcGT6KjkqQz3lqMPAUDWcR312KF6ph3rJJQVptmVthg5uUkJd5v8A1
    dmGlbBLGtyjC2UxAiWlhF2wEbLAMRH6cD3jRhxyDtfUCPfpU76TGlD8uwQES
    +.frbk2sGAWtd1BS6ZtWGldoo3Adcvimo3Abcviio3483YnlEo2meQIT58YW
    z6Stn+magn0da5+ytLh6k
    -----------end_max5_patcher-----------





    These particular buttons can be mapped to a controller in max for live, but doing so in the max runtime would take some more coding.

    Something like this could be added to serialosc.maxpat so you'd automatically have it in all of your apps. (In fact, a new release of serialosc.maxpat was indeed planned to coincide with the new arc release, though I don't know if that ever happened or where to find it if it did)


    So. That much is easy.

    Applying half a row of grid buttons to control those wouldn't be too arduous, but there's no solution which would automatically apply that to apps. For one thing, your patch is using two instances of the serialosc.maxpat bpatcher which would each have to be handled separately.

    The second issue is really where things get hairy: those buttons you're commandeering need to be accounted for.


    ...which means one of three things:

    A) not having those buttons

    B) digging deep into the app and refactoring the interface such that those buttons are no longer needed

    C) setting up a temporary bypass

    B is going to be well beyond beauty pill's capabilities.

    I think C is what tinitus is suggesting. He'll need help with that as well.

  • Here's a quick and dirty stab at C... It's using the first four buttons. Not sure if that's in a row or a column. (It could probably be switched to the last four buttons, but that means detecting the size and orientation of the grid and I didn't care all that much.)

    You still have to click on a button onscreen to work that toggle, so I don't know that this is any better than the previous example.


    ----------begin_max5_patcher----------
    2151.3oc6b0rbihCD9r8SAkqbzSBRBrf81rOAaU6wolJE1VwgYvfKPNIyN07
    tuHILgej.gMwAR3Prik.ot+5VsT2Rp+87YKVG8BIYgweY7MiYy987Yy3EwJX
    V1umsXu2KaB7R3O1hPxyQq+whkhpnjWn7hOXr9HkFE9uO6c3TkG7nadzOb28
    wjMTQeXgcu0boAxBx9xwh8Iz7VSium8NgG26GFPn7NClUn+Vdej1uew04Tq+
    PTHMzaOgW0Wi88BV7ZaDcjVsQDEQ+0AhfTVrXY5e4cLq4R7+Odk.F0UfGHwY
    .RFhj9z9AjmHwI9Qg7WXYV4dGNTn3YEdEFL9iHdCsZYdQ9ghhLyKJl7j+o2G
    KJ7OyO07uBjlLji+wJK9WVNEfwTg3tfnM+jrsXiuH5.IzO7PLIgDR8nY8Rd0
    aIO3cLfdubnnb8O3sgn7kkJVlsXWr+1nPFQT5MYEep69lAvlwMrOekY3OQn2
    AIubRJebLYsWLC0VGPJHwS0NihBJWUtfJUI2KzeuGkP8EDKzLuQ82eH1OjVp
    iHgdoswiIahiBBJ0ThZdRRMaSkkaHO6uk9HusJBkoOt+gShfE4XzV+cjDZ4x
    nd6RJWRoQsEUxJN5sT4MMJt5H4XxWReNxdFlU3IjLb1lq5AsP7Qy3pilUNht
    1nZTwNRsJT8Q2fB0TeDdIBQgZsjQ4kQNki1UMhuxqKajuhQ+pr.TxJP2rDnz
    ZfFVDzwpPqVFzz5PCVHzyJQKVJZ0ZQKVLZ0pgJKGMa8nYKHMaEoQKIprlH2h
    hbqJUUjqZcoV8Urxrmjj3sqnQjxlZRHTia.UqVhcFLWwFXJzu4Va.NUj8MYq
    op8lU3pcZyJlMZ2QCaORs+Tr1+LedwerrmD.0LyWwTeLIcTxViWzPDHL0Cf1
    BKMxL0WWD.ZPDX+4PDvACswWgEbAHCsaCdMUCutl8N3sIZ+dRXl0jADxg6Yj
    CL5QNAIosRGzztKXWCCpcgMiclmIvTdR9.+v1lmhyqrmqYTKI5X7lSxsSVkL
    py+oSxR8CyWez2dkak7vO5uca80dHlNNgMQuXYXmkdv4xWLkZs4K1riiE9xr
    K7k8nguTHBtx7kw2mKy6iEIdOQ1deZWmZH4dOJM1e8QpXHoL2m5KuCzySjyX
    4vJIrVHnlHjTOtV6Ej4XYdanXU3yqK.x+uWUu5Um72Qn+SL4A+WZwEeP1ZuA
    bu6W4ztO9.49363N4i+jO9S93+IyG+a.2wDX28Sxu5fWlBiMtWri9VVSN5mV
    cbJUSLtK4WI2cnpQ+VDEhXt3ZqmC+MIJfWpn.1pnX4mam9cvSttdttt53Lxc
    ckYpSaWFXb6HwUHmt3Jj03wkbEjpB9xZxEuIW75593xl0+u4GKijV7xS3jGD
    v+xw87cxa045jGrQm7VN4n2jidSN58d5nml6knoFqcCB.2ZmJwWIbyy9h2LQ
    ryjadoUSMBz.8Aqfbz2EcB2uTz+Sxto2VnNP5cXF.XKN9aaKNJjWbPNv1S3O
    qdnl3OzsmweqI7mUOPO72UX72F0WvOZB9Y0apG7mEWu9C9gSy8lGhUSCfAz.
    oiUHawrvhPciczaVX6FjClWpbvVq3qV7uwiboCRjrSYnyEGw6UVSQ7VAH2eg
    7F84Ij2YKbGhQ8ULusdah480GYvh6dP+gL1i7cC.6zkcCXDcvnXABG7wiuvc
    YWNbrFO6dCpKGjMqwkdnt7E1b7nG1kCTIFNt3KcsafQiK9BpKeYMt3Kjt70H
    xNeW10W734fXiQeP4KqOn7k8GT9hY2vRW9xY5TULcpJp624tjm8S6dnV29cf
    voSjHwV.qbnIN3EmxBTR78h8EtBRo0sieE3xN1DWmyaB0Hnz1O1583EIhlw4
    bLSrbemNlIWGnL635JNptxN9zMfsY2NZf6YmLFrbF+fa0vQddG9VkQgrzcdz
    5Lu4J7iVRwdSZPjtRfAtm.C6d4Z77VgD0BnnT8Bw9BCQ5hEJLR4tRMVXNTXV
    rYOwr39gYeMo+TK3nux+xVbXATn9Qs0s557TcLaqsfP4KFT9BAaTl0YZ1QSZ
    ls5fxQ13cilkPJJBf4pACN6zIcigANy0m0BmcGe3LKWPMPvYtZJPWZ1b3LFz
    bbQytVcwV2.gls00twvYLnDQtBciUCq4AAiKZVxzaJnYbOQyYN4eJXSsEnoe
    2SYzw1yXjcHMGJkHZnyU0oMG.opAOR.h7OEhdcRBpznc6xSNhRyyoYWOQDec
    0tVm9LOci1Pbgjtd6RwCBIOSmBTkoSEdZdF7opj8J6ZQXjPXhinjMegEghuj
    1qGNR0H2uhAh.Urp4j+pDF2Bz0j+pohr65YfEqOcuhTyg1VVEj5VHyZhcoo2
    1bFIGQuMsmSa+ERf.S4LJporb6Zuvc4emSKdw6x7uZAOFSY2L7dUQwHwe+w.
    OJ4qwaJeSzjgeHnPAIKA+414rCLB0UEDkiYFsYFXrcg..NkbfmRNv85kJ0ay
    OSWvhoQaWnTHBTLSdX2dznQJtQouCYMndLHb0Oz9ERMJn6HgaXg123FfwMPM
    gTarXSTfxN59ZEge73FSaemSjlnSjhoXbqY4DsfT6OG6YRlN3EuOAPmA89Dn
    ETHTctbnvc7ukIYpEPj8EtMBHyA71H.0Mj7CmcQ.qIEiLGLjLT2.EaObh2il
    TLdvPw1cPSFNEepwV7ozLtMdwaZOrMfrSF.tvwKoSQsA4LriZCv7sNnMH22j
    f1jJ9jEyF9yVddOARU0HQFdUOj6klLPUnqKEW95lEpaRnljSW5A4pA8fPsPO
    682dHJU+OCT.7j..JymJ9k8rxOxRIR.wyUTi+ZyZkle4MEpWgzUzecnmJckh
    cXCbcoGfNphWG5AgdK0eDVRpD4RFoTIhkUhVY0HUl1Z+Y9+C3Ek.4
    -----------end_max5_patcher-----------


    If someone wants to polish that a bit and integrate it into grainstorm for beauty pill, I'm sure he'd appreciate it. This is probably as far as I'm going with the idea.

  • (this leaves the grids LEDs intact, by the way. there's no feedback to let you know which state the buttons are in -- we simply reroute the button presses so your app thinks that they came from the arc)


    (also, if there's a big empty box where serialosc ought to be when you paste these samples, save a copy of your patch in a directory that has serialosc.maxpat in it, or a copy of serialosc.maxpat in max's search path and try again)

  • This thread is very, very interesting to me. It was an interest mostly in grainstorm that led me to purchase my gs64 and 2012 arc 4. I should have been smarter and realized that the new arc wasn't fully functional with a lot of apps, but i wasn't. I was and am sorely disappointed that the new arc is not all that great with grainstorm, but would be eternally thankful for any kind of patch that allowed me to control the grain window size with my current gear.

    Really, this would make my year if i could get grainstorm working properly. Thanks to you that are willing to dig into this!

  • Why not just assign two monome buttons to act as momentaries in place of the press/release functionality of the arc wheels?

    Hold button 1 down and turn the arc wheel with your other hand. It should be easy to re-map that function from the arc wheels to any other momentary switch source (even to a key on your laptop, etc.), shouldn't it?

    When you press and hold one of the 2 monome keys, the arc should "think" that it's in its other mode (on that particular wheel) and behave accordingly, no?

  • @Daojiao,

    "It should be easy" is not useful.

    It's not easy. But I've helped a bit by building two examples of how what you're describing could be implemented. If you scroll up a short ways, you'll see both of them. Those aren't useful either.


    The first version provides four on-screen buttons to replace the missing on-arc ones.

    If grainstorm were a m4l patch, you would be able to easily map these to MIDI buttons on the controller of your choice. But it isn't, so some amount of work is still needed to let you control those with any other momentary switch source. Good luck and enjoy.

    (hey, mlrv does it -- just grab from there, right? easy! ha.)


    The second version assigns four buttons on the monome, thereby disabling four buttons in grainstorm. I've put no thought into which four buttons those should be, nor to where the functions we're disabling should be relocated to. Instead, I provided an on-screen toggle to determine whether those button presses will register as coming from your grid or your arc.

    So, you've got two options there:

    Either make and implement the design choices necessary to eliminate the temporary bypass (get rid of four buttons and assign these to those), or figure out how to assign a momentary switch of some sort to control that toggle. (I recommend assigning a simple foot pedal to control the toggle, but that's up to you)


    With each version, I took care of the part which interacts w/ serialOSC, as that's the part only a monome user can help with. (I'm pretty sure this much requires Max 6, by the way. The "route" object used to behave differently...)

    The part you glossed over, of actually making a practical integration with Stretta's app, I'm not touching with a ten foot pole.


    In any case, we're past the "it should be easy" phase, and well into the "oh, yeah? prove it" one.

  • sorry GTZ - didn't mean to be flippant.

  • I am very, very appreciative of all the helpful responses so far!

    Truly, truly appreciate having such smart people thinking about this problem too!

    Can't express it enough.

    - c

  • i think gtz made it easy with the idea of up front out of serialosc to simulate encoder messages with toggles, which could be activated by monome.

    i would take a wack if i had the 12 arc..

  • Or we could add some redundant functionality, and script laptop keystrokes to act as the equivalents of the arc key-press. So that for example keys 1 2 3 4 can be the "clicks" from specific arc rings.

    Not perfect to involve the laptop, but certainly an option.

  • Can we just erase the word "easy" from our lexicon? =)


    Attached: a revision of that first code example, where instead of onscreen buttons, you are able to assign MIDI notes, or keys from your keyboard. This defaults to "1", "2", "3", and "4" (ASCII codes 49, 50, 51, 52) on the keyboard, or C3, D3, E3 and F3 on the other keyboard (MIDI notes 60, 62, 64, 65).

    Space required is minimized through popup windows, so you might be able to squeeze the necessary elements into an alt version of SerialOSC somehow.


    The code is relatively straightforward now, but that's after three drafts of cleanup and consolidation.

    EDIT: four.

    There are probably better ways to do this, but brute force gets the job done.
    (see "dissect mlrv and figure out how they handled it" note a while back)


    Anyway, I don't know if this is the latest SerialOSC.maxpat I'm including, so if somebody actually does want to integrate the changes into an alternate version of that for arc users, make sure you're up to date.

    ...and the answer to "how do I store my alternate key or note assignments so I don't have to change them every time" is unfortunately "not my problem; somebody build that."



    Side note: I don't have the 12 arc either. It's actually better to whack with the older version, 'cause seeing the actual data sent by its buttons is the only way to truly confirm you're emulating that data.

  • Hi GTZ,

    I think it's your fault: you make it look easy!

    :-)

    But seriusly: glad you thought the keyboard substitution was worth the time. I have integrated some limited keyboard functionality here and there with apps, and it seems like a reasonable approach, since laptop is usually part of equation...

    Now, if someone wanted to feel fancy, or didn't want to look like they are "playing laptop" then they can get a separate wireless keyboard, and work it from that.

    p.

  • And, for your consideration:
    http://www.gamingmouse.com/ergonomics/usb-foot-pedals/omnipedal-quad/
    $79, interesting form factor, might work for some users.

    Don't buy anything until this crap is fully functional for you w/ the laptop keyboard, though.

  • OR get one of these:
    http://www.ultimarc.com/ipac1.html
    and make your own switches that trigger these key presses...
    p.

  • Bah.

    http://createdigitalmusic.com/2007/08/get-loopy-with-the-diy-10-ableton-footcontroller-no-soldering-required/

    http://createdigitalmusic.com/2009/04/sexy-diy-footswitch-for-music-using-the-brain-of-a-usb-qwerty-keyboard/

  • Ha ha ha!
    Nothing like brute force!

  • I'm actually not a fan of keyboard controllers -- your computer thinks they're a keyboard, which was sort of the point. Which means that they can interfere with the operations of anything else that accepts keyboard control, should you switch focus to another app.

    Granted, that's a blessing if you wanted to map your controller to several apps and have that be focus-dependent. I just don't trust it, is all.


    If you're going DIY, I'd spend $49 to preorder the new Livid Brain Jr (and have that trigger MIDI notes).
    http://shop.lividinstruments.com/brain-jr/

    It's not as powerful as a lot of (cheaper) options, but for simple switches with optional LEDs, it's dead simple to throw something together. No coding required.

    http://www.synthtopia.com/content/2013/01/10/livid-brain-jr-lets-you-build-your-own-midi-controller/
    (seriously, watch the video)