| Contents |
|
Next | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Text-type wires from Matrix Values to Matrix Array In connect the GUI module, DH_MatrixInput, to the module that performs the processing (DH_Matrix8X8 or DH_Matrix16X16). Use 2 connections for a DH_Matrix8X8, 5 for a DH_Matrix16X16.
Control voltages from the sources are connected to Source inputs, and the Target outputs are connected to the output destinations. The Source and Target numbers correspond directly to the rows and columns of the matrix. For a 2 x 3 matrix, for example, you must use Sources 1 - 2, and Targets 1 -3. The most typical use of the DH_MatrixPak is to establish and control modulation routings. Modulation matrixes have long been a popular way to add elements of modularity and flexibility to otherwise hardwired synths. A certain amount of planning is needed for any matrix-based approach to modulation, and it's a good idea to start out by identifying and listing the various sources that you want to use, and the targets you want to modulate. Decide how you want to lay out your matrix, and consider what will make most sense from the player's point of view when you determine the order of sources and targets. In most cases, you will also need to consider the factors mentioned below in Polyphonic/Monophonic Considerations. Once you are satisfied with your layout, number your sources and targets. If you have more than a few to keep track of, it's helpful to write down your numbering scheme as a handy reference. In the ideal world, every modulation source would have a range that would affect every modulation target with exactly the right amount of sensitivity. In the real world, it may be necessary to scale some of the control voltages coming from certain sources or going to certain destinations. This can easily be done using Level Adj or simple math modules. Don't think that because you're using a matrix, you have to try to force fit every calculation into it.
In some situations it may be necessary to control more than one DH_Matrix8X8 and/or DH_Matrix16X16 from the same DH_MatrixInput. This would be the case, for instance, when the modules need to be in different containers. One example of this is given in the next section. Wiring this is simple: just use DH_TextSplitters¹. The only thing you have to be careful about is that you must use the same source and destination number assignments across all modules. That is, if Source 1 is LFO 1, it is LFO 1 everywhere. If you use Target 1 to control Filter 2's resonance in one container, you can't use it for something else in the other container (unless you want both to be controlled by the same column in the matrix)
Notes:
You need to follow some guidelines when you do modulation routings that involve both polyphonic and monophonic sources and/or targets. To keep it reasonably simple, assume that we've designed our project so that all polyphonic processing is done within one container. I use 4 basic rules:
What this implies for the use of the DH_MatrixPak is that at least 2 DH_Matrix processing modules will be required: one inside the polyphonic container, and one outside. Each routing should use the DH_Matrix module at its target's location. Below are some examples from the demo synth that illustrate these points. (Note: the .se1 source for the demo synth, DH_MatrixPakDemoVSTi2.se1, is included in the download .zip file.) As an overview, here is the demo synth's matrix, and a list of the sources and targets:
There are 4 polyphonic sources within the container (sources 4 - 7: the 2 ADSR envelopes, the Velocity output of the Midi to CV, and the output of Osc 1). The DH_Matrix16X16 routes these to the polyphonic targets. (Rule 1: poly-to-poly)
The 2 LFOs (sources 2 and 3) in this synth are monophonic. Along with input
from the Mod Wheel (source 1), they have been routed in through the IO Mod to the
DH_Matrix16X16, which routes them to the polyphonic targets. (Rule 4:
mono-to-poly - inside view) The next example is also inside the polyphonic container. The polyphonic ADSR envelopes and velocity are routed through Voice Combiners to the IO Mod, so that they can be routed to monophonic targets outside of the container. (Rule 3: poly-to-mono - inside view)
Outside of the polyphonic container, a DH_Matrix8X8 handles the output to all of the monophonic modulation targets (targets 1 and 2: LFO2's Pitch and Amplitude). There are 3 monophonic sources outside of the container (sources 1 - 3: the Mod Wheel and the 2 LFOs). The DH_Matrix8X8 routes the Mod Wheel and LFO 1 to the monophonic targets. (Rule 2: mono-to-mono.) I chose not to route source 3, LFO 2, through the DH_Matrix8X8 because I decided not to make LFO 2 self-modulating. The DH_Matrix8X8 also routes sources 4 - 6, the 2 envelopes and the velocity from the polyphonic container, to the monophonic targets (Rule 3: poly-to-mono - outside view). I chose not to route source 7, Osc 1, through the DH_Matrix8X8 because I decided that audio-rate modulation of LFO 2's parameters was not needed. The example also shows the "outside" view of Rule 4: mono-to-poly, as the monophonic sources (sources 1 - 3: the Mod Wheel and 2 LFOs) are connected to inputs on the polyphonic container. In conclusion, use the 4 rules as guidelines, remember that the source and target numbers must mean the same thing for both the inside and outside DH_Matrix modules, and note that processing is always performed by the DH_Matrix module in the target location. Finally, just because it is possible to route every source to every target doesn't mean that you have to. If a routing doesn't make sense to you, or you don't like its effect, you can always leave it unconnected.
SynthEdit processes audio samples in blocks. The exact size of a block varies with different sound cards, but in general it ranges between 96 - 128 samples. As a result of this, SynthEdit does not support feedback at the individual sample level, and will not allow connections that create a feedback path unless they include a special Feedback (delayed) module, which delays the feedback by one block of samples. Feedback path issues come up frequently when setting up matrix-based modulation routings. In the demo synth, for instance, Osc 1 is used as a modulation source, and its parameters are modulation targets. Even if we have no intention of actually modulating Osc 1 with its own output, the path allows that possibility, so SynthEdit flags it with an error message. Inserting a Feedback (delayed) module between Osc 1's output and the DH_Matrix161X16's Source input solves the problem. If being able to have Osc 1 self-modulate is not a goal, this solution overcomes the problem with no actual impact on the synth's function. On the other hand, suppose self-modulation is desired. With the 1-block delay, the effect will not necessarily be identical with what would be produced without the delay. The delayed output can still be a useful modulation source, however. Several of the demo synth's preset patches route Osc 1's output back to its own phase mod input, through the Feedback (delayed) module.
Adding more sources and targets can increase the flexibility of a synth or effect. As the number of sources and/or targets grows, however, the size of the matrix can begin to tax not only the CPU, but also the user's ability to comprehend the routings. Usually, relatively few of the many possible routings in a large matrix will be used at any one time, or in any one patch. Thus, it makes sense to consider alternatives to the idea of assigning rows and columns to fixed sources and targets. Allowing sources and targets to be selected from lists and assigned to matrix rows and columns is one way to preserve flexibility while avoiding needless complexity. This way, a user can tailor the matrix to focus on the parameters of interest for a patch, instead of having to search through the rows and columns in a huge matrix It's fairly easy to make the rows and columns of a matrix assignable. The basic technique is just to connect many-to-1 switches to the source inputs, and 1-to-many switches to the target outputs of the DH_Matrix module. Selection controls such as dropdown lists and popup menus can be used to allow the user to assign sources and targets to the rows and columns. The following example uses dropdown lists. (Note: this example is taken from the DH_MatrixPakDemo2.se1 file, which is included in the download .zip file.)
To keep the example (and the demo .se1) manageable, I've limited it to a 3 x 3 matrix, but this is enough to illustrate the technique. The same lists of 7 possible sources, and 16 possible targets, are assignable to each of the rows and columns, respectively. Again, we have monophonic and polyphonic sources and targets to consider, so there's a DH_Matrix8X8 outside of the polyphonic container to handle the mono targets, and another DH_Matrix8X8 inside the polyphonic container to handle the polyphonic targets. Instead of being connected directly to the DH_Matrix8X8's source inputs, each source is connected to a many-to-1 switch for each DH_Matrix8X8 input. Each source is in the same relative position in every switch. The list selection for each source is also routed into the polyphonic container.
The source wiring structure inside the polyphonic container parallels the outside structure. If the 1st row of the matrix is assigned to LFO 1 outside of the container, it must be assigned to LFO 1 here as well.
Looking now at the output side of the outer DH_Matrix8X8, the target switching mirrors that of the sources, using 1-to-many switches. Only the monophonic targets are connected to this DH_Matrix8X8, but we need to have the same unified target selection list both here and inside the polyphonic container, so the unused polyphonic target positions on the switches are connected to an empty container.
Inside the polyphonic container, the target wiring structure also parallels the outside structure, except that here, it is unused monophonic target positions on the switches that are connected to the empty container.
I hope this manual/tutorial has given you enough information and ideas to get started. If you find errors or have suggestions for improvement, please let me know. If you come up with some cool, different way of using the modules, I'd like to hear about that, too. Best regards,
Dave Haupt |
Next | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||