Przeglądaj źródła

Small changes

master
Pete Shadbolt 10 lat temu
rodzic
commit
ccb180ed00
2 zmienionych plików z 81 dodań i 89 usunięć
  1. +77
    -89
      main.csd
  2. +4
    -0
      makefile

+ 77
- 89
main.csd Wyświetl plik

@@ -1,11 +1,8 @@
main.csd
Pete Shadbolt.2014
Based on code by Iain McCurdy, 2006
THE delay OPCODE IS PLACED IN A SEPARATE, ALWAYS ON, INSTRUMENT FROM THE SOURCE SOUND PRODUCING INSTRUMENT.
THE IS A COMMONLY USED TECHNIQUE WITH TIME SMEARING OPCODES AND EFFECTS LIKE REVERBS AND DELAYS.
ksmps MAY NEED TO BE LOW (AND kr THEREFORE HIGH) WHEN WORKING WITH SHORT DELAY TIMES DEFINED INITIALLY AT KRATE
TODO: implement octave down/up (like old delay pedal), key control, panic button
<CsoundSynthesizer>
@@ -15,99 +12,90 @@ ksmps MAY NEED TO BE LOW (AND kr THEREFORE HIGH) WHEN WORKING WITH SHORT DELAY T
<CsInstruments>
sr = 44100 ;SAMPLE RATE
ksmps = 4 ;NUMBER OF AUDIO SAMPLES IN EACH CONTROL CYCLE (MAY NEED TO BE LOW WHEN WORKING WITH SHORT DELAY TIMES DEFINED INITIALLY AT KRATE)
nchnls = 2 ;NUMBER OF CHANNELS (2=STEREO)
0dbfs = 1 ;MAXIMUM AMPLITUDE
;FLTK INTERFACE CODE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
FLcolor 255, 255, 255, 0, 0, 0
; LABEL | WIDTH | HEIGHT | X | Y
FLpanel "M I L C H L O D E", 500, 300, 0, 0
; ON | OFF | TYPE | WIDTH | HEIGHT | X | Y | OPCODE | INS | STARTTIM | DUR
gkOnOff,ihOnOff FLbutton "Input On/Off", 1, 0, 22, 180, 25, 5, 5, 0, 1, 0, -1
FLsetColor2 255, 255, 50, ihOnOff ;SET SECONDARY COLOUR TO YELLOW
;GENERAL_TEXT_SETTINGS SIZE | FONT | ALIGN | RED | GREEN | BLUE
FLlabel 13, 1, 3, 255, 255, 255 ;LABELS MADE INVISIBLE (I.E. SAME COLOR AS PANEL)
;BUTTON BANKS TYPE | NUMX | NUMY | WIDTH | HEIGHT | X | Y | OPCODE | INS | STARTTIM | DUR
;gkinput, ihinput FLbutBank 14, 1, 2, 18, 40, 250, 0, -1
;GENERAL_TEXT_SETTINGS SIZE | FONT | ALIGN | RED | GREEN | BLUE
FLlabel 13, 1, 3, 0, 0, 0 ;LABELS MADE VISIBLE AGAIN
;VALUE_DISPLAY_BOXES WIDTH | HEIGHT | X | Y
iddlt FLvalue " ", 80, 20, 5, 75
idmix FLvalue " ", 80, 20, 5, 125
idfeedbackamt FLvalue " ", 80, 20, 5, 175
idamp FLvalue " ", 80, 20, 5, 225
idporttime FLvalue " ", 80, 20, 5, 275
;SLIDERS MIN | MAX | EXP | TYPE | DISP | WIDTH | HEIGHT | X | Y
gkdlt,ihdlt FLslider "Delay Time (sec)", .001, 5, -1, 23, iddlt, 490, 25, 5, 50
gkmix,ihmix FLslider "Dry/Wet Mix", 0, 1, 0, 23, idmix, 490, 25, 5, 100
gkfeedamt,ihfeedamt FLslider "Feedback Ratio", -1, 1, 0, 23, idfeedbackamt, 490, 25, 5, 150
gkamp,ihamp FLslider "Output Amplitude Rescaling", 0, 1, 0, 23, idamp, 490, 25, 5, 200
gkporttime,ihporttime FLslider "Portamento Time", 0, 2, 0, 23, idporttime, 490, 25, 5, 250
gkingain,ihingain FLslider "Live Input Gain", 0, 1, 0, 23, -1, 140, 20, 350, 5
;SET_INITIAL_VALUES VALUE | HANDLE
FLsetVal_i 1, ihOnOff
FLsetVal_i .5, ihingain
FLsetVal_i .5, ihdlt
FLsetVal_i 0.5, ihmix
FLsetVal_i 0.7, ihfeedamt
FLsetVal_i .7, ihamp
FLsetVal_i 0.3, ihporttime
FLpanel_end ;END OF PANEL CONTENTS
FLrun ;RUN THE FLTK WIDGET THREAD
;END OF FLTK INTERFACE CODE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
instr 1 ;PLAYS FILE
if gkOnOff=0 then ;SENSE FLTK ON/OFF SWITCH
turnoff ;TURN THIS INSTRUMENT OFF IMMEDIATELY
endif
asigL, asigR ins ;TAKE INPUT FROM COMPUTER'S AUDIO INPUT
gasigL = asigL * gkingain ;SCALE USING 'Input Gain' SLIDER
gasigR = asigR * gkingain ;SCALE USING 'Input Gain' SLIDER
sr = 44100 ;Sample rate
ksmps = 20 ;Number of audio samples in each control cycle
nchnls = 2 ;Number of channels (2=stereo)
0dbfs = 1 ;Maximum amplitude
gkporttime = 0.3; portamento time
;FLTK GUI interface
FLcolor 200, 200, 255, 0, 0, 0
FLpanel "M I L C H L O D E", 500, 300, 0, 0, 0, 1
gkOnOff,ihOnOff FLbutton "Input On/Off", 1, 0, 22, 180, 25, 5, 5, 0, 1, 0, -1
; Sliders
gkdlt,ihdlt FLslider "Delay Time (sec)", .001, 5, 0, 23, -1, 490, 25, 5, 50
gkmix,ihmix FLslider "Dry/Wet Mix", 0, 1, 0, 23, -1, 490, 25, 5, 100
gkfeedamt,ihfeedamt FLslider "Feedback Ratio", -1, 1, 0, 23, -1, 490, 25, 5, 150
gkamp,ihamp FLslider "Output Amplitude Rescaling", 0, 1, 0, 23, -1, 490, 25, 5, 200
gkingain,ihingain FLslider "Input Gain", 0, 1, 0, 23, -1, 140, 20, 350, 5
ih FLbox "Keys: ", 1, 5, 14, 490, 20, 0, 250
;Set defaults
FLsetVal_i 1, ihOnOff
FLsetVal_i .5, ihingain
FLsetVal_i 4, ihdlt
FLsetVal_i 0.5, ihmix
FLsetVal_i 0.95, ihfeedamt
FLsetVal_i .7, ihamp
FLpanel_end ;End of GUI
FLrun ;Run the FLTK thread
; Instr 1 is the source
instr 1
; Turn off with the switch
if gkOnOff=0 then
turnoff
endif
; Get input from mic/line
asigL, asigR ins
gasigL = asigL * gkingain
gasigR = asigR * gkingain
endin
instr 2 ;DELAY INSTRUMENT
kporttime linseg 0, .001, 1, 1, 1 ;USE OF AN ENVELOPE VALUE THAT QUICKLY RAMPS UP FROM ZERO TO 1. THIS PREVENTS VARIABLES GLIDING TO THEIR REQUIRED VALUES EACH TIME THE INSTRUMENT IS STARTED.
kporttime = kporttime * gkporttime ;SCALE PORTAMENTO FUNCTION WITH FLTK SLIDER VALUE
kdlt portk gkdlt, kporttime ;PORTAMENTO IS APPLIED TO THE VARIABLE 'gkdlt'. A NEW VARIABLE 'kdlt' IS CREATED.
adlt interp kdlt ;A NEW A-RATE VARIABLE 'adlt' IS CREATED BY INTERPOLATING THE K-RATE VARIABLE 'kdlt'
;;;LEFT CHANNEL DELAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
abufferL delayr 5 ;CREATE A DELAY BUFFER OF 5 SECONDS DURATION (EQUIVALENT TO THE MAXIMUM DELAY TIME POSSIBLE USING THIS EXAMPLE)
adelsigL deltap3 adlt ;TAP THE DELAY LINE AT gkdlt SECONDS
delayw gasigL + (adelsigL * gkfeedamt) ;WRITE AUDIO SOURCE AND FEEDBACK SIGNAL INTO THE BEGINNING OF THE BUFFER
;;;RIGHT CHANNEL DELAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
abufferR delayr 5 ;CREATE A DELAY BUFFER OF 5 SECONDS DURATION (EQUIVALENT TO THE MAXIMUM DELAY TIME POSSIBLE USING THIS EXAMPLE)
adelsigR deltap3 adlt ;TAP THE DELAY LINE AT gkdlt SECONDS
delayw gasigR + (adelsigR * gkfeedamt) ;WRITE AUDIO SOURCE AND FEEDBACK SIGNAL INTO THE BEGINNING OF THE BUFFER
aL ntrpol gasigL, adelsigL, gkmix
aR ntrpol gasigR, adelsigR, gkmix
outs aL * gkamp, aR * gkamp ;CREATE A MIX BETWEEN THE WET AND THE DRY SIGNALS AT THE OUTPUT
clear gasigL, gasigR ;CLEAR THE GLOBAL AUDIO SEND VARIABLES
; Instr 2 is the delay line
instr 2
; Sense keyboard
kKey FLkeyIn
kChanged changed kKey
printk2 kKey
;if kKey=112&&kChanged=1 then
;printf_i "awd"
;FLsetVal_i 0.0, gkfeedamt
;endif
kporttime linseg 0, .001, 1, 1, 1 ;A short envelope
kporttime = kporttime * gkporttime ;TODO: remove this
kdlt portk gkdlt, kporttime ;Apply portamento
adlt interp kdlt ;Interpolate
;Left channel
abufferL delayr 5 ;Buffer
adelsigL deltap3 adlt ;Tap
delayw gasigL + (adelsigL * gkfeedamt) ;Feedback
;Right channel
abufferR delayr 5 ;Buffer
adelsigR deltap3 adlt ;Tap
delayw gasigR + (adelsigR * gkfeedamt) ;Feedback
aL ntrpol gasigL, adelsigL, gkmix
aR ntrpol gasigR, adelsigR, gkmix
outs aL * gkamp, aR * gkamp ;Mix wet/dry
clear gasigL, gasigR ;Clear global audio sends
endin
</CsInstruments>
<CsScore>
;INSTR | START | DURATION
i 2 0 -1 ;INSTRUMENT 2 (DELAY INSTRUMENT) PLAYS A HELD NOTE
i 2 0 -1 ;Instrument 2 plays a held note
f 0 3600 ;'DUMMY' SCORE EVENT KEEPS REALTIME PERFORMANCE GOING FOR 1 HOUR
f 0 3600 ;Keep performance going
</CsScore>
</CsoundSynthesizer>

+ 4
- 0
makefile Wyświetl plik

@@ -0,0 +1,4 @@
all: run

run:
csound main.csd

Ładowanie…
Anuluj
Zapisz