![]() |
![]() ![]() ![]() ![]() ![]()
|
next newest topic | next oldest topic |
Author | Topic: Polyphony and Sound Identity? |
David McClain Member |
![]() ![]() ![]() Hi, Suppose I have a sound that uses the "!KeyPitch" in some way such that when I have a polyphonic MidiVoice to the right, I want to display the value of !KeyPitch within each separate instance created by the MidiVoice. (is that clear?) I can't use a SoundToGlobalController for this, because converting the current !KeyPitch to some global name like !Fc would be the same !Fc for all polyphonic instances. I need some way to identify an instance so that each one could have its own !Fcxxx. But I haven't seen anything described in the manual like this. I have seen scripts that instantiate multiple instances of their sound, assigning a unique name for some parameter in each instance. But that is different from the MidiVoice which secretly instantiates its multiple copies at startup. On the other hand, if I were to use a script to assign unique names to this parameter in each instance, then when I play the keyboard, all of those instances will play at once. And that isn't the intended effect either. I have thought about splitting the keyboard range over several copies of the sounds, but then that isn't really polyphony. When I play a chord, the number of voices playing will depend on how many zones my fingers cross. So what is the secret magic formula here? - DM IP: Logged |
SSC Administrator |
![]() ![]() ![]() <I need some way to identify an instance so that each one could have its own !Fcxxx.> The green variable ?VoiceNumber is defined to be the integer voice number in a polyphonic MIDIVoice. To make it part of the hot variable name, you have to turn it into a string, concatenate it with the rest of the controller name, and then turn the whole thing into a hot variable. For example: ('Fc', ?VoiceNumber printString) asHotValue IP: Logged |
David McClain Member |
![]() ![]() ![]() Hi! Thanks! This works .. sort of... But when I place Sounds to the left of a MidiVoice module with polyphony greater than 1, the system compiles and loads into the capy, and it show the synthesized names as you indicated. But it only plays every N'th note, where N is the assigned polyphony of the MidiVoice module. The sounds to the left use the trick of constructing their hotvalue names and the VCS shows them just fine. So what am I doing incorrectly now? -------------------- Aside from the polyphony mystery, the trick of turning strings into hotValues was exactly what I needed. Thanks!!
[This message has been edited by David McClain (edited 19 March 2001).] IP: Logged |
SSC Administrator |
![]() ![]() ![]() Do any of the Sounds that you placed to the left of the MIDIVoice include another MIDIVoice? (Nesting MIDIVoices might give you this behavior of skipping key downs.) IP: Logged |
David McClain Member |
![]() ![]() ![]() No, they don't. They did include a SoundToGlobalController that takes !KeyPitch and does a fancy calculation to put out a !Fc used by another filter (on the left) as its corner frequency. Several more refinements have now removed the need for this strange technique, and so everything works correctly with a polyphony greater than 1. I find that a lot of information about Kyma can only be gleaned by serious hours of "reverse engineering" to discover what affects what else. Sure wish there were a more technical explanation for some of these things.... For example, I believe now, that a polyphonic MidiVoice actually duplicates the sounds on the left AT COMPILE TIME and downloads to Capy, instead of creating new copies as needed. This might seem obvious in hindsight, but it isn't at all obvious when you are beginning... The Capy is presented as a "Black Box" (which it is!) and Kyma lacks the usual introspection tools I have come to rely upon for gaining an understanding of the code. (Actually, it - Smalltalk - has them, but they have been hobbled for us users...) 'Would be really nice if you could find a way to let an inspector be created so we could go plumbing for the magic words like "asHotValue"... - DM IP: Logged |
SSC Administrator |
![]() ![]() ![]() quote: This seems like a good opportunity to remind everyone of the resources that you have available right in Kyma for finding answers to questions like these. For example, I just went into Kyma and selected Documentation from the File menu. Then I did a search (not a Find) for MIDIVoice with the following results: From the online help for the Polyphony parameter of the MIDIVoice: "Polyphony From the manual, page 82: You can also click on any of the document titles to go directly into that document. For example, the Expressions Quick Reference takes you directly to a list and short description of every operation that can be performed in real time in the parameter fields. Thank you for pointing out that asHotValue is not yet documented (we added it to Kyma after the manual was printed). We're compiling a document with changes, additions and corrections to be made when we rewrite the manual and will include it then. In the interim, we hope that everyone will make use of this forum as a supplemental source of documentation in the form of Questions and Answers. You can use the topic lists as a guide or use the Search option. For example, click the Search link in the upper right of the page. Then click where it says "Click here" to search private forums. Enter the topic ('polyphony' for example), choose one of the forums, and click the Search button. [This message has been edited by SSC (edited 21 March 2001).] IP: Logged |
David McClain Member |
![]() ![]() ![]() I guess we have the ambiguity of English to thank for this messy situation... When one states that a sound will be replicated by the polyphony, it is not immediately clear whether this happens in advance or whether some mechanism exists that can spawn them on demand up to the limit specified by the polyphony parameter. THAT'S WHY WE NEED EQUATIONS!! (ahem...) --------------- BTW, The topic of feedback in filters is another severe case in point... When you state that some of the output is fed back to the input for feedback, it is not immediately clear whether you mean this in the sense that all IIR feedback filters are created, or whether you actually feed back some of the IIR output to the input again. In the first instance, one might have well established and visualizable trajectories for the locus of poles. And they could be kept inside the unit circle. In the second instance (which is the actual case) the trajectory of poles is altered in some difficult to visualize manner (hence their uncontrollable nature), while the zeros are left intact. A filter transfer function H(z) becomes H(z)/(1 +/- f H(z)). Without knowing H(z) it is not possible to ascertain where the new poles migrate as feedback is increased. Now while actual feedback (in the second sense above) turns out to be musically useful, as it relates to extending the ringing, this is not the feedback one might initially expect. And as everyone knows, the feedback parameter in the filters is particularly tricky to use, often sending the filters into unstable operation at high settings. - DM [This message has been edited by David McClain (edited 21 March 2001).] IP: Logged |
gelauffc Member |
![]() ![]() ![]() quote: Sometimes an equation can tell a lot more then text can. Again one topic leading to the questions of the unknowns of Kyma. Good example David, the filter. SSC Keeping things a company secret is OK, but then make very sure things can not be interpreted differently, or that the basics (a filter) work superb. Christiaan IP: Logged |
All times are CT (US) | next newest topic | next oldest topic |
![]() ![]() |
This forum is provided solely for the support and edification of the customers of Symbolic Sound Corporation.