micah-frank-studio / Grainstation-C

Granular Live Performance Workstation
GNU General Public License v3.0
136 stars 14 forks source link

Adapting Grainstation for other Controllers #1

Closed nay-seven closed 5 years ago

nay-seven commented 5 years ago

Hello, first, congrats for your project, love the concept and sound results.

I've started to create a patch in Usine Hollyhock to use it with other controllers, ihave several ideas to use the Usine grid to store presets, and add fade between them, but first i start with your settings. first test with knobs are ok, but i wonder what the presets button send ( and receive) if i understand correctly, it's note ON message ? gistates[0] = 0 gistates[1] = 1 gistates[2] = 2 ... but do they need to have a specific velocity value too ?, do they need note OFF message?

micah-frank-studio commented 5 years ago

Thanks, I’m glad you’re digging in! ;)

Yes, those snapshot buttons are sending noteon/off messages. You can see the snapshot reset at line 745 noteoff gichan2, inote, 0

The velocity value of zero essentially sets noteoff. Let me know if that info helps. I remember the Launchcontrol took some trial and error to get the right combo of midi messages and momentary vs latch. But it wasnt too big of an issue.

nay-seven commented 5 years ago

ok, thanks, gone to investigate more ,

but maybe i will use the Usine engine to save /recall the presets, gone to test also this way here how the current patch looks for the 4 first tracks , all parameters are sent and works, except ambisonics ones cause i 'm not sure to understand how it works. Grainstation

I've set CsoundQT audio outputs to Soundflower 8 channels, and receive these 8 channels in Usine, but i receive only on the 2 first channel ? is there something to do more to receive the different tracks on 8 channels ?

micah-frank-studio commented 5 years ago

Sorry for the delay on my end! I’ll look into this tomorrow and spec out the midi mappings in the README file. I meant to do it last week but couldn’t get to it.

micah-frank-studio commented 5 years ago

Yes, the button to save a preset sends on channel 2 - (global variable 'gichan2')

For example, snapshots 1-3 send notes (C-2, C#-2, D-2). When that note is received opcode modinit recognized the note and indexes all of the settings. Then the state of that note changes to "stored" (gksnapmode == 1 in the code) . If another snapshot note is triggered, that one is set to "stored". If the stored note is pressed again then it is set to "restored" (gksnapmode == 2 in the code) and "reset" if it is pressed again (gksnapmode == 0 in the code). So you don't need to mess around with any MIDI messages (fortunately). The program just counts how many times a note has been pressed.

All Snapshots transmit on Channel 2 Snapshot 1 - 8 (C#-2 to G#-2)

You can change the note value in the gistates[] array. For example gistates[2] (snapshot 2) is listening for note 2 (or D#-2)

Hope that helps?

micah-frank-studio commented 5 years ago

Just added a MIDI Specification.html file to the repo

nay-seven commented 5 years ago

Thanks a lot for these precision's, will try this asap. What about soundflower and ambisonics ?

micah-frank-studio commented 5 years ago

What about soundflower and ambisonics ?

Not sure about that one. As long as soundflower can support an output array it should work!