aboutsummaryrefslogtreecommitdiff
path: root/sonics/uniqueid.udo
diff options
context:
space:
mode:
authorRichard <richard@1bpm.net>2022-10-04 00:17:55 +0100
committerRichard <richard@1bpm.net>2022-10-04 00:17:55 +0100
commitdecb2dc0e9f1167d5cd8fb4d455305be6b9fdfbe (patch)
tree9a9a586bbb6268e52290c017ec95d3f672822980 /sonics/uniqueid.udo
downloadcsd-partialemergence-decb2dc0e9f1167d5cd8fb4d455305be6b9fdfbe.tar.gz
csd-partialemergence-decb2dc0e9f1167d5cd8fb4d455305be6b9fdfbe.tar.bz2
csd-partialemergence-decb2dc0e9f1167d5cd8fb4d455305be6b9fdfbe.zip
initial
Diffstat (limited to 'sonics/uniqueid.udo')
-rwxr-xr-xsonics/uniqueid.udo78
1 files changed, 78 insertions, 0 deletions
diff --git a/sonics/uniqueid.udo b/sonics/uniqueid.udo
new file mode 100755
index 0000000..84799ec
--- /dev/null
+++ b/sonics/uniqueid.udo
@@ -0,0 +1,78 @@
+#ifndef UDO_UNIQUEID
+#define UDO_UNIQUEID ##
+/*
+ Unique ID assignments
+ Slim excerpt for Partial Emergence
+
+ This file is part of the SONICS UDO collection by Richard Knight 2021, 2022
+ License: GPL-2.0-or-later
+ http://1bpm.net
+*/
+
+
+; globals for internal use
+giUniqueID = 0
+giUniqueFrac = 0
+
+
+/*
+ Get a unique integer ID
+
+ id uniqueid
+
+ id the ID
+*/
+opcode uniqueid, i, 0
+ id = giUniqueID
+ giUniqueID += 1
+ xout id
+endop
+
+
+/*
+ Get a unique decimal/fractional ID
+
+ id uniquefrac
+
+ id the ID
+*/
+opcode uniquefrac, i, 0
+ id = giUniqueFrac
+ giUniqueFrac += 0.0000001 ; smallest for 32bit
+ if (giUniqueFrac >= 1) then
+ giUniqueFrac = 0
+ endif
+ xout id
+endop
+
+
+/*
+ Get an array of unique fractional instrument numbers given a base instrument number
+
+ instrs[] uniqueinstrnums instrnum, inum
+ instrs[] uniqueinstrnums Sinstr, inum
+
+ instrs[] array of unique fractional numbers for the instrument number instrnum
+ Sinstr the base instrument name
+ instrnum the base instrument number
+ inum how many references to generate
+*/
+opcode uniqueinstrnums, i[], ii
+ instrnum, inum xin
+ instrs[] init inum
+ index = 0
+ while (index < inum) do
+ instrs[index] = instrnum + uniquefrac()
+ index += 1
+ od
+ xout instrs
+endop
+
+; overload for named instrument
+opcode uniqueinstrnums, i[], Si
+ Sinstr, inum xin
+ instrs[] uniqueinstrnums nstrnum(Sinstr), inum
+ xout instrs
+endop
+
+#endif