Vienna Symphonic Library Forum
Forum Statistics

186,662 users have contributed to 42,473 threads and 255,893 posts.

In the past 24 hours, we have 3 new thread(s), 9 new post(s) and 52 new user(s).

  • Just a thought.

    I've been doing a lot of performance tweaking over the last couple of days, and in the process a possible improvement to the RAM optimize function occurred to me. What if there was a mode like "learn music" (could be an alt-click on the current "learn" button), or something, which basically learned the musical passage, and retained *all* articulations/samples for the pitches in the learned passage? This would allow us to do a lot of messing around with articulation selection, while maintaining a small RAM footprint.

    Just an idea...

    J.

  • last edited
    last edited

    @jbm said:

    I've been doing a lot of performance tweaking over the last couple of days, and in the process a possible improvement to the RAM optimize function occurred to me. What if there was a mode like "learn music" (could be an alt-click on the current "learn" button), or something, which basically learned the musical passage, and retained *all* articulations/samples for the pitches in the learned passage? This would allow us to do a lot of messing around with articulation selection, while maintaining a small RAM footprint.

    Just an idea...

    J.


    Not "just an idea", but actually a good idea. I'd certainly be interested in that too, it would save me a lot of time.

  • Thats a cool idea ....

    - perhaps retaining all dynamics AND articulations for the played notes.
    - or perhaps a menu whereby user could choose the mixture of notes, articulations and dynamics he wanted to retain.

  • As I understand it, the current implementation retains all dynamics, but only for the learned notes of each articulation. This is a good system, in terms of really chomping down the RAM usage, while retaining some flexibility, but it might be a bit of overkill; I mean, I don't actually need to go from 768 MB RAM down to 18! :-0 (I'm not making that up either -- in that case, I had loaded one of my own violin solo presets, but was realizing a fairly conventional score.)

    But to be able to access all articulations (yes, at all dynamics) for each note of my score, now that would be great. With this sort of functionality I could imagine a workflow whereby the entire orchestra is optimized to the music of the complete score. This would likely allow an entire orchestra to be loaded on a single machine (VI instances and CPU % granted), with access to all the articulations. It wouldn't work for composing, of course, but it would be great for the final draft/mix. Another option that might be nice is a "Learn then Load" option: same idea, but running the "Learn Music" step *first*, then only loading the learned pitches from all articulations in the preset. This would be essential for working on a single computer, or a smaller "farm", since you'd never get all the articulations loaded in the first place, and how can you optimize when you can't even load?

    But I think another menu would complicate things. After all, the VI instrument already provides such a menu, in a way, and does an exceptional job of it. I'm just imagining an option to make the RAM optimizer a little *less* efficient! [;)]

    J.

  • last edited
    last edited

    @jbm said:

    As I understand it, the current implementation retains all dynamics, but only for the learned notes of each articulation. This is a good system, in terms of really chomping down the RAM usage, while retaining some flexibility, but it might be a bit of overkill; I mean, I don't actually need to go from 768 MB RAM down to 18! :-0 (I'm not making that up either -- in that case, I had loaded one of my own violin solo presets, but was realizing a fairly conventional score.)

    But to be able to access all articulations (yes, at all dynamics) for each note of my score, now that would be great. With this sort of functionality I could imagine a workflow whereby the entire orchestra is optimized to the music of the complete score. This would likely allow an entire orchestra to be loaded on a single machine (VI instances and CPU % granted), with access to all the articulations. It wouldn't work for composing, of course, but it would be great for the final draft/mix. Another option that might be nice is a "Learn then Load" option: same idea, but running the "Learn Music" step *first*, then only loading the learned pitches from all articulations in the preset. This would be essential for working on a single computer, or a smaller "farm", since you'd never get all the articulations loaded in the first place, and how can you optimize when you can't even load?

    But I think another menu would complicate things. After all, the VI instrument already provides such a menu, in a way, and does an exceptional job of it. I'm just imagining an option to make the RAM optimizer a little *less* efficient! [;)]

    J.


    Well, all articulations for all dynamics for the first movement of a String Quartet I just wrote would use all but around 20% of available notes across all four instruments (it's around 18 minutes long), which would take 768MB down to 614MB rather than 18MB. So it would hardly be worth doing - are you sure VI retains all the dynamic levels? Because if so, I must have a bug?

  • Well, just stop using so damn many notes! [;)]

    I'm not sure... it seems to me that the dynamics remain flexible but the articulations are "locked". But when you're talking about basically using all the RAM during the course of the piece, then RAM optimization is kind of a moot point, isn't it?

    I am kind of confused about your piece, though... Such a tiny RAM improvement would imply that you're using almost all the pitches for all the articulations; is that really the case?? I suppose it's not too hard to imagine, over the course of an 18-minute concert piece, but still, that seems like a *lot* of articulation switching...

    J.

  • last edited
    last edited

    @jbm said:

    Another option that might be nice is a "Learn then Load" option: same idea, but running the "Learn Music" step *first*, then only loading the learned pitches from all articulations in the preset. This would be essential for working on a single computer, or a smaller "farm", since you'd never get all the articulations loaded in the first place, and how can you optimize when you can't even load?

    J.


    Even better idea.

  • One reminder: if I understood the tutorial correctly, the dynamics are saved only if Velocity Xfade is enabled. In that case, all velocities are part of the playback note even if you're not hearing them. If Xfade is not enabled, only the sample triggered by a given note velocity would be "learned."

  • Aaaah, very good point! Yes. Makes sense. So that makes me wonder whether the Learn function is inserted somewhere between the matrix and the actual sample database(??). That is, just spying on the sample references and storing them in an array, or something... That might make things a little trickier, since there may not be any actual note info by the time the Learn function runs, only sample references. Still, considering that a "Learn Music" option would just be storing references to *all* articulations for the input note list, it shouldn't be too difficult. Anytime you're dealing with 'everything' it tends to be a bit simpler; it's the designation of specific subsets that complicates things.

    Anyway, I'm just flapping my gums at this point.... cheers.

  • GREAT IDEA!!!!!!! VSL please consider this!

    Thanks,
    Jay

  • The "Learn" function simple memorize which samples are triggered during the "Learn" period is active.
    If the velocity XFade is active, simply four velocities are triggered at once, so all velocites of a certain key are memorized, that's all.

    The sample database itself knows nothing about the mapping structure or the matrix design, so it's impossible to make any intelligent calculations.

    best
    Herb

  • But Herb, VSL has made a business out of transforming the "impossible" into the "possible!" [:D]

    Best,
    Jay

  • last edited
    last edited

    @herb said:

    The "Learn" function simple memorize which samples are triggered during the "Learn" period is active.
    If the velocity XFade is active, simply four velocities are triggered at once, so all velocites of a certain key are memorized, that's all.

    The sample database itself knows nothing about the mapping structure or the matrix design, so it's impossible to make any intelligent calculations.

    best
    Herb


    The sample database doesn't need to... hmm... Wait. Are you saying that the Learn function currently listens only to the return of the sample calls, not the sample calls themselves?
    Either way, this wouldn't happen during playback, of course (since you wouldn't want all the articulations to play back!), but would rather be done after the "optimize" button was clicked, and just before the samples are actually dumped from memory.
    It seems to me that, even taking the above into consideration, it would still be relatively simple to implement. The VI is realtime anyway, so it can't take long to call a sample reference based on a pitch/velocity pair. Just store the pitch/velocity pairs while Learn is active, run a quick loop calling those pairs from all loaded matrices, then update whatever map is used for the memory optimization step. Obviously, I've no idea how the VI actually works in this regard (so this is totally naive 'advice'), but wouldn't this do the trick? I suppose it could take 2 or 3 ms longer, but I wouldn't lose any sleep over it! [;)]
    I can imagine that a "Learn then Load" function would be much more difficult, since I'm sure the loading is currently done without any reference to the state of the VI...

    J.

  • Please keep in mind, that the mapping structure on patch level (which you dont see) is pretty advanced, there are patches which use up to 200 different samples triggered by the same key.
    It depends on velocity, speed, intervalls, repetition counts and more which wav file is triggered.

    best
    Herb

  • last edited
    last edited

    @herb said:

    Please keep in mind, that the mapping structure on patch level (which you dont see) is pretty advanced, there are patches which use up to 200 different samples triggered by the same key.
    It depends on velocity, speed, intervalls, repetition counts and more which wav file is triggered.

    best
    Herb


    Sorry... very true. I don't know that in detail, obviously, but I understand that it must be the case.

    However, that would still be the case in the "Learn Music" option I'm talking about - it wouldn't change. What I'm suggesting is that, if playing one pitch on a given articulation requires 200 samples for all the realtime stuff to work, then those 200 samples should *all* remain in RAM. The idea is to retain 100% felxibility *but only for the notes in your piece*. The RAM savings won't be anywhere near what you've managed with the general purpose Learn scheme, but considering that many pitches will likely not be needed, they will still be considerable in many cases. Obviously, if your piece uses every chromatic pitch, for the entire range of the instrument, then such a function would offer 0% improvement! [;)] However, in such cases you'd probably just do all your tweaking with a non-optimized VI, then optimize when you were done, since you would know beforehand that you were going to use just about ever sample available!

    But the more I think about it, it seems as though this idea of mine is really a matter of creating a sort of "partial keymap". The function would keep a record of all the pitches used in the score, then dump all the samples for any pitches that weren't used. And actually, it might even make sense to only perform this optimization step for the more "costly" performance instruments, since the more "effect" oriented articulations, like trills, trems, pizzes, and so on, are used pretty deliberately during composition; it's not likely that one would be nit-picking about whether to use a perf-legato, a perf-detache, or a pizz sample! So perhaps it could just optimize performance patches? Any sense in that?

    Please keep in mind, I'm not trying to drive you mad, just rattling off some possibilities! [;)]

    J.