aboutsummaryrefslogtreecommitdiff
path: root/site/udo/DEPRECATE_SORT_opcodes.udo
diff options
context:
space:
mode:
authorRichard <q@1bpm.net>2025-04-13 18:48:02 +0100
committerRichard <q@1bpm.net>2025-04-13 18:48:02 +0100
commit9fbf91db06a6d4f4b5cd8bb45389a731bb86bf22 (patch)
tree291bd79ce340e67affa755a8a6b4f6a83cce93ea /site/udo/DEPRECATE_SORT_opcodes.udo
downloadapps.csound.1bpm.net-9fbf91db06a6d4f4b5cd8bb45389a731bb86bf22.tar.gz
apps.csound.1bpm.net-9fbf91db06a6d4f4b5cd8bb45389a731bb86bf22.tar.bz2
apps.csound.1bpm.net-9fbf91db06a6d4f4b5cd8bb45389a731bb86bf22.zip
initial
Diffstat (limited to 'site/udo/DEPRECATE_SORT_opcodes.udo')
-rwxr-xr-xsite/udo/DEPRECATE_SORT_opcodes.udo211
1 files changed, 211 insertions, 0 deletions
diff --git a/site/udo/DEPRECATE_SORT_opcodes.udo b/site/udo/DEPRECATE_SORT_opcodes.udo
new file mode 100755
index 0000000..a942a3d
--- /dev/null
+++ b/site/udo/DEPRECATE_SORT_opcodes.udo
@@ -0,0 +1,211 @@
+; knearest nearest iarray, kvalue
+; get the nearest value to kvalue in the one-dimensional array iarray
+
+
+
+
+; aL, aR randpan asource
+; pan randomly (mono input)
+opcode randpan, aa, a
+ asource xin
+ ipan randfloat, 0, 1
+ xout asource * ipan, asource * (1 - ipan)
+endop
+
+
+; aL, aR randpan aL, aR
+; pan randomly (stereo input)
+opcode randpan, aa, aa
+ aL, aR xin
+ ipan randfloat, 0, 1
+ xout aL * ipan, aR * (1 - ipan)
+endop
+
+
+
+
+
+; Sfiltered[] directoryfiles Sdirectory, Sextension
+; get an array of files from Sdirectory with given extension Sextension (extension given without ".", and case insensitive)
+; does the same as csound's directory opcode but without false positives (ie, ".wav" would return ".wav.asd"
+opcode directoryfiles, S[], SS
+ Sdirectory, Sextension xin
+ Sextension strlower Sextension
+ Sfiles[] directory Sdirectory
+ Sfiltered[] init 1
+ index = 0
+ while (index < lenarray(Sfiles)) do
+ Sfile = Sfiles[index]
+ Sfileext fileextension Sfile
+ Sfileext strlower Sfileext
+ isame strcmp Sfileext, Sextension
+ if (isame == 0) then
+ if (index == 0) then
+ Sfiltered[index] = Sfile
+ else
+ Sfiltered[] arrayappend Sfiltered, Sfile
+ endif
+ endif
+ index += 1
+ od
+ xout Sfiltered
+endop
+
+
+; Selected randarrayext Sfiles[], Sext
+; get a random file from Sfiles[] where the extension is Sext
+; directory opcode does not do this correctly (would select file.wav.asd when ".wav" is supplied as extension)
+opcode randarrayext, S, S[]S
+ Sfiles[], Sext xin
+ Selected = "default"
+ ifindex = 0
+ while (ifindex < lenarray(Sfiles)) do
+ index random 0, lenarray(Sfiles) - 1
+ Sfile = Sfiles[index]
+ Sfileext fileextension Sfile
+ isame strcmp Sfileext, Sext
+ if (isame == 0) then
+ Selected = Sfile
+ goto return
+ endif
+ ifindex += 1
+ od
+return:
+ xout Selected
+endop
+
+
+; Spath randfile Spath, Sextension
+opcode randfile, S, SS
+ Sdirectory, Sextension xin
+ Sfiles[] directory Sdirectory
+ Spath randarrayext Sfiles, Sextension
+ xout Spath
+endop
+
+
+; aL, aR sndplay Spath, ipitch, ioffset=0
+; play a sound file with mono/stereo detection using pitch and optional offset
+opcode sndplay, aa, Sio
+ Spath, ipitch, ioffset xin
+ ichn filenchnls Spath
+ if (ichn == 1) then
+ aL diskin2 Spath, ipitch, ioffset
+ aR = aL
+ else
+ aL, aR diskin2 Spath, ipitch, ioffset
+ endif
+ xout aL, aR
+endop
+
+
+; aL, aR randplay Sbasepath, ipitch
+; play a random wav file from Sbasepath with pitch control and mono/stereo detection
+opcode randplay, aa, Si
+ Sbase, ipitch xin
+ Spath randfile Sbase, "wav"
+ aL, aR sndplay Spath, ipitch
+ xout aL, aR
+endop
+
+
+; ifn filetotable Spath, ichannel=0
+; read a sound file to a GEN01 table and return the ftable. global tracking of ftables so the same sound is not created twice
+; optional channel to read from (defaults to 0 = all channels)
+gisoundfiletablemax = 2048 ; max number of files that can be loaded to ftables
+gisoundfiletableindex = 0 ; using long variable names as they're global to reduce chance of a user collision
+gSsoundfiletables[] init gisoundfiletablemax ; maybe replace with arrayappend depending on performance
+opcode filetotable, i, So
+ Spath, ichannel xin
+ iftincrement = 20 ; ftables will start being created at this ftable number
+ ifn = 0
+ index = 0
+
+ ; check if the sound exists in a table already, if so return that f number
+ iarraymax = lenarray(gSsoundfiletables)
+ while (index < iarraymax) do
+ isame strcmp gSsoundfiletables[index], Spath
+ if (isame == 0) then
+ ifn = index + iftincrement
+ goto return
+ endif
+ index += 1
+ od
+
+ ; get file information
+ iseconds filelen Spath
+ isr filesr Spath
+ ibits filebit Spath ; just assuming 16 (4), maybe use this later if required
+ isize = round(iseconds * isr) - 1
+
+ ; create the GEN01 ftable
+ ifn = gisoundfiletableindex + iftincrement
+ ix ftgen ifn, 0, isize, 1, Spath, 0, 4, ichannel
+ gSsoundfiletables[gisoundfiletableindex] = Spath
+ gisoundfiletableindex += 1
+ goto return
+
+return:
+ xout ifn
+endop
+
+
+; isamples[], itimes[] loadallwavtotables Sfiles[], ichannel=0
+; load all wav files in Sfiles array to ftables, providing the ftable numbers in isamples[] and the file length in itimes[]
+; default channel=0, ie read all channels
+opcode filestotables, i[]i[], S[]o
+ Sfiles[], ichannel xin
+ ilen = lenarray(Sfiles)
+ isamples[] init lenarray(Sfiles)
+ itimes[] init lenarray(Sfiles)
+ index = 0
+ while (index < lenarray(Sfiles)) do
+ ifn filetotable Sfiles[index], ichannel
+ isamples[index] = ifn
+ ifilesr filesr Sfiles[index]
+ if (ichannel != 0) then
+ itimemul = 1
+ else
+ itimemul = 0.5
+ endif
+ itimes[index] = (ftlen(ifn) / ifilesr) * itimemul ; sr
+ index += 1
+ od
+ xout isamples, itimes
+endop
+
+
+; isamples[], itimes[] loadallwavtotables Spath, ichannel=0
+; load all wav files in Spath to ftables, providing the ftable numbers in isamples[] and the file length in itimes[]
+; default channel=0, ie read all channels
+opcode loadallwavtotables, i[]i[], So
+ Spath, ichannel xin
+ Sfiles[] directoryfiles Spath, "wav"
+ isamples[], itimes[] filestotables Sfiles, ichannel
+ xout isamples, itimes
+endop
+
+
+; aL, aR rndpanlpfplay iamp, ifn, iduration, kpitch, [ilpfmin=300], [ilpfmax=12000]
+; play a sound in ftable number ifn for duration iduraction with amp iamp and pitch kpitch
+; apply a random panning amount, and a random low pass filter constrained to within optional parameters ilpfmin and ilpfmax
+opcode rndpanlpfplay, aa, iiikjj
+ iamp, ifn, iduration, kpitch, ilpfmin, ilpfmax xin
+ if (ilpfmin == -1) then
+ ilpfmin = 300
+ endif
+
+ if (ilpfmax == -1) then
+ ilpfmax = 12000
+ endif
+
+ ain loscil iamp, kpitch, ifn, 1
+ ilpffreq random ilpfmin, ilpfmax
+ afilt butterlp ain, ilpffreq
+ kamp linseg 1, iduration * 0.95, 1, iduration * 0.05, 0
+ aout = afilt * kamp
+ aL, aR randpan aout
+ xout aL, aR
+endop
+
+