ECMC PVC example file plainpv8 Example PVC script used to create /sflib/x soundfile >> plainpv8.wav < # IMPORTANT: This example relies in part on a pitch analysis file created with the PVC # routine pitchtracker. However, pitchtracker is broken as of Linux PVC version # 3.0 and cannot be used to create pitch analysis files. Thus, this present example, # plainpv8, will not work until pitchtracker is fixed. # In this example the time varying pitch of /sflib/voice/sop1.b3 is # imposed upon a gamelan jegogan tone. The pitch analysis of the soprano # tone was created by ECMC PVC example pitchtracker1, which wrote the # analysis output to a file called "pvc.sop1.b3.ptrack" # This file is used as the input to the pitch transposition argument # within plainpv8 : # pitch_transposition_in_semitones=$SFDIR/pvc.sop1.b3.ptrack # int, float or FUNC # The output duration of plainpv8 is set to match the duration of the # soprano tone: # endtime=6.36 # end time is adjusted to the duration of /sflib/voice/sop1.b3 # Finally, because only a portion of the jegogan soundfile is used, we create# an amplitude envelope to apply an exponential fade-out, and apply the values # from this function file to the gain parameter, also reducing the gain by - 2dB # during the "steady-state" portion to eliminate clipping: # gen4 -L1000 0 -2 -1 .95 -2 -1 1. -96 > $SFDIR/fadeout # gain_in_decibels=$SFDIR/fadeout # in dB, int, float or FUNC #****************************************************** #.................... PLAINPV ......................... #****************************************************** #******** INPUT & OUTPUT SOUNDFILES ************* # input soundfile: can be aiff or wave on Linux, aiff only on SGI inputsf=/sflib/gamelan/jegogan.1.wav outputsf=plainpv8.wav # output soundfile # ********************* # ##### Cmusic function file generator tempates ##### gen4 -L1000 0 -2 -1 .95 -2 -1 1. -96 > $SFDIR/fadeout # 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 ##### 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=6.36 # end time is adjusted to the duration of /sflib/voice/sop1.b3 #====================================================== #*** 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 *************************** #........... 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. ) #******** RESYNTHESIS MODIFICATIONS ********************* #.................. DURATION .............................. time_expansion_contraction_factor=1 # (Adjust frames_per_second in proportion to keep a constant rate.) #.................. DECIBELS .......................... gain_in_decibels=$SFDIR/fadeout # in dB, int, float or FUNC #.................. PITCH ............................. frequency_shift_in_Hz=-0 # detune partials, in herz; int, float or FUNC pitch_transposition_in_semitones=$SFDIR/pvc.sop1.b3.ptrack # int, float or FUNC #............ AMPLITUDE RESPONSE ...................... release_time_in_seconds=0 # int, float or FUNC attack_time_in_seconds=0 # int, float or FUNC #............ SPECTRUM WARPSHAPE ...................... spectrum_warpshape_index=0 # int, float or FUNC #............ BRICKWALL FILTER ........................ FILTER_TYPE=0 # 0 = bandpass, 1 = bandreject BRICKWALL_FILTER_window_low_frequency=-1 BRICKWALL_FILTER_window_high_frequency=-1 # (-1 selects respective lowest or highest frequency) #====================================================== #*************** LOW/HIGH SHELF EQ ********************* LOW_SHELF_EQ_gain_in_decibels=0 LOW_SHELF_EQ_frequency=200 HIGH_SHELF_EQ_gain_in_decibels=0 HIGH_SHELF_EQ_frequency=2000 #====================================================== #........... 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 EXCEPT TO DELETE FUNCTION FILES AT VERY END) #==================================================== # ***** TKLA CHANGES: ******* # cd $SFDIR SR=`/usr/local/bin/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=plainpv PVFLAGS="\ \ -N$FFT_length \ -M$windowsize \ -w$window_type \ -D$frames_per_second \ -I$time_expansion_contraction_factor \ \ -a$frequency_shift_in_Hz \ -P$pitch_transposition_in_semitones \ -A$gain_in_decibels \ \ -C$output_channel \ -t$oscillator_resynthesis_threshold_in_dB \ \ -b$begintime \ -e$endtime \ \ -H$LOW_SHELF_EQ_gain_in_decibels \ -m$LOW_SHELF_EQ_frequency \ \ -X$HIGH_SHELF_EQ_gain_in_decibels \ -R$HIGH_SHELF_EQ_frequency \ \ -L$release_time_in_seconds \ -l$attack_time_in_seconds \ \ -W$spectrum_warpshape_index \ \ -T$FILTER_TYPE \ -f$BRICKWALL_FILTER_window_low_frequency \ -F$BRICKWALL_FILTER_window_high_frequency \ \ -_$output_data_format \ -=$rescale_level_in_decibels \ \ \ -p$print_amplitude_statistics_0_no__1_yes \ -i$amplitude_statistics_time_interval \ " echo "\n\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/fadeout