*** trebmuh has quit IRC | 00:00 | |
*** artfwo has quit IRC | 02:25 | |
*** edogawa has joined #lv2 | 07:20 | |
*** ocbtec has joined #lv2 | 08:11 | |
*** sigma6 has joined #lv2 | 08:37 | |
*** ricardocrudo has joined #lv2 | 08:49 | |
*** unclechu has joined #lv2 | 08:52 | |
*** trebmuh has joined #lv2 | 09:46 | |
*** falktx|work has joined #lv2 | 10:25 | |
*** jbitdrop has joined #lv2 | 11:00 | |
*** gianMOD has joined #lv2 | 11:26 | |
rgareus | drobilla: http://lv2plug.in/ns/ext/log/ does not specify if a plugin should include a file newline to lv2_log_error() | 12:21 |
---|---|---|
rgareus | ardour adds that newline, jalv does not, ns/ext/log/logger.h fallback vfprintf(stderr,..) does not either. | 12:21 |
rgareus | drobilla: you wrote all 3 implementations.. so which is it? | 12:21 |
rgareus | s/file newline/final newline/ ie "\n" | 12:22 |
rgareus | falktx|work: does carla and MOD-host implement the log extension? If so, they add a trailing newline? | 12:26 |
falktx|work | rgareus: carla yes, although it just prints to terminal. with fancy colors for debug and errors | 12:28 |
falktx|work | rgareus: carla adds a newline yes | 12:28 |
falktx|work | mod doesn't do logging | 12:28 |
rgareus | so now we're 50/50 :) | 12:28 |
falktx|work | what about qtractor? | 12:28 |
rgareus | I don't know. and rncbc is not online | 12:29 |
rgareus | since the fallback (host with log:log but without urid:map) is just fprintf(stderr, fmt, args); it makes sense to have the client add a newline | 12:30 |
rgareus | that also goes along with normal printf() | 12:30 |
*** gianMOD has quit IRC | 12:59 | |
*** gianMOD has joined #lv2 | 13:03 | |
*** gianMOD has quit IRC | 13:34 | |
*** gianMOD has joined #lv2 | 13:49 | |
*** jbitdrop has quit IRC | 13:49 | |
*** gianMOD_ has joined #lv2 | 13:50 | |
*** gianMOD has quit IRC | 13:50 | |
*** gabrbedd has quit IRC | 14:00 | |
*** gabrbedd has joined #lv2 | 14:01 | |
wumpus | I don't think qtractor implements the log extension | 14:02 |
wumpus | at least last time I wrote a lv2 plugin it didn't, I think it's the only program that needed the printf() fallback | 14:04 |
wumpus | that I tried, at least | 14:06 |
*** deva has joined #lv2 | 14:35 | |
falktx|work | what about ingen? | 14:52 |
rgareus | conceptually a "message" should not include formatting, so the host should add a newline if the host's message-display requires it. | 15:00 |
rgareus | just like "now playing" or "connected to wireless-XXX" | 15:00 |
rgareus | but well, it's really a small nitpick | 15:01 |
rgareus | falktx|work: no newline at the end in ingen but it does flush stdout/err. | 15:08 |
falktx|work | I think it's important to define the behaviour | 15:09 |
falktx|work | flush is not important, but newline is | 15:09 |
falktx|work | otherwise some hosts will end up with multiple lines for some plugins | 15:10 |
rgareus | I would not say "important", but yes it should be standardized. | 15:11 |
rgareus | I'm in half a mind t just add a 'strip trailing newline if it exists" in ardour. | 15:11 |
rgareus | but that's not a nice solution. | 15:12 |
rgareus | After thinking about it, I'm of the opinion that the host should add the newline at the end of a message if needed for the host's display | 15:13 |
rgareus | but that would imply changing ns/ext/log/logger.h and add a fprintf(stderr, "\n"); and that will probably take 6 months. | 15:13 |
ventosus | vfprintf is being called as fallback by lv2_log_trace (e.g. in rt-context), this is bad, isn't it? | 15:18 |
rgareus | it is indeed | 15:21 |
rgareus | [fatal] error messages I could excuse in rt-context. | 15:22 |
rgareus | but warnings, notes, and trace.. no | 15:22 |
wumpus | one rationale for having the client add the newline is that it allows printing a line in multiple statements, without having to do string concatenation. A bit weak rationale, probably. | 15:40 |
wumpus | but it's done that way in quite a lot of other software | 15:40 |
falktx|work | just buffer that and send the full string when done | 15:40 |
falktx|work | the log could be a window popup in some hosts | 15:41 |
wumpus | well it moves the responsibility for buffering to the host | 15:41 |
wumpus | but yes... | 15:41 |
wumpus | it just needs to be defined either way in the standard, having clients and hosts guess is a bad place to be in | 15:42 |
falktx|work | agree | 15:42 |
falktx|work | seems like something for the mailing list, for a definitive answer | 15:42 |
falktx|work | unless drobilla is still listening to irc | 15:42 |
falktx|work | drobilla: comments? | 15:42 |
wumpus | ingen doesn't add newline | 15:46 |
wumpus | http://git.drobilla.net/cgit.cgi/ingen.git/tree/src/Log.cpp#n45 | 15:48 |
falktx|work | lv2 versioning is weird | 15:55 |
falktx|work | 2.0 being considered unstable... hmmm | 15:55 |
rgareus | really? | 15:59 |
falktx|work | hmm wait | 16:00 |
falktx|work | is 0 an odd number? it's not, right? | 16:00 |
falktx|work | ok ok I was reading it wrong again | 16:02 |
rgareus | 1 is odd 3 is odd 5 is odd so by induction 4 is even 2, is even 0 is even | 16:02 |
falktx|work | 1.0 is unstable. 2.0 is stable | 16:02 |
falktx|work | 2.1 is unstable. 2.2 is stable | 16:02 |
falktx|work | all 0.x are experimental | 16:02 |
rgareus | well it's really 0.1.0 0.2.0 major version is n/a in LV2 | 16:02 |
rgareus | yes | 16:02 |
falktx|work | well, yeah, but most users don't know that | 16:02 |
falktx|work | a version number is a good number to have | 16:03 |
falktx|work | anyway, stable plugins start at 2.0 then | 16:04 |
* rgareus uses https://github.com/x42/meters.lv2/blob/master/git2lv2.mk for all his plugins | 16:07 | |
rgareus | a git-tagged (no modifications since) will produce an even number | 16:07 |
rgareus | all others odd micro numbers | 16:07 |
*** gianMOD_ has quit IRC | 16:07 | |
rgareus | it maps a /traditiona/ X.Y.Z to the LV2 minor version. micro (patch fixes) are git revisions since last tag | 16:09 |
*** sigma6 has quit IRC | 16:43 | |
*** unclechu has quit IRC | 17:09 | |
*** falktx|work has quit IRC | 17:15 | |
*** ssj71 has joined #lv2 | 18:04 | |
*** tytel has joined #lv2 | 18:14 | |
drobilla | The trouble with auto newline is that it precludes situations where you need to print in several printfs | 18:16 |
drobilla | This reminds me of the silliness of Python 2 with respect to whitespace, among other similar mistakes in the name of the common case | 18:16 |
drobilla | I think it should be as much like printf as possible | 18:16 |
drobilla | Nobody ever got fired for "as much like printf as possible" :) | 18:17 |
drobilla | 0 is even, "even" means "integer multiple of 2" | 18:18 |
*** ricardocrudo has quit IRC | 18:18 | |
drobilla | Re: log, I think it's clearly insane for the host to add a newline to every printed thing | 18:20 |
drobilla | That said, though popping up a dialog on every log call is an absolutely horrible idea that no host should ever ever do, some defined way to delimit messages could be useful in similar scenarios. The only reasonable one I can think of is "hosts should consider the newline character as an end of message delimiter, and not assume a single call constitutes an entire message appropriate for displaying to th user" | 18:22 |
drobilla | This has its own issues, but it's not terrible | 18:23 |
*** jbitdrop has joined #lv2 | 18:23 | |
rgareus | mimic printf() was my first choice as well, then I thought "it's really a message not a formatted print and it may be on systems that need \r\n" | 18:32 |
rgareus | but either is fine really as long as it's in the spec. | 18:33 |
*** rncbc has joined #lv2 | 18:41 | |
*** deva has quit IRC | 18:42 | |
*** gianMOD has joined #lv2 | 19:00 | |
*** ocbtec has quit IRC | 19:32 | |
*** ensonic has joined #lv2 | 20:01 | |
ensonic | hi, repeating my question from #lad | 20:01 |
ensonic | can lv2 plugins describe their polyphony so that hosts can check it? | 20:01 |
ensonic | at least detecting if they are polyphonic or monophonic would be nice | 20:01 |
rgareus | ensonic: I don't think so. | 20:09 |
rgareus | ensonic: I also don't know any plugin host that could use the information | 20:09 |
ensonic | I am working on the lv2 bridge in gstreamer and need to figure how I best match the apis | 20:11 |
ensonic | and I'd like to use the lv2 bridge in buzztrax with has a tracker style UI and there you create a column for each voice :/ | 20:11 |
rgareus | voice in this context is not polyphony is it? | 20:13 |
ensonic | voices=1 is monophonic and voices>1 is polyphonic | 20:14 |
rgareus | you can have note-stealing on every voice or every voice can be monophonic. | 20:14 |
ensonic | indeed | 20:14 |
rgareus | 16 midi channels. one can trigger an poly instrument another one a monophonic one | 20:14 |
rgareus | in the same synth/instrument plugin | 20:14 |
ensonic | but none if this can be queried | 20:15 |
rgareus | you could a LV2 extension, just specify a URI <http://example.org/lv2/polyphony> and define semantics of that integer [?] hosts which care can then use it | 20:16 |
ensonic | are there lv2 synths that play different patches on each channel? | 20:16 |
rgareus | linuxsampler for example | 20:16 |
rgareus | or any midi synth. chan1: trumpet, chan2: piano | 20:16 |
rgareus | s/midi/general midi/ | 20:16 |
rgareus | trumpet is obviously monophonic. | 20:17 |
ensonic | :) | 20:17 |
rgareus | there's a flag in the soundfont file for this | 20:18 |
ensonic | the fact that its full fledged midi brins in the channels, so I want to know if the patch configured on channel x is monophonic or polyphonic | 20:18 |
ensonic | I'll probably do separate instances instead of exposing midi channels | 20:19 |
ssj71 | ensonic: that is the conservative method, even if it might waste some resources. ReMID can do a patch per midi channel, but I don't know of another synth that can | 20:21 |
ensonic | ssj71, like rgareus said, linuxsampler can too | 20:21 |
ssj71 | yes. so there are 2 or so? | 20:22 |
rgareus | ensonic: is it a polyphony fixed value known a-priori for every plugin? or can it change dynamically? | 20:22 |
ensonic | yeah, I am not so much worried about that, its more the polyphony | 20:22 |
ensonic | on the bridge I can make it dynamic, but it does not make sense to claim I can do 100, if the plugin can't | 20:23 |
ensonic | e.g. buzzmachines say wheter they have 'tracks' and if so how many | 20:24 |
rgareus | well I'm thinking how it could be added to the LV2 spec. | 20:24 |
ensonic | or e.g. a sidsynth would have 3 voices | 20:24 |
rgareus | if it's a fixed number. you can write it into the plugin description .ttl and a host can know the number before actually loading the plugin (and prepare ahead) | 20:24 |
rgareus | if not the host would first have to instantiate the plugin (which usually requires a track of some kind already exists) | 20:25 |
ensonic | the extension sound like a good idea, and i think practically most plugins have it as a constant in their code | 20:25 |
ssj71 | ensonic: but most synths don't allow mutliple voice control. Many have multiple "voices" but they can't be used as a melody and countermelody. They're all chained typically if that makes sense | 20:25 |
ensonic | I could imagine it being 1 (monophonic), a constant > 1 or cpu-bound (that is as many as you want and your computer can handle) | 20:26 |
ensonic | ssj71, with multiple voice control you mean that e.g. chainging the filter-cufoff would affect all playing notes, that is okay (and imho expected) | 20:27 |
rgareus | so a non-negative integer: 0: unbound, 1 monophonic, > 1 N-polyphonic | 20:28 |
rgareus | and it would be a property of the plugin itself (like lv2:minorVersion which is also a non-negative int) | 20:28 |
ensonic | rgareus, sounds like a plan | 20:29 |
ensonic | I'll scan through plugin source to see if I if looks like it would work for the plugin authors | 20:30 |
ensonic | https://github.com/rncbc/synthv1/blob/master/src/synthv1.cpp#L54 | 20:31 |
ensonic | https://github.com/rncbc/samplv1/blob/master/src/samplv1.cpp#L56 | 20:32 |
ensonic | next calf ... | 20:32 |
ssj71 | so in a tracker, if a synth has 32 note polyphony you want 32 tracks? | 20:33 |
rgareus | that does not make much sense to me with an ADSR curve | 20:35 |
ssj71 | yup. | 20:35 |
ssj71 | I think the idea of voices is used differently in tracker community than a typical synth developer | 20:36 |
ensonic | for calf a fixed number seems to work too: https://github.com/jnetterf/calf/blob/master/src/calf/organ.h#L296 | 20:39 |
ensonic | ssj71, if a synth has 32 note polyphony I want at most 32 tracks | 20:39 |
ensonic | ssj71, the UI has add/remove track buttons | 20:40 |
ensonic | ssj71, but I agree that the concepts don't match 1:1 | 20:40 |
ssj71 | I see. | 20:40 |
ensonic | in a tracker the musician takes care of the note stealing explicitly | 20:40 |
ensonic | now even if we add the polyphony extension, I can't send a note-on/off to the 'right' voice, so this could even be confusing | 20:41 |
ssj71 | right voices are tied to the midi note, not the track | 20:43 |
ensonic | ssj71, I am not sure if it is even defined | 20:43 |
ssj71 | no not strictly, but from the several synths I've reviewed code of, thats the case | 20:44 |
ensonic | on a physical instrument it is since there is only one C-3 key, and hence I can't press it twice :) | 20:44 |
ensonic | (without releasing it that is) | 20:45 |
ensonic | ssj71, but you are right, it must be tied to the note, otherwise, they could not associate a note-off with the voice | 20:46 |
ensonic | rgareus, what did you mean wit the ADSR? | 20:47 |
ssj71 | ADSR in most synths are global controls for all the voices | 20:48 |
ensonic | jep, thats okay | 20:48 |
ssj71 | just like the filter in SID | 20:48 |
ensonic | the tracker UI here is more like: [global params] [track 1 params] [track 2 params] | 20:50 |
rgareus | just an envelope. while the note is in release (after the note off) it can still ring, while you re-trigger the same note again. | 20:53 |
*** unclechu has joined #lv2 | 21:09 | |
ensonic | I'll keep thinking, thanks for the discussion | 21:24 |
*** ensonic has quit IRC | 21:40 | |
*** ocbtec has joined #lv2 | 22:04 | |
*** unclechu has quit IRC | 22:16 | |
*** edogawa has quit IRC | 22:25 | |
*** rncbc has quit IRC | 22:43 | |
*** jbitdrop has quit IRC | 22:43 | |
*** gianMOD has quit IRC | 22:47 | |
*** gianMOD has joined #lv2 | 23:28 | |
*** ocbtec has quit IRC | 23:38 |
Generated by irclog2html.py 2.13.0 by Marius Gedminas - find it at mg.pov.lt!