vl1proto |
max/msp, Intel/PPC, simon2008-, current vers. 0.3) |
Abstract |
vl1proto is a program written in MaxMSP that supports voice/instrument programming of the Yamaha VL1-m (1). |
Intro: |
The Yamaha VL1-m is a legendary and a superb synth, uses physical modelling and programming it is quite complex. You may program it from its console, which is tiresome, or the use the (nearly complete) Yamaha Expert-Editor (which is said to have been used by the Yamaha programmers to program the factory-voices). There also existed a PC-version (also incomplete, afaik) and a few very basic Yamaha programs. Nowerdays these OS9-programs are more or less obsolete, if you dont keep the hardware, as i do (i use a PB1400 just for the expertEditor and an Emagic Amt8 which has serial connection). Actually, there is also a (not complete) VL1m-adaption for the program Sounddiver (which runs on Intel-Mac, but is also more or less obsolete, since you need an old LogicPro7-dongle for tha last version3.1.0 Public Beta 2). Some years ago i started to write MaxMSP-programs that allowed me to control some of the parameters of the VL1m from the computer in performance-situations. These developments lead to the ombOS system. On the other hand I was thinking also about writing a complete programming-editor for the VL1m, just for the case my PB1400 passes away, or whatever... So one option was to just replicate as close as possible the legacy Yamaha ExpertEditor (consists of nearly ten screens full of sliders and selectors). It is organized in a way, but every time i use it i always wonder, if this could not be done differently: Develp a new synth-programming paradigm...? But the situation with the VL1-m is complex: |
| Soft-synth or Editor for Hard_synth? | The VL1m is based on algorithms developed by the Stanford University (Smith) and the patents have been bought by Yamaha. In these days a dedicated hardware was the way to go. Today i think the VL1m should actually be ported to a Softsynth. Although it is dated, it is still worth it. So instead of duplicating an editor that controls an outdated harware-synth, one shouldactually put energy and time in porting the algorithms to software. Yamaha does not seem to be interrested though. And for a single person its too big a project. On the other hand i am interrested in developing a new synth-programming paradigm, so why not use the VL1m, since its complexity is good to proove the concept. |
| My central idea: | ... look at the problem from the users perspective! The original editor (and actually most of the editors around) just tries to find some order for the thousands of parameters and gives the user a few diagrams and parameter-descriptions to find his way through the jungle. But the complexity of the VL1m works against it: the interaction of several parameters, which means that when you change one parameter then often other parameters are affected and have to be changed also. Put differently: very seldom a desired change in the behavior of a sound comes from the tweeking of one parameter, but a concerted tweeking of several. But you have to know which. This makes programming a tidious trial and error process. And you never know how close you came to an ideal parameter-constellation. So my idea is to focus less on the representation of these thousends of parameters, but onto the workflow of the programmer. This workflow with the original editor is a sequence of parameter-changes. Maybe you have adapted a kind of editor-based systematic, that lets you go from parameter to parameter and look if it changes the voice in the direction you desire. If you are a bit more advanced you might jump all over the places in the editor, because you got something like a mental map of where parameters are in this particular editor and which could be involved in certain effects. The problem with both methods is, that the process is so complex that you cant really keep all the details of effects and relationships of parameters in memory. You might remember some relationship, but forgot that it applies to a certain kind of voices (say pipe-type, but not string-type voices), so the memory is not helpful. So i thought your editor should provide an environment where you deal with networks of parameters - instead of a representation of ALL the parameters. That is.: you can think of several ways parameters relate to each other: alphabetically (name), legacy order, functionally, procedurally, associative, whatever. Some of these relationships can be hardcoded (e.g. the alphabetical access), other relationship-networks develop in the process of programming. E.g. say you want a more metallic sound and you try different parameters and give them a + or - if they are helpful in the task. The editor turns these ratings into maps of coordinated parameters and may even factor in the values or trend of value-changes. So the editor is connected with a protocoller that 1. automatically logs all the changes you do and 2. allows you to comment these changes in natural language (for the programmer) and in ratings (for the analysis and netbuilding). This would improve the typical voice-programming process, because it is difficult to keep track of the interrelated effects of parameter-changes. Secondarily to build a database from these protocolls, that can be used to map certain parameter-constellations to descriptions. Thirdly, to allow all sorts of processing with accumulated data. So, part of the project is to experiment with and develop a new editor-paradigm. Therefore - to compare the feel of the old and the new approach - it is possible to combine the original Yamaha-Editor with the protocoller, in that the protocoller intercepts the communication with the synth.
|
VL1PROTO FEATURE DESCRIPTION v.0.3. (090210)
The vl1proto interface consists of a
and has connections to other moduls, most notable:
Every interface-elemtent shows its name at mouse-over. |
|
physical connection |
... allows to see the wax-parameters and load voices from vl1 at the same time. |
|
|
Voice Section Two slots for voices (to be compared), each featuring:
Parameter Inspector Interface-section to check individual parameters of the loaded voice in each voice-slot.
|
![]() |
Protocoller Section Interface options:
Automatisms: When a new voice is loaded from file or from vl1 the protocoller automatically logs it in the protocoller-window/file: date time voicename Every parameter-change (intercepted from ExpertEditor, or initiated from the parameter-section) is logged automatically in the form: date time par-name (adress) par-value comment evaluation ...
|
|
|
|
|
Programming Notes A VL1-voice consists of 3102 bytes, most of which hold values for parameters of the physical-modelling algorithm. A parameter has an address (number in the 3102-sequence), a parameter-name and a value. The value is often a number in the range of 0 and 127 (or below), but can also consist of two adresses, to allow larger value-ranges. For the user-level the internal values are (specifically for every parameter ) converted into other ranges (e.g. -64...63). There are different types of midi-messages that have to be intercepted and recognized: bulk-dump, parameter-change, program-change, dump request. For my special working-setup vl1proto has to support different configurations, devices and routings at the same time, particularly the program has to handle all kinds of in/output of voice-data to file and to the VL1-synth. A voice has about 1200 relevant parameters, or 2400 if it is a dual-voice, so already writing the parameter-names takes time. Parameters have different value-ranges (0 - 127, 0 - 1023, -64 - 63, -7 - 7, -16 - 16, -127 - 127, and others), some have to be assembled from several parameter-adresses, or are conditionally dependent from the value of switching parameters. Some values are integers, some %, some oct, others are menu-items. Different amounts of consecutive parameters form envelope-generators with different numbers of breakpoints. All these different parameter types make it a hassle to accomodate all individual cases. Different conversions have to be performed between adress-value, parameter-value, slider-value (e.g negative parameter-values in the range (-64 - 63) are mapped to adress-values 64 - 127). Max-MSP is not an ideal environment to build this conditional diversity. Rewriting the entire Yamaha expert-editor would be nice (because it exists only as a Mac-OS9 program and needs a computer with serial-out), but it would be a major programming-job. Especially since there are undocumented, complex functions (e.g. in the tune-module), which might be difficult/impossible to re-engineer. An even better thing would be to emulate the hardware of VL1 in software. For now I integrate the expert-editor in the set-up: vl1proto intercepts its communication with the synth and rebuilds a file-based parameter-space. vl1proto is a useful complement to the expert-editor, in that it improves or introduces non-existing functions: loading/saving and comparing voices; fast-access/display and commenting parameters;
|
|
Conceptual Considerations |
There may exist serious objections against this project:
Yes this synth is dated. Not out-dated. I think it is unsurpassed in the soundness of its approach (physical modelling) and the richness of its capabilities. At the moment I do not think of re-writing the Yamaha-ExpertEditor Program (Mac-OS9), but at some point in the development of VL1proto it may be a relatively small step to implement most of the features of the ExperEditor. And yes, new instrumental synthesis is of interrest, but that is no reason to abandon interrest in the vl1. It is the most advanced synth i came across sofar. From what i can find in the web I dont think that it has been thoroughly researched and understood. And the factory- and third-party-voices I have tested are far from what this synth is capable of. Even my own best voice may certainly be improved. There are reasons for this project of more general nature: Physical Modelling (PM) of the complexity as implemented in the VL1 opens a practically infinite, potential space of defining, or actually finding instruments, close to building physical instruments. It is contrary to other synthesis-approaches, which appear much more deterministic and straight forward. As computing-power increases there will be software-implementations of PM which then need layers above the elementary value-level that make the approach comprehensible and dataprocessing manageable. We have to find ways to program such a synthesis-engine. So general questions would be:
This project does not aim at directly improving the voices themselves, in the sense of automatically producing perfect PM-instruments. It first wants to understand and improve the process of voice-programming. It is similar to the difference between setting up an industry-style assembly-line that mass-produces stradivaries, versus researching the open-ended knowledge and continuous considerations a violin-maker employes when building an individual instrument. Another aspect is that an instrument is nothing by itselves. It needs the player. A beginner and an advanced player need different instruments. Certain music may need a special instrument. So there is not one ideal instrument. But there is also no direct relation between what we need and what we get, as typical synthesis suggests. An instrument-player-system is dynamic and mutually change each other. Let me sketch several possible features/moduls of vl1proto to exempify directions of the concept: |
RANDOMIZER-EVALUATOR LOOP |
Basically that is: this vl1proto-modul proposes a random parameter-change and the human evaluates the voice. The evaluation determines the modul's next step. The purpose of randomizing is to escape traps we tend to induce into the process, to escape running in cycles, when we found a local maximum in the parameterspace. The human judges each version of an instrument and thereby influences direction and intensity of randomization. Gradually rules will be introduced. So random is only a start, or a restart when stuck and a method to make rigid rules more fuzzy. We may consider different approaches:
How do we procede in voice-programming: we tend to make hypthesis and tend to follow them. We tend to proceed from the known as long as we can, even if it is wrong or doubtful. Actually we overestimate some changes we made and underestimate alternatives. Decisions are based on a mix of seemingly-physical (messurements) and psychological impressions. We have an image of what a "good instrument" is, which is actually prone to deception more than we think (e.g. there has been a test of specialists to find out a Stradivary from three violins beeing played by three vialinists behind a curtain. Most specialists missed the Stradivari, although they were absolutlely sure, that they would recognize it). I can tell that voice-programming actually defines the image of what a good instrument is. It is a learning process establishing the image and it importantly includes learning to play it. And that is, not when the instrument is finished but during the voice-programming process, because it has to influence this process. With this background in mind we can formulate some initial definitions:
These meassures aim at reducing complexity. They are based on hypothesis that may be false, though. So at some point they have to be challenged. But for the moment it is desirable, to operate on a small as possible sub-set, say 200 parameters, to be able to check what effect certain manouvers have. From previous voice-programming i can subsume:
Lets define a basic rule-set:
(reed more on voice-programming in: electronic instrument building) to be continued.... |
FOOTNOTES: |
(1) this program can be used for the Yamaha VL1 and VL1-m. With restrictions/optional conversion it could also be used with VL7, VL70-m and the VL-expansion/pluggin-card which is compatible with a line of Yamaha synths like the MU100, EX7, EX7R, EX11. It is written in Max-MSP and is compiled for Mac OS10 (Intel) and could be compiled also for PC. Its main purpose is research, so there is no immediate intention to publish or commercialize it. (2) |