Tuesday, 2014-12-09

*** ricardocrudo has joined #lv201:09
*** Balten has joined #lv201:58
BaltenHeya01:58
*** ricardocrudo has quit IRC02:00
drobillaBalten: Hello.02:03
*** Balten has quit IRC02:37
*** NickSB2 has joined #lv202:56
*** velho has quit IRC03:13
*** Anchakor_ has quit IRC05:19
*** LAbot` has joined #lv206:10
*** LAbot has quit IRC06:11
*** Anchakor_ has joined #lv207:01
*** zth has joined #lv207:05
*** zth has quit IRC07:11
*** NickSB has quit IRC08:38
*** NickSB has joined #lv208:38
*** edogawa has joined #lv209:33
*** grejppi has quit IRC10:30
*** falktx has joined #lv211:17
*** grejppi has joined #lv211:39
*** rncbc_jolla has joined #lv212:25
*** ricardocrudo has joined #lv212:37
*** NickSB2 has quit IRC13:36
*** rncbc_jolla has quit IRC13:37
*** rncbc_jolla has joined #lv213:44
*** edogawa has quit IRC13:47
*** ddom has joined #lv213:50
*** falktx has quit IRC14:03
*** rncbc_jolla has quit IRC14:17
*** gabrbedd has quit IRC15:15
*** gabrbedd has joined #lv215:19
*** gianMOD has joined #lv216:05
bgolaim trying the latest version of jalv / patchage / qjackctl to check the jack metadata api (pretty names) but no success at all, patchage and qjackctl compiled with metadata support, jalv (and mod-host) as well .. any ideas why?16:41
*** zth has joined #lv216:48
*** ddom has quit IRC16:59
*** HarryHaaren has joined #lv217:04
bgolahm, jack2 doesnt implement the metadata api :| ...17:26
*** falktx has joined #lv217:51
HarryHaarenbgola, probably worth posting to jack-dev mailing-list, Stephane Letz (the main jack2 guy) reads there.18:02
* HarryHaaren out for dinner, later18:03
*** HarryHaaren has quit IRC18:03
drobillaIndeed it doesn't.   They added a stub API that does nothing18:03
*** grejppi has quit IRC18:05
falktxyou mean the jack2 metadata ?18:08
drobillafalktx: yeah18:08
falktxI made that, it was mostly to ensure binary packages built with jack1 still worked for users with jack218:08
falktxthat's very important for audio distros18:08
bgolafalktx: maybe some kind of warning (even only when jackd is running with --verbose ;)) would be nice18:14
falktxbgola: the jack2 changelog stated that meta-data is non-working18:15
bgolaonly figured it when I checked jack2 source code to find why it was returnig -118:15
falktxif jack2 has meta-data working there would be great news about it18:15
falktx*had18:15
*** gianMOD has quit IRC19:00
*** gianMOD has joined #lv219:02
*** wumpus has quit IRC19:28
*** grejppi has joined #lv219:43
*** zth has quit IRC20:06
*** zth has joined #lv220:21
*** zth has quit IRC20:22
*** HarryHaaren has joined #lv220:35
grejppihey all, remember that note event idea I had a while back?20:36
grejppiI've begun revising it20:36
grejppihttps://gist.github.com/grejppi/6dca5caaddd9e408b7ec20:37
grejppithere's a new draft; I hope it gives good enough an idea20:37
grejppibasically, instead of notes with arbitrary IDs, you now deal with a defined set of voices (think of a tracker interface)20:42
grejppiand the different parameters you can give to the voices are (for now) restricted to float values, similarly to control ports20:43
*** gianMOD_ has joined #lv221:01
*** gianMOD has quit IRC21:02
*** edogawa has joined #lv221:14
drobillagrejppi: hmm.  giving voices properties like velocity rather than notes seems weird21:19
drobillaand it's totally divorced from a sort of 'better MIDI' event model basically everyone expects21:21
drobillaThough voice control in general is certainly a good thing21:21
drobillaneed to think about it21:21
grejppidrobilla: each voice can play only one note at a time, and that's where velocity and other properties apply to21:23
drobillagrejppi: So what does a note on event look like?21:26
drobilla(or equivalent)21:26
drobillaAlso it is probably simpler and more in line with how we (are starting to) use properties with atoms in other cases to state the range and such on the property itself.  Then plugins just need to list the ones they support and all the information is attached to the property.  designating a pseudo-property as another property is weird21:27
grejppigood that you brought this up21:28
grejppiI see a massive hole in my logic :321:29
grejppithese properties in this draft don't have uris21:29
* grejppi is lost in ttl21:30
drobillaI am not sure it's a net win over simply adding a voice number to note/control events, though21:31
drobillaFair enough.  +1 for bothering at all :)21:32
drobillaIt is interesting to consider no "note events" at all, though21:35
drobillaJust setting properties21:35
drobillaWhere you set velocity, note number, and whatever, with a voice number21:36
drobillaThough the simple patch:Set is no good for setting many at a time...21:39
drobillaI am very interested in this stuff in general, but quite a few more conservative/important things to get out of the way first, and a release21:41
*** gianMOD_ has quit IRC21:43
grejppidrobilla: just updated that document with some explanations at the bottom21:44
grejppialso, one may think of voice indices equivalent to note ids21:45
drobillagrejppi: Better, thanks.21:51
drobillaI think ultimately it needs integration with the patch stuff, but same problem there21:51
drobillapatch:put requires you to have a blank that contains all the properties, so it's nested21:51
drobillaI avoided having a flag one with 'special properties' because that's kind of sketchy21:52
drobillaflat*21:52
drobillabut Set can only do one21:52
drobillaI'll have to think about if it's possible to have a more general message that's as convenient as your voice:VoiceEvent example here but not problematic21:52
drobillathough having a separate VoiceEvent isn't necessarily a bad thing.  just need to consider non-voice stuff as well21:53
grejppidrobilla: something like control ports but with atom events I suppose?21:54
Anchakorwhat is the use case for this anyway? aren't voices kinda synth internal issue?21:56
grejppiAnchakor: yes, generally21:57
grejppiactually this extension would move the responsibility of allocating voices from the plugin to the host21:57
grejppiI mentioned trackers earlier21:58
grejppijeskola buzz, aldrin, neil, etc... these in particular are what I'm thinking of21:59
drobillagrejppi: Yes.  Which if you think about it, is basically what this is21:59
drobillaIt *can* move that reponsibility, but we can't really *require* hosts to do so, either22:00
drobillaBut this ties in with another thing: ideally this should be ultra simple to use on both sides, and double-ideally easy to drive from other protocols, like MIDI22:00
drobillaWhich suggests a thin utility layer to translate, which could also optionally do voice allocation22:00
drobillaThat parts comes after the events and such make sense though22:01
grejppisuch a utility is in my plans22:01
Anchakorusually for this kind of control (track-like continuous control - velocity,panning etc) you use multiple instances22:01
Anchakorhow would you control how re the voices allocated anyway?22:02
drobillaPer-voice controls would be an extremely powerful thing to be able to control in a DAW as well.  Particularly stuff like bend22:03
HarryHaaren+1, using multiple instances is a hack fix because most plugin specs don't allow the "ideal" workflow22:03
AnchakorI'm all for rich note events, but this is different22:03
drobillaNot really.22:03
Anchakorthis is track-like controls22:03
drobillaWhat is a "track-like control"?22:03
grejppiAnchakor: the plugin has voice:polyphony which tells the host how many voices it can manage. the host is free to use them however it wants22:04
Anchakorvelocity, panning etc continuously, no matter what notes are playing22:04
drobillaSure, you need to be able to have non-voice-associated controls22:05
grejppiif it's a piano roll based, or if notes are converted from midi, it can allocate voices sequentially22:05
HarryHaarendrobilla, since we're here, partial-expose for PUGL, will I add a function puglPostPartialRedisplay(PuglView* view, x, y, w, h) ?22:05
drobillaThis is not that.  This is pretty much exactly no-that, that's the entire point :)22:05
drobillaHarryHaaren: Isn't expose already like that?22:05
drobillaHarryHaaren: I guess not in the glut-like callback API22:05
HarryHaarencurrently puglPostRedisplay(PuglView* view);22:05
HarryHaaren(is what the client code calls to re-blit the backbuffer)22:06
drobillaHarryHaaren: Hm, yes.  That should have had sizes all along.  Not sure if I got that from glut or if I'm just stupid22:06
drobillaglut22:06
HarryHaarenno issue, adding the "Partial" into the function name will solve?22:06
HarryHaarenno breaking backwards either?22:07
Anchakorwell I think voices are an implementation detail which are done by the synths internally how they like it, an rich events are what we really are after. I don't thing host/user should think about voice-note allocation22:07
Anchakorthink* (wtf /me, go sleep)22:07
drobillaThat is sometimes the case.22:08
drobillaUsually because MIDI is a piece of shit.22:08
drobillaBut it's basically equivalent to "I think you shouldn't be able to control things on a per-voice basis"22:08
drobillaWhich is just crippled22:08
drobillaPoly aftertouch being the existing case of such a thing, which MIDI needs a special event for22:09
drobillaDAWs and modular environments and trackers and other such things that can make use of it aside, I have a controller to my right that can send independent bend and pressure for several independent notes22:10
Anchakorwhy not introduce note event ids and allow changing properties for them?22:10
drobillaPerhaps.  More or less the same thing.  Either is more difficult in various scenarios/perspectives22:11
grejppiAnchakor: that was the original idea, but then I ran into quite a few issues22:11
drobillaBut I might want to change the delay on a /voice/ independent of the notes played on that voice, too22:11
drobillagrejppi: Do you have experimental plugins that use this stuff?22:12
Anchakorwith voices as user I either have to manually allocate the notes to the voices or have a method of acquiring the voice ID for a note22:12
drobillaDefine "user"22:12
drobillaClearly the user-user wouldn't ever be doing such a thing (except perhaps in "advanced environments")22:13
Anchakorsequencer22:13
grejppidrobilla: yes, the note extension is implemented in my fork of lmms22:13
grejppiand I made a simple test plugin that proved me note ids was not the right way to go22:13
drobillaThe obvious problem with non-constrained note IDs is the plugin then has to look them up22:14
drobillaMaybe they are the same thing anyway.  Host knows polyphony, and the "stupid note ID" is just (last_note_id++ % voices).  Which also happens to be a voice number22:15
AnchakorI don't see why it would22:15
drobillaWell, I get a change for note 23567953222:15
drobillaWhat now?22:15
drobillaforeach (voice) if (voice.current_note_id == 235679532) { ... }22:16
drobillafor every single event22:16
Anchakorplugin just remembers IDs for still active notes and applies updates for them which recieves and ignores update for those he doesn't know22:16
drobillauh.. yeah, i.e. looks them up :P22:16
grejppidrobilla: https://gist.github.com/grejppi/68a0c0aee6690b3a892522:17
drobillaHarryHaaren: Maybe just puglPostExpose22:17
falktxyou can always use pointers22:17
drobilla(shorter and matches event name)22:17
Anchakorwell if you define a function implemented by a plugin which gives a host a "plugin side note id" that is basically a voice :)22:17
drobillafalktx: ew.22:17
HarryHaarendrobilla, sure yeah that's fine22:18
drobillafalktx: It needs to be "wire" transferrable anyway, so pointers are out22:18
drobillaAnchakor: Perhaps, but I don't see the win.22:19
Anchakorwith voices it's nice that it allows sequencer to plan out the voice allocation22:19
drobillaIf a plugin wants to implement its own voice allocation, fine, it can do so.  Just set "polyphony" to some crazy high value and do so22:19
drobillaor leave it unset, perhaps22:19
grejppi^ that's a possibility22:20
Anchakorhowever that also means the sequencer *has to* plan out the voice allocation22:20
drobillaThe problem with a "pure setting-properties based" approach to notes is essentially that22:21
drobillaIf the host *doesn't* specify voices, you're kind of screwed, since what is a "note on" is ambiguous22:21
AnchakorI don't follow22:22
drobillaA property can sort of do it ("gate", here) but I'm not sure about that22:22
drobillaAnchakor: If you have fancy note events, the host can just note pass a voice number.  Done.22:22
AnchakorI assumed there would be some note lifecycle control so plugin knows when to drop the note id22:23
drobillaNo per-voice control that way, but it's straightforward22:23
*** ricardocrudo has quit IRC22:23
drobillaBut if there are no note events at all, just setting properties on a voice, you can't really do that22:23
drobillaWhich is unfortunate because that's a very nice approach otherwise22:23
drobillaWell, you can, kinda, if setting the 'note gate' or whatever to 1 means note start22:24
Anchakorwell it seems the same as having multiple monophonic synths :)22:24
drobillaBut I am not sure how nice this will be.  Usually plugins dispatch on event type, if (note_on) { } else if (note_of) { } else if (control)22:24
drobillaThis, I think, is the fundamental question22:26
drobillaDifferent message type for notes, or not22:26
Anchakordidn't you implement something like this in ingen? wrapper-polyphony for mono synths? just add this logic to the wrapper and you have this voice system22:26
drobillaMultiple instances is not a solution for a slew of obvious reasons22:27
HarryHaarendrobilla, PUGL epose: partial redraw coordinats: A) add PuglEventExpose instance to impl B) add ints to impl?22:27
drobillaBasically "just don't support polyphony".  Silly.22:27
drobillaAlso probably the most host-burdensome approach possible22:28
drobillaHarryHaaren: There is already an expose event with x,y,width,height22:28
HarryHaarendrobilla, yep, but we need to move the data from the puglPostExpose() function, and have it in puglProcessEvents()22:29
drobillaHarryHaaren: puglDispatchEvent().  The view needs a display function with coords22:29
HarryHaarendrobilla, yep, i gathered that22:30
AnchakorI mean if all hosts do implement this voice allocation stuff for the plugins and it's trivial to do so for host implementers, I'm in complete support of this voice system22:30
drobillaHarryHaaren: PostRedisplay is probably wrong to be setting a flag.  I think it can just post an expose event, like the backend does22:30
HarryHaarendrobilla, ah right, so     puglDispatchEvent(view, (const PuglEvent*)&expose);    with the partial rectangle in place?22:31
drobillaAs I said, that's the primary problem with not having a separate note event22:31
drobillaA layer in-between could do this part, though22:31
AnchakorI just don't want as a user allocate notes to voices manually or just have host authors give up on implementing this functionality because it's too tedious22:31
drobillaWell, the reality check there is, hosts probably don't want to implement this whatsoever.  Particularly by crafting the events.22:32
grejppihow is it tedious if there are many many midi based instruments out there that do voice allocation on a daily basis? :322:32
drobillaEven if I made a fancier C++ forge, not very popular.22:32
drobillaThe layer, in particular, would need a handle_midi_event(buf)22:32
drobillaWhich the overwhelming majority of hosts would, at least initially, use22:32
drobillaThen you have a fancy plugin with atom events and potential voice control and all that business, but if a host doesn't give a shit, it can just fire MIDI at it22:33
drobillaBut with note events the plugin can just do it if there's no voice numbers.  It's unfortunate to have to do both, though...22:34
drobillaSeems all signs point to a nice abstraction being a key piece22:34
*** edogawa has quit IRC22:37
*** falktx has quit IRC23:30

Generated by irclog2html.py 2.13.0 by Marius Gedminas - find it at mg.pov.lt!