-
Notifications
You must be signed in to change notification settings - Fork 3
Numula tips
Using Numula to create a rendition that approximates a human performance (or has a similar level of complexity) takes a lot of thought, work, and time. Here are some suggestions.
Start with a clear idea of how you want the piece to sound. Perhaps you already have this. Try listening to multiple recordings - not to copy them, but to get ideas.
You'll try to approximate your mental model using Numula. This is an iterative process. At any given point you'll have
- The mental model
- The current Numula output
The mental model may change over time; the important thing is to maintain it. Avoid the mode in which you lose track of the mental model and just fiddle around with the Numula version.
It can be useful to factor nuance into separate pieces; this makes it easier to adjust things. For example, you could factor timing control into
- Pauses, e.g. between phrases
- Tempo fluctuation at the scale of a measure or less
- Tempo fluctuation at the phrase level (8+ measures)
... and specify each of these in a separate PFT.
The goal is that when you want to change something, it's clear which layer is involved. Each nuance should have a logical place. Avoid combining conceptually different nuances into one specification (e.g. combining 1-measure swells with an 8-measure crescendo).
Try to avoid situations where one layer bleeds into another. For example, if you use too many little pauses, they can add up to a tempo change.
You might use a similar structure for volume control:
- Accents
- Short-term fluctuation
- Long-term fluctuation
You may, depending on the piece, want these to apply only to a subset of the notes - for example, to have separate short-term dynamics for the LH and RH notes in a piano piece. There are two ways to do this:
- Define the LH and RH each as a separate
Score. Apply the relevant dynamic changes to each, then combine them into a singleScore. - Tag the LH and RH notes, and use selector functions.
For articulation, you can use
- A PFT for the MIDI sustain pedal, which affects all notes
- PFTs for virtual sustain pedals affecting only some voices (e.g. LH and RH).
... or both, as needed.
Adding complex nuance to a complex piece can be daunting, and it's easy to become paralyzed. Here are some ways to avoid this:
- Work on one small part of the piece at a time - say, the first measure or phrase.
Use
Score.trim()so that only that part of the piece plays. - Work on one voice at a time - say, the RH. Play only this voice if that's helpful.
- Work on one nuance layer at a time. For example, if you're working on dynamics, disable timing control and set the tempo to a reasonable average value.
It's important to minimize clicks in the work cycle:
- Press Fn-F5 to play the current piece. (this brings the Idle shell window to the front - is there a way to prevent this?)
- If you want to hear it again, click the play button in Pianoteq.
- Click on the Idle source window to bring it to the front.
- Make the change you want.
- Repeat
In an ideal world, we'd have a GUI for Numula, and the work cycle would be much more intuitive and streamlined.
Modern computers are fast, so efficiency is not normally an issue.
But if the time to run a Numula program becomes excessive,
keep in mind that PFTs are inherently efficient.
When you apply a PFT (say, with tempo_adjust_pft()),
Numula scans the score until it reaches the start time of the PFT;
then it traverses the score and the PFT in parallel.
Many of the non-PFT nuance functions do a traversal of the time-ordered notes in a score.
For example, pause_after() scans the score until it reaches the time of the pause,
then adjusts the start times of all the subsequent notes.
If the score has lots of notes and you use lots of nuance functions,
it's possible that performance could become an issue
Also, it may help to apply nuance separate sections of a score, then combine them (as described above).