Thanks for the interest,In about a week I'll be able to zip it up and pass it around to those who want it. I need another week because ideas for expanding its functionality and improving its code keep on coming to mind, and, they won't let me be til I implement them. That's how it goes with programmers--musicians too for that matter.
The latest "big idea" is to allow for a flexible means of indicating strum direction by embedding "Strum direction " events" into the sequence. For example, all strums will be downward(low to high) by default, but by adding a C0 note (as a direction event) to the chord it will tell the program to switch direction for this particular chord. The program will discard the c0 note, using it for informational purposes only. This way, you could create strumming patterns with minimal difficulty. there may also be a facility for decreasing velocities of "upstrokes" in proportion to downward strokes which are usually the louder of the two as far as my limited knowledge goes on the subject of guitar playing.
Finally, I also need to clean up note overlaps that will occur when a strummed note is clipped short by another strum of that same note. Kind of like a Legato function that will look at the last 12 notes for notes who's durations overlap the current note, letting dissimilar pitchs sustain, but clipping short those overlapping notes of identical pitch.
This is a little embarrassing, but after looking over some existing CAL programs, I found one called "StrumIt" and thought "no, it couldn't be", but yes, it is--another guy came up with this idea years ago. His program does essentially the same thing mine is doing-right down to the algorythmic level. So, I re-invented the wheel on this one. All I can say is "trust me, mine will be much better"! At least it'll be well documented.
----- Original Message ----- From: "Wolfgang Angermann" <wolfgang.angermann@xxxxxxxx>
To: <ddots-l@xxxxxxxxxxxxx> Sent: Sunday, December 24, 2006 5:00 AM Subject: [ddots-l] Re: New functionality for Sonar
I'd also be interested. With best wishes for the season. Wolfgang (from Germany)----- Original Message ----- From: "Chris Smart" <chris_s@xxxxxxxxxxxx>To: <ddots-l@xxxxxxxxxxxxx> Sent: Saturday, December 23, 2006 10:32 PM Subject: [ddots-l] Re: New functionality for SonarThat sounds like a great idea Phil, especially since as a guitarist, I can spot fake midi guitars a mile away. *grin*Another useful script might be one that filters a drum track, extracting each drum (tom, bass, snare, etc.) to it's own track. For all i know, that one is probably already in existence.Chris At 02:36 PM 12/23/2006, you wrote:Hello Listers,As you may or may not know, Sonar has a scripting facility called CAL (Cakewalk Application Language). CAL Scripts can be run from within Sonar and perform specialized tasks on Sonar data in ways that can't be achieved through the menu system commands. Its similar to how JAWS allows for scripts to be written to give additional functionality to JAWS--CakeTalking scripts for example.What follows is a brief description of one such CAL program. If there is any interest in this sort of additional functionality for Sonar, I could probably package it up and distribute it via a file sharing site-in the same way Chris Smart distributed his great tutorial collection.The CAL program I refer to is called "Strum" and I've been using it with good results, although its still technically in beta testing.Notes on use of the "Strum.cal" programthis program alters chords in a selected region of a sequence in such a way as to simulate a strum effect--as though strumming a guitar. It recognizes a chord to be any set of two or more notes that reside at the same time line position. The maximum chord size it will handle is 6 notes. If it encounters more than 6 note events at the same time position, it will indicate the MBT position of the chord along with a message that the chord size is exceeded, and then terminate.Preparing the Sequence region:First, select the region you want to modify. Then run the CAL program--it will affect only the data selected. CAL programs arerun by selecting Process|Run CAL from the sonar menu system. Then browse to the strum.cal file and press enter. A note ofcaution--it is important to first perform a "bounce to clips" on the selected region before using this CAL (or any CAL) program.The reasons have to do with the way sonar stores sequence data. Without getting in over my head on this, if you've done anyeditting on the sequence, then the data will most likely be stored in "clips", and clips will be out of sequential order. You won'tnotice it, but CAL will, and results will be very screwy. So, just get in the habit of doing a bounce to clips before running CALprograms. Also, you will need to re-select the region after the Strum program runs. This is because Strum actually erases theorigional sequence and re-writes it as a new sequence in the same time region. CakeTalking will report that the region is stillselected, but it will be unaware of the changes and the region it thinks it sees as selected is actually no longer in existence. So,simply press control enter again to re-select the region. Input Parameters supplied by the UserStrum lets you alter three aspects of a chord; the span, or spacing of the notes in the chord, the velocities of the individual notesand the duration of each note in the chord. You can choose to alter any of the three aspects, singularly, or in any combination.That is, you could choose to pass over the selected sequence and set just the durations. Or, you could set the duration andvelocities of the chord tones in one pass and another pass for tinkering with the span. However, once you set the span, you canno longer use Strum on the sequence because the chord tones will no longer occupy the same time position and thus, will nolonger be chords from the program's point of view. So, setting the span should be the last aspect you change. In order to useSstrum after setting the span, you must Quantize the sequence to re-align the chord notes to the same time position and spanthem again. If re-quantizing, you can retain any duration setting you've made by unchecking the "note durations" checkbox in thequantize dialog. Quantizing will have no affect on any velocity settings you've made.Sorting chord tonesBefore describing the input parameter screens, it should be noted that there is a fourth aspect of chords that can be controlled--their sort order. If you look at a chord in the event list view, you'll notice that the notes are not necessarily in any specific order-low to high for example. Maybe you entered the notes as best you could on a keyboard, then quantized to align the notes to thegrid. Whatever order you entered them - even if you thought they were pressed simultaineously, is the order they're going to stayin. This is of no consequence when chord tones are sounded in unison, but when you "Strum" the chord, those out-of-ordernotes will result in a peculiar sound--as if the instrument was strung incorrectly. Using Strum automatically sorts chord tones intoascending order. So, even if you choose not to enter values for span, velocity, or duration--seemingly doing nothing to thesequence--you will have by default, sorted the sequence's chord notesNow, there are three input screens that prompt you for parameters for the three aspects mentioned. In addition, if you enter avalue in any of these screens, a companion screen appears that lets you set additional fine-tuning parameters. After the programcompletes execution, a screen appears summarizing the parameters you entered so you can get a better idea of what parametersettings result in what sound quality. The summary lists parameters as follows:SP=span, SC=span curve, V=velocity, VS=Velocity spread, D=duration, DT=duration trimThe Input Parameter screens are as follows:1) Span. This screen asks you for the number of ticks used to seperate each note of the chord. For example, entering 10 herewould seperate each note in the chord by ten ticks. Guitar strums sound good at around 30 ticks.2) Span Curve. This is the companion screen to the span parameter screen and asks for a number between 1 and 7. This "curvefactor" is used to seperate each successive note by an additional amount in addition to the base span entered in the previousscreen. A value of seven will cause no additional distance between notes and results in a linear spacing of chord tones. A valueof six will increase the span of each successive note by an additional 16%. A value of five will increase the span of successivenotes by 20%, four for 25%, three for 33%, two for 50%, and finally, one for 100%. Curving the span like this causes the latternotes to be spaced wider than the earlier notes of the chord--kind of like fanning a deck of cards. Experiment a bit with thesecurve factors--they take some of the mechanical sound out of the strum.3) Set Velocity. This screen asks whether or not you want to "standardize" the velocities of the individual chord tones. You canenter a value from 0 to 127. A value of 0 will leave the velocities as they are. If you enter any other value, all note velocities inthe chord will be set to that value.4) Velocity Spread. In the Set Velocity screen, if you enter a velocity other than zero(which leaves the origional velocities intact),this screen will appear. It asks for a number of ticks between 0 & 10 that will be used to scale the individual velocities of thenotes in the chord. First, each note is set to the base velocity specified in the Set Velocity screen. Then each note is scaleddownward from that point. For example, entering 3 will scale down the velocity of the first note by a random number between 0& 3. Then the next note will be scaled between 3 and 6, the third note between 6 & 9 and so on. entering zero in this screenwill skip the scaling process and set all notes to the specified base velocity. 5) Duration. In this screen you can set a duration for the chord tones. A value of 0 will leave note durations unaffected. Valuesfrom 1 to 3860 will set the duration of each note in the chord to that number of ticks. The value 3860 is the equivalent of fourquarter notes with a project time base of 960PPQ(PartsPerQuarternote). For an example, if you set this field to 1440, it will setall chord tone durations to 1 and a half quarter notes. Keep in mind your project's PPQ setting when setting this input field.Also, a calculator might be useful at first in determining tick to note conversions. 6) Duration Trim. This last input screen lets you set a maximum value for a random trimming of each note's duration. Setting thisvalue to 50, for example, will trim from each note's duration, a random number of ticks in the range of 1 to 50. Although quitesubtle, it is subtlety that makes for the "human" feel in computer generated music. As with all the other "companion" screens, thisscreen only appears when a valid tick value is entered in the duration screen.End of notes ** To leave the list, click on the immediately-following link:- ** [mailto:ddots-l-request@xxxxxxxxxxxxx?subject=unsubscribe] ** If this link doesn't work then send a message to: ** ddots-l-request@xxxxxxxxxxxxx ** and in the Subject line type ** unsubscribe ** For other list commands such as vacation mode, click on the ** immediately-following link:- ** [mailto:ddots-l-request@xxxxxxxxxxxxx?subject=faq]** or send a message, to ** ddots-l-request@xxxxxxxxxxxxx with the Subject:- faq-- No virus found in this incoming message. Checked by AVG Free Edition.Version: 7.1.409 / Virus Database: 268.15.26/598 - Release Date: 12/22/2006-- No virus found in this outgoing message. Checked by AVG Free Edition.Version: 7.1.409 / Virus Database: 268.15.26/598 - Release Date: 12/22/2006** To leave the list, click on the immediately-following link:- ** [mailto:ddots-l-request@xxxxxxxxxxxxx?subject=unsubscribe] ** If this link doesn't work then send a message to: ** ddots-l-request@xxxxxxxxxxxxx ** and in the Subject line type ** unsubscribe ** For other list commands such as vacation mode, click on the ** immediately-following link:- ** [mailto:ddots-l-request@xxxxxxxxxxxxx?subject=faq]** or send a message, to ** ddots-l-request@xxxxxxxxxxxxx with the Subject:- faq** To leave the list, click on the immediately-following link:- ** [mailto:ddots-l-request@xxxxxxxxxxxxx?subject=unsubscribe] ** If this link doesn't work then send a message to: ** ddots-l-request@xxxxxxxxxxxxx ** and in the Subject line type ** unsubscribe ** For other list commands such as vacation mode, click on the ** immediately-following link:- ** [mailto:ddots-l-request@xxxxxxxxxxxxx?subject=faq]** or send a message, to ** ddots-l-request@xxxxxxxxxxxxx with the Subject:- faq
** To leave the list, click on the immediately-following link:- ** [mailto:ddots-l-request@xxxxxxxxxxxxx?subject=unsubscribe] ** If this link doesn't work then send a message to: ** ddots-l-request@xxxxxxxxxxxxx ** and in the Subject line type ** unsubscribe ** For other list commands such as vacation mode, click on the ** immediately-following link:- ** [mailto:ddots-l-request@xxxxxxxxxxxxx?subject=faq]** or send a message, to ** ddots-l-request@xxxxxxxxxxxxx with the Subject:- faq