From 9fbf91db06a6d4f4b5cd8bb45389a731bb86bf22 Mon Sep 17 00:00:00 2001 From: Richard Date: Sun, 13 Apr 2025 18:48:02 +0100 Subject: initial --- site/udo/bussing.udo | 268 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 268 insertions(+) create mode 100755 site/udo/bussing.udo (limited to 'site/udo/bussing.udo') diff --git a/site/udo/bussing.udo b/site/udo/bussing.udo new file mode 100755 index 0000000..7ac40b8 --- /dev/null +++ b/site/udo/bussing.udo @@ -0,0 +1,268 @@ +#ifndef UDO_BUSSING +#define UDO_BUSSING ## +/* + Bus handling + + This file is part of the SONICS UDO collection by Richard Knight 2021, 2024 + License: GPL-2.0-or-later + http://1bpm.net +*/ + +#ifdef BUS_MAINMIXER +gkmastervolume init 1 +#end + +/* + Get the stereo L and R names for a singular bus name + + SnameL, SnameR bus_name Sbus + + SnameL left bus identifier + SnameR right bus identifier + + Sbus bus name +*/ +opcode bus_name, SS, S + Sbus xin + xout sprintf("%sL", Sbus), sprintf("%sR", Sbus) +endop + + +/* + Read from a stereo bus, but do not clear it + + aL, aR bus_tap Sbus + + aL left channel + aR right channel + Sbus bus name +*/ +opcode bus_tap, aa, S + Sbus xin + SbusL, SbusR bus_name Sbus + aL chnget SbusL + aR chnget SbusR + xout aL, aR +endop + + +/* + Read from a mono bus (or left channel of a stereo bus), but do not clear it + + aout bus_tap Sbus + + aout output audio + Sbus bus name +*/ +opcode bus_tap, a, S + Sbus xin + SbusL, S_ bus_name Sbus + aout chnget SbusL + xout aout +endop + + +/* + Read from a stereo bus, and then clear the bus + + aL, aR bus_read Sbus + + aL left channel + aR right channel + Sbus bus name +*/ +opcode bus_read, aa, S + Sbus xin + SbusL, SbusR bus_name Sbus + aL chnget SbusL + aR chnget SbusR + chnclear SbusL + chnclear SbusR + xout aL, aR +endop + +/* + Read from a mono bus (or left channel of a stereo bus), and then clear the bus + + aout bus_read Sbus + + aout output audio + Sbus bus name +*/ +opcode bus_read, a, S + Sbus xin + SbusL, S_ bus_name Sbus + aout chnget SbusL + chnclear SbusL + xout aout +endop + + +/* + Clear a stereo bus + + bus_clear Sbus + + Sbus bus name +*/ +opcode bus_clear, 0, S + Sbus xin + SbusL, SbusR bus_name Sbus + chnclear SbusL + chnclear SbusR +endop + + +/* + Clear a mono bus (or left channel of a stereo bus) + + bus_clear_mono Sbus + + Sbus bus name +*/ +opcode bus_clear_mono, 0, S + Sbus xin + SbusL, S_ bus_name Sbus + chnclear SbusL +endop + + +/* + Set to a stereo bus + + bus_set Sbus, aL, aR + + Sbus bus name + aL left channel + aR right channel +*/ +opcode bus_set, 0, Saa + Sbus, aL, aR xin + SbusL, SbusR bus_name Sbus + chnset aL, SbusL + chnset aR, SbusR +endop + + +/* + Set to a mono bus (or left channel of a stereo bus) + + bus_set Sbus, ain + + Sbus bus name + ain input audio +*/ +opcode bus_set, 0, Sa + Sbus, ain xin + SbusL, S_ bus_name Sbus + chnset ain, SbusL +endop + + +/* + Mix to a stereo bus + + bus_mix Sbus, aL, aR + + Sbus bus name + aL left channel + aR right channel +*/ +opcode bus_mix, 0, Saa + Sbus, aL, aR xin + SbusL, SbusR bus_name Sbus + chnmix aL, SbusL + chnmix aR, SbusR +endop + + +/* + Mix to a mono bus (or left channel of a stereo bus) + + bus_mix Sbus, ain + + Sbus bus name + aL left channel + aR right channel +*/ +opcode bus_mix, 0, Sa + Sbus, ain xin + SbusL, S_ bus_name Sbus + chnmix ain, SbusL +endop + + +/* + Mix to master bus + + bus_masterout aL, aR + + aL left channel + aR right channel +*/ +opcode bus_masterout, 0, aa + aL, aR xin + chnmix aL, "mainL" + chnmix aR, "mainR" +endop + + +/* + Mix mono signal to master bus, equally across left and right + + bus_masterout ain + + ain input audio +*/ +opcode bus_masterout, 0, a + ain xin + chnmix ain, "mainL" + chnmix ain, "mainR" +endop + + +/* + Record a bus to a wave file + + bus_record Sbus, Spath + + Sbus bus name + Spath path to file to record to +*/ +opcode bus_record, 0, SS + Sbus, Spath xin + aL, aR bus_tap Sbus + fout Spath, 14, aL, aR +endop + + +/* + Record a mono bus (or left channel of a stereo bus) to a wave file + + bus_record_mono Sbus, Spath + + Sbus bus name + Spath path to file to record to +*/ +opcode bus_record_mono, 0, SS + Sbus, Spath xin + asig bus_tap Sbus + fout Spath, 14, asig +endop + + + +/* + Main output: anything mixed to the "main" bus goes to main outputs +*/ +#ifdef BUS_MAINMIXER +instr _mainmixer + aL, aR bus_read "main" + aL = aL * gkmastervolume + aR = aR * gkmastervolume + outs aL, aR +endin +schedule("_mainmixer", 0, -1) +#end + +#end -- cgit v1.2.3