ECMC PVC example file chordmapper2
Example PVC script used to create /sflib/x soundfile >> chordmapper2.wav <
# ECMC pvc example chordmapper2: this example creatres a four note # "harmonization" from soprano tone /sflib/voice/sop1.b3. The four # chord tone clones created from the analysis of this source soundfile # are pitched at fs3, c4, f4 and b4. The output amplitudes of these 4 notes decrease from the lowest to highest note, in attempt to # "balance" the chord. # echo \ # 7.11 1 7.06 0 .3 0 1 0 0 0 0 0 \ # 7.11 1 8.00 0 .3 -3 1 0 0 0 0 0 \ # 7.11 1 8.05 0 .3 -6 1 0 0 0 0 0 \ # 7.11 1 8.11 0 .3 -9 1 0 0 0 0 0 \ # > $SFDIR/chordmapfile # The low .3 values in parameter 5 (partial bandwidth as proportion of # fundamental frequency) simplify the timbre, reducing higher frequencies # To obtain better spectral resolution and reduce buzzing artifacts, # the FFT size is increase from the default 1024 to 4096: # FFT_length=4096 # 2048 # 1024 # To eliminate clipping that would be caused by 4 clones of a tone the # master gain is reduced by 10 dB # MASTER_gain_in_decibels=-10 # in dB, int, float or FUNC # Notice the exaggeration in the quavering amplitude variations of the # original soprano tone that result when four pitch-shifted clones # of this tone sound simultaneously.
#****************************************************** #************** CHORDMAPPER *************************** #****************************************************** # ******ECMC CHANGES & ADDITIONS: *************** #******** INPUT & OUTPUT SOUNDFILES ************* # input soundfile, can be aiff or wave format on Linux, aiff only on SGI inputsf=/sflib/voice/sop1.b3.wav outputsf=chordmapper2.wav # output soundfile # ********************* # ##### Cmusic function file generator tempates ##### # gen0 normalizes function files previously created with other gen routines # gen0 -Llength max < inputfuncfile > outputfuncfile # gen1 creates linear {straight line} segments, like Csound gen 7 # gen1 -Llength t1 v1 ... tN vN # gen2 generates harmonic waveforms from sine {a} & cosine {b} amps # gen2 -Llength [-o (default) or -c] a1 ... aN b0 ... bM N # gen3 generates amp values & linear connections at equally spaced time points # gen3 -Llength v1 v2 ... vN # gen4 generates exponenetial segments; "a" values determine shape & # depth of curve: 0 = linear, neg. = exponential, pos. = inverse expo. # gen4 -Llength t1 v1 a1 ... tN vN # gen5 is like Csound gen 9 : harmonic1/amp/phase harmonic2/amp/phase # gen5 -Llength h1 a1 p1 ... hN aN pN # gen6 generates a table of random numbers between +1 and -1 # gen6 -Llength # cspline: smooth curve {cubic spline} interpolator # cspline len_flag [flags] x0 y0 x1 y1 ... xN yN # genraw reads in a previously created function file # genraw -LN filename (where N is the length of the output function.) # For a usage summary of "reshape" type "reshape" with no arguments. ##### End of gen routine function generator tempates ##### #...................................................... output_data_format=1 # 0= Same as input file, 1 = integers 2 = rescaled floats #******** BEGIN/END TIMES ***************************** # beginning and end times within input soundfile for analysis/resynthesis begintime=0 # time in input soundfile to begin analysis/resynthesis endtime=0 # (-1 or 0 end time defaults to end of file) #====================================================== #*** ANALYSIS PARAMETERS ****************************** FFT_length=1024 # must be power-of-2, usually 1024, 512 or 2048 # do not set FFT_length lower than 1024 if samp. rate = 96000 window_type=2 # window type: 0 = Hamming,1 = rectangular, 2 = Blackman (DEFAULT), # 3 = Bartlett triangular, 4-12 = Kaiser windows for alpha = 4-12 # generally recommended: 2 or 8 windowsize=0 # default 0 sets windowsize (in samples) to 2 * FFT_length if # samp. rate <= 48000 or to 4 * FFT_length if samp. rate > 48000 frames_per_second=200 # generally 200, occasionally 400 or 600 when time stretching #====================================================== #*** RESYNTHESIS PARAMETERS *************************** time_expansion_contraction_factor=1 # OUTPUT CHANNEL(S) ....................... output_channel=0 # channels are numbered from 1 to the maximum; 0 = all channels #.............OSCIL THRESHOLD ........................ oscillator_resynthesis_threshold_in_dB=-80 #( Usually -60 to -80 unless dropouts become audible. ) #****************** MODIFICATIONS ********************* #.................. DECIBELS .......................... MASTER_gain_in_decibels=-10 # in dB, int, float or FUNC #********** SOURCE ************************************ #.................. DECIBELS .......................... SOURCE_gain_in_dB=-96 # in dB, int, float or FUNC #.................. PITCH ............................. SOURCE_frequency_shift=0 # int, float or FUNC SOURCE_pitch_transposition_in_semitones=0 # int, float or FUNC #====================================================== #**************** TARGETS ***************************** #====================================================== #.................. DECIBELS .......................... TARGETS_gain_in_dB=-0 # int, float or FUNC #.................. PITCH ............................. TARGETS_frequency_shift=0 # int, float or FUNC TARGETS_pitch_transposition_in_semitones=0 # int, float or FUNC #............ SPECTRUM WARPSHAPE ...................... spectrum_warpshape_index=0 # int, float or FUNC #............ AMPLITUDE RESPONSE ...................... attack_time_in_seconds=0 # int, float or FUNC release_time_in_seconds=0 # int, float or FUNC #====================================================== #***** LOW/HIGH SHELF EQ (TARGETS ONLY) *************** LOW_SHELF_EQ_gain_in_decibels=-0 LOW_SHELF_EQ_frequency=100 HIGH_SHELF_EQ_gain_in_decibels=0 HIGH_SHELF_EQ_frequency=1000 #====================================================== #...MASTER INTERPOLATION CONTROLS ...................... # (Using (0-1) control functions, these 3 variables provide # master controls for time varying manipulation of the amp, # freq and null phase values of a tone. With the respective P-field # of a tone set to 1 (on), the controls interpolate # between the source value and target setting. For example, a # function moving between 0 and 1 would cause the frequency to # shift from the orginal source value to the tone's target # setting. Setting the P-field to .5 would start the shift halfway # between source and target values. Negative # produce the same as positive values except that they # invert the control value in its 0-1 range before using it. #.....AMPLITUDE: TARGETS_amp_interpolation_control__0_to_1=1 #....FREQUENCY: TARGETS_freq_interpolation_control__0_to_1=1 #....NULL PHASE: TARGETS_nullphase_interpolation_control__0_to_1=1 #====================================================== #........Two more TUNING conrtols: ........................ # Most of you will never use these variables (A.S.) # There are two tuning control values; the first for the tone # and the second global value that sets the tuning base for # all tones. The partial_tuning_control determines the current tuning # of the tone by mapping its 0-1 value or function into the difference # between the base and tone tuning settings. For example, # a function progressing from 0 to 1, placed in the tuning control # parameter would case the tuning to move from the base value to the # target tuning. TARGETS_partial_tuning_control=1 # (0-1 control value) TARGETS_partial_tuning_base_value=0 # 0 = original source tuning, 1 = tuned to target partial # < 0 = source tuning deviation amplified, # > 1 = inverse amplified source tuning deviation #====================================================== TARGETS_shift_file=$SFDIR/chordmapfile #..............SOURCE POINT FORMAT .................... SOURCE_POINT_DATA_FORMAT=1 # 0 = pitch specified in frequency used in chordmapfile # 1 = pitch specified in octave.pitchclass used in chordmapfile #.............. SHIFT POINT FORMAT .................... SHIFT_DATA_FORMAT=3 # 0 = frequency multiplier # 1 = partial shift adder # 2 = map to frequency ) 3 = map to octave.pitchclass # (A.S. : I don't know what this parameter does) #====================================================== #***** DATA SET for CHORDMAPPER "TONES" ********** # Create 12 values in the data file for each output tone. # Line 1 below # 1) source freq. or oct.pch (depending on SOURCE_DATA_FORMAT above) # 2) lowest partial number : 1 or higher # 3) output freq. or oct.pch (depending on SOURCE_DATA_FORMAT above # 4) number of partials above lowest (0 = all below Nyquist) # 5) partial bandwidth as proportion of fundamental frequency # higher values = brighter timbres # 6) gain or attenuation in dB # Line 2 below : these parameters used less frequently # 7) partial spacing as proportion of fundamental,negative = rejectmode # 8) decibel rolloff per octave beginning with lowest partial. # Postive rolloff produces gain.rejectmode measure begins from fundamental # 9) Amplitude interpolation switch/degree. # 0 = off, 1 = on, -1 = inverse on, .5 = half on # 10) Frequency interpolation switch/degree. # 0 = off, 1 = on, -1 = inverse on, .5 = half on # 11) Tuning factor # 0 = original source tuning, 1 = tuned to target partial # < 0 = source tuning-deviation amplified, # > 1 = inverse of amplified source-tuning-deviation # 12) Null phase factor, 0 = off, 1 = null phase, # .5 = halfway to null phase #====================================================== # Create CHORDMAPPER FUNCTION HERE: # 4 note harmonization at fs3, c4, f4, b4: echo \ 7.11 1 7.06 0 .3 0 1 0 0 0 0 0 \ 7.11 1 8.00 0 .3 -3 1 0 0 0 0 0 \ 7.11 1 8.05 0 .3 -6 1 0 0 0 0 0 \ 7.11 1 8.11 0 .3 -9 1 0 0 0 0 0 \ > $SFDIR/chordmapfile #***************************************************** # An * (asterisk) at the beginning of a data set will comment it out. # Do not include any blank lines, # or other characters in this function # definition. Be very careful - -chordmapper is VERY picky #........... RESCALE for floating point only ...... rescale_level_in_decibels=0 # set to 1 to rescale to peak of input file; do not do this if input amplitude # is low #********** AMPLITUDE STATISTICS ********************** print_amplitude_statistics_0_no__1_yes=1 amplitude_statistics_time_interval=.25
#==================================================== # COMMAND LINE SETUP -- OFFICE USE ONLY # (DO NOT WRITE BELOW THIS LINE) #==================================================== # ***** TKLA CHANGES: ******* # cd $SFDIR SR=`sfsr $inputsf | awk '{print $1}'` if ( ( [ `expr "$SR" \> "48000"` == 1 ] ) && ( [ "$windowsize" == "0" ] ) ) ; then # if SR is > 48000 & windowsize is set to 0 increase default windowsize windowsize=`expr $FFT_length \* 4` fi # Determine if input soundfile is 24 bit. If so, compile 32 bit float outputs, then # convert to 24 bit ints WORDSIZE=`/usr/local/bin/sfbits "${inputsf}" | awk '{print $1}'` if [ "$WORDSIZE" == "24" ] ; then rm -f pvcin ; 24tofloat $inputsf pvcin ; input_file=pvcin if [ "$output_data_format" != 2 ] ; then output_file=pvcout # temporary floating point output soundfile for 24-bit inputs rm -f pvcout; output_data_format=2 else # 24 bit input but float output requested output_file=$outputsf ; fi else # not 24 bit input ; 16 bit int or 32 bit float input input_file=$inputsf ; output_file=$outputsf fi # ****** end of TKLA changes & additions ****** # pvroutine=chordmapper PVFLAGS="\ \ -N$FFT_length \ -M$windowsize \ -w$window_type \ -D$frames_per_second \ -I$time_expansion_contraction_factor \ \ -C$output_channel \ -t$oscillator_resynthesis_threshold_in_dB \ \ -b$begintime \ -e$endtime \ \ -A$MASTER_gain_in_decibels \ \ -G$SOURCE_gain_in_dB \ -a$SOURCE_frequency_shift \ -P$SOURCE_pitch_transposition_in_semitones \ \ -q$TARGETS_frequency_shift \ -X$TARGETS_pitch_transposition_in_semitones \ -m$TARGETS_gain_in_dB \ -F$TARGETS_shift_file \ \ -L$release_time_in_seconds \ -l$attack_time_in_seconds \ \ \ -c$TARGETS_amp_interpolation_control__0_to_1 \ -d$TARGETS_freq_interpolation_control__0_to_1 \ \ -B$TARGETS_nullphase_interpolation_control__0_to_1 \ -K$TARGETS_partial_tuning_control \ -J$TARGETS_partial_tuning_base_value \ \ \ -Z$SHIFT_DATA_FORMAT \ -Q$SOURCE_POINT_DATA_FORMAT \ -W$spectrum_warpshape_index \ \ \ -S$LOW_SHELF_EQ_gain_in_decibels \ -U$LOW_SHELF_EQ_frequency \ \ -T$HIGH_SHELF_EQ_gain_in_decibels \ -V$HIGH_SHELF_EQ_frequency \ \ \ -_$output_data_format \ -=$rescale_level_in_decibels \ \ -p$print_amplitude_statistics_0_no__1_yes \ -i$amplitude_statistics_time_interval \ \ " echo "\n$pvroutine $PVFLAGS $input_file $output_file" $pvroutine $PVFLAGS $input_file $output_file ; # ***** TKLA CHANGES & ADDITIONS: ******* # if ( ( [ "$WORDSIZE" == "24" ] ) && ( [ "$output_file" == "pvcout" ] ) ) ; then echo "Converting temporary float output file pvcout to $outputsf" echo " -------------------------------------------------------" floatto24 pvcout $outputsf 2> /dev/null ; rm -f pvcin pvcout echo " -------------------------------------------------------" else echo " -------------------------------------------------------" echo -e -n "Output soundfile: " ; sfinfo -s $outputsf if ( ( test -f "pvcin" ) ) ; then rm -f pvcin ; fi echo " -------------------------------------------------------" fi # ****** end of TKLA changes & additions ****** # # If you have created any gen function files above delete them below: rm $SFDIR/chordmapfile