using an XY pad to strum chords?

  • i have a novation remote LE midi keyboard and have been thinking about trying to set it up so i can hold a chord on the keys and 'strum' the xy pad to play it like a guitar/omnichord type thing

    ive done some digging around on the net but am stumped - anyone got any ideas?

  • i have only ever dabble with pure data but i would say you could create an envelope to be applied over the surface of the XY controller so you could change how moving your fingers across it triggers the sound more than likely on the X axis and for my personal tastes maybe an envelope randomizer for the Y axis but something more practical may be in order

    get your envelope into an array use the state of your XY controller to read through the array

    or if you just want very basic strumming actions set it up (for pure data i would use moses probably) so that only after a certain point would the information get sent to trigger the sound somewhere near the middle lets say and if you want to expand upon that i would play with where you ended as well so that you could say the trigger starts at 65 and if it ends at 105-115 something happens longer sustain plus this and that...

    or you could go the gating route wherein you would map different gate parameters to the different states of the X or Y axis and when held it gates the notes accordingly

    i hope something here helps a little
    like i said i'm no maxist
    yet

  • certainly possible in max...

  • maybe this'd help:

    http://www.youtube.com/watch?v=YocCrCGIU6A

    an omnichord emulator patch for korgs pad kontrol..

  • you probably wanna track dx or dy (depending on the direction of the strum) and use total distance covered to determine when to hit the next string in the strum..

    or just track dx, and when it's fast enough, trigger all the notes with some delay between them..

  • that is just weird

    the video of the padkontrol as omnichord is a good friend of mine i havent seen in a while!

    sent him an email for some assistance.

    thanks for all the pointers - was hoping to be able to just map it using the midi editor for the keyboard but dont think i can, and some of the other suggestions just confused me!

    will post up if i get a solution

  • Here's another possible algorithm, which provides a close analogy to strumming:
    Suppose the x variable ranges from 0 to 1. (I'll ignore the other dimension.) If there are six strings, you'd want to locate them at 1/8, 2/8 ... 7/8; more generally, if there are N notes, you want their positions to range from 1/(N+2) to (N+1)/(N+2). T

    Keep track of the last x-coordinate touched. Each time a new coordinate comes in, calculate whether between the new one and the old one lie any of the string positions. For instance, if the previous value was .1 and the next is .3, then that means you've crossed strings 1 and 2 (since they're at 1/8 = .125 and 2/8 = .25). Thus, the two pitches corresponding to strings 1 and 2 should send new "note on" messages.

  • im thinking:
    1. count the number of notes pressed
    2. split the touch pad into that number of regions and assign notes to them
    3. if the finger goes into the region then i send a positive velocity for that note
    4. when it leaves the region, send a 0 velocity for that note

  • might not be useful per-say, yet this thing is intriguing...
    -thoughts for remaining pots or faders perhaps ..

    http://lab.andre-michelle.com/karplus-strong-guitar

  • If you have max then check out this patch which will turn a [slider] or other continuous control values into a guitar string strum emulator. It allows you to re-pluck the same string, might be useful to you.

    lh


    ----------begin_max5_patcher----------
    665.3oc0X0taZCCE82gmhT+aZI9ZmupzpzdN1llBIdTOQbPIFM1p569hcRf.
    k03HBtCPJQ9hwbNm6w2qIuLyAsrXGqB49n6WbcbdYliiNjJfS6XGTdxtz0IU
    5ogRKxyYBIZdymIY6j53kIhUrEUxRtXUk6SeUfgnEAcSaMWvRK1JzyEZCJ1l
    yEqYR8BiaCxyzKWwxedOF595+nPHq3+gomH7f2gEnXqraE5htIQl9bMJ9dIK
    U1PMBs963Bd5aw9pqpPteq25KRx0qO5yk7j0H0G75rYpKyuPo49tWHCId7Tw
    aLNVwUeh5JMnQD9+k2XuIl3g3aChGNw7N161f2QSLuwdQ2FDOXpINDdaPbxT
    Sbp+Uk303YIqzT1QGWdsqQXSH4u2vZ3FhqjZWzx5dpn8D5bh.QuQm.5a9dWK
    Qf8qZ18lj+lR9AKwfRCcxx7sjlBc8wsIoOuSGNCgGmUG+ddAC7.PrtzWH8Ae
    aJGqRjLiUDXZTDijivfOB2wcexTwfDaI6gu1W.93lJE10dHc4p2F2cXbEIHC
    T+r2s22xn0F.BttsRNuDsvEGYpoAn1plBt2eXx1llmLVN.KIGQsdhvaf8P3f
    Ov8P3HnsKz0YOT0Zdl4GGCilzFKM+Yx8GxRc3SMC6wC8BneZGm7PUzKnJ9wj
    qpXaYZ2Oe2Nb2CpVFqRxEIRdgn2jHGOom4YYLQ+SMkyy1TTmxZAwQPb9nwjx
    QMHl.6hIpIXhZYcx.HchVZkTGLTpCrOlvlfIr4XBGD0qiE3EuezEh1SDm+gQ
    iLNzdgXRu+enrp5.lVLqRLpvU7Hyp0EXU8ZoQMMWZNUhZzTf1g7fTvtY0XSb
    ZibuJNHTqfg5GALlDuezkV.138EVro.wDLcIUfqG75r+BDpjxZM
    -----------end_max5_patcher-----------

  • If anyone cares, here's a hacked version of that.

    It's not as pretty onscreen, but the number of "strings" is variable now.

    Also, the user controls are set up as Live objects. I'm told this won't make the patch require Max For Live, but it does make life easier for those users that have it. (The controls are already set up for mapping and automation)

    This isn't a complete app, of course. It just displays feedback to confirm things are working. It's a pretty good start, though.

    ----------begin_max5_patcher----------
    2024.3oc6b01iiZCD9y4jt+CT9Z2aK17VnRsUs+L5opUjf2rtGAGAjr60S8+
    dAaCwFrAC4kMQ8zJkrFafYdlmYvdFb91G+vB6Uj2PE1V+r0msVr3aUGYA8X0
    GYQyAVXuM9s0owEzAZuZeYIIy9AdeY62R1WlhJo8BZNLNgNXxp+9StsikMvx
    utCwtk1qhy1Xa8WM8uKtb8K3rMOkiVWxFBvw8QmGr.9f5ufNMed7jpD.bV68
    mdv+8ien96pudvX0p5xrBk2JpOSxJyh2RET6eOGGmZ8GjzDMpMTgZC0q13rR
    6G5o802xB7+PGDnVQG.UfgBnhOEU.KuDnB50JcoUSJQuQk.6TRbBU7mGdohl
    DFYLOYBHEjReXe562GmdAmjfxjjoyDzslrcKp1P2E6dg7p013ruZUTlWIrE+
    1LAQGEf3RG6Y.RgQ0.iGiS4.t5roc0Pw9J3J+LxmVBF1AbVzokLLh49EDLc9
    DT5hWovL3pAupDFbJ5.Ju.SjtJKrOJDtT1bHkMG3Qc98VJFSrxPrIkr9KnDQ
    dxB6DzyS5pP1gxNdBzgH8Qmghy1kiJp37wkboW5VGuOs7IIrF9n5A7b7Zj9S
    WlVX2NlM43DRVsfHet0Gu4VVE5jEDvWR5oCIKdmpSujPRWEme.WfWkhjsIU7
    83L713RTIlITPmimId6tbJSS7xgxhqtLuTrNmjlJe0XccPUWInC30nWwIkuP
    ubB.mzivEoRR9ixcLneYWeymwYI+IICI0+H9mC3i10O0KT5jF1WcH+Uc9rdL
    KNatCAvd9r5cRU4n1AH06v1wo0eIK5pin+VcfWI4PimaeuWSubl6BaharQtx
    i6NapK8Pt0F5ZOl68Xt3i6lq0UeD28Qb4GwsWsqeWxYuP.8GvngBjCG7S85x
    fHAiDMn2BFb5cxiGUXrHC5hNDvVRQH8KW3i9JhNnHBgTm74BIz7gqlA4Gs.W
    ASBL5JZRhn1hn6UKxN7Nz0vjDLtI4b5h.7uWMHkVqrvmIKBbHKh+3VD1hlO6
    NK7Y2XrwAb8LNR4U4Rh9.yBQ0KwKmN5CYy+RQdXd2Q+afGmCt9O6.BtUiUsE
    UTDuAo2h.fKuF1D+q7COVJZPBtgLHz64IfjdydxpZAK1BVgseNBV0yJzj4wZ
    Qz99AHAyhRpMFv8IJxT4QfQmgfw9d1ZIZtfogQfSAi5rl7Tb1nqckJ30CbDD
    rfrOecCGoYEjVJzlDTQINqMuFe9HjoZzGykaO.eKNYGoxslqAV+07IHyVIqc
    XLWIqWA28nRNIKoN6t4JYPD8ITt9GCgH0.FPKOBaXzFuKvhNqoFa+8IAGBlr
    sGbJJYD2nRSQ7RVgCqa79n7ASQ4A2oVX+IQiCNUkjYgAdtG8goMd+TdfwV3n
    Skd+tnjfoEnBbWRiAShFChNOOjB53QyS5wFip7hCnFKDJyUQ7ATxSUxW0bDe
    JtrLGuZeIaFZpK60HksQegeNw5FsIkrJNkWUtVIvdV0VRWorjPo1FB+u.QZF
    kasWJwFAMGHKXRS8OX7JopL6WCYRFHIKgBY8B5LXEUAmePbfZV+o4isZqRs6
    IUkZiwTVlDgKY9zCWk5qJltItDcAfU3vv5ogo7orySFnmA7zqKl9C+x4GQci
    tvD0P+dIz6lBTKsv0+Mej0UGx5YT3UguNCjWdU27Bt4Bx9qmetKDdg4t7xjI
    Udf+ePdAAWUxKK+hrPEgduKb2d4i1PRX3zdjz7xhu9bOqImpu6nh6ohJxoQ6
    FCV5m18AR4tDtH+PAsSryk8l5YjdClpdK7lr1Ks5BXgp02JhH8WWaPubNnag
    6v9iT85Y6kRF9acNOUqKUzJh0hk0FZKg0wNJCXxZMUWbLQqqWTv7zZ.jspcW
    1qPNfs6V5zhiLQsstnpc8zarfln1t8Sfggp8kWAbLVAlkcy2ilyP1C1hXzyP
    +qgkwH2PuY6FdYUfHi8nfykZszSHmX9dpxI14Ww7lVnBm4S43QCX6+DUM3oA
    7hGlPkhnQkCtICS.BLVABmqBvKs.6wX7XFNW5vDpDWMw+7tIsLgF6MAtMoVg
    tShZMuYN3wnS.5rgpl8TSiKK2xXmlPuaWudnwSk0YdSpiYZ3yWkMEugmuZSG
    GKFyXEh43FEbfsBm5MQ2L26ciTvEi1adCWnkFLYN6ozT7AziEo3DgMO5g3ix
    4N75ufE1nxiuwsWNvN2tN4HOmRhE29nh6VJg084xW2mPMRBE2onJVpnKcp9r
    ciasethyIuRuJQ4Ow13PCrukaUgbr3V4p83EuPdkWHJw8RLi80R6Fh.dHNcO
    h7bqGXq+mnX91NRFe4q.grFILj8Y3xhxul1oTeBiXakAmQXBeTy.vYc2eTBc
    2X+.p5DWc6qnpB.pxqQEbkWpiT04BJrOxTKtjjwzn3rLBmQonDmBCLkjswHw
    p9lNHJUEM8K0WohAkaRB8V4oVyelnWRI4Ixbs9r.8mbwNDJIEuUu8oDsiI47
    NaiydxAWp8RpFlpfKUc8DeW7Og.LQ9SL.itHErcrOOqA9mXfhu64ahmuBK9s
    h2+Xh12i.zFAf4nHmrTdDgtyrrItPuYTtT9cUR2RsjGjhedH5lOz.1akFK4e
    .XaK9TEUFFyXgNLxDgNxepRMqTZdP1uhDM++YQjWBMQj6ZMFWjYhIf8SCCG0
    gtmIgtKBNfPCltPGPkY1OfGh+O.30jobedqyiIvHpN7zn5tA5o50Gn5q+CXz
    sDZB
    -----------end_max5_patcher-----------