Files
dmarx-ComfyUI-AudioReactive/nodes/audio_operator_nodes.py
T

148 lines
2.8 KiB
Python

from .audio_utils import simple_signal_operations
from typing import Callable
CATEGORY = "AudioReactive/Operators"
class SimpleSignalOperation:
CATEGORY=CATEGORY
RETURN_TYPES=("SIGNAL",)
FUNCTION = "main"
_IS_RAW = True
#f: Callable = None # lazy abstract method
_f: str = ''
def f(self, *args, **kwargs):
return simple_signal_operations[self._f](*args, **kwargs)
@classmethod
def alias(cls):
return f"{cls._f.title()} (Audio Op)"
@classmethod
def INPUT_TYPES(cls):
outv = {
"required": {
"signal": ("SIGNAL",{}),
}
}
return outv
def main(self, signal, **kargs):
y, sr = signal.get("y"), signal.get("sr")
#y, sr = self.f(y, sr)
#return {"y":y, "sr":sr}
#signal = self.f(y, sr)
#signal = self.f(y=y, sr=sr)
try:
y = self.f(y=y, sr=sr)
except TypeError:
y = self.f(y, sr)
outv = {"y":y, "sr":sr, "is_raw":signal.get('is_raw')}
if not self._IS_RAW:
outv['is_raw']=False
return (signal,)
class OpNovelty(SimpleSignalOperation):
_f = 'novelty'
class OpPredominant_pulse(SimpleSignalOperation):
_f = 'predominant_pulse'
class OpBandpass(SimpleSignalOperation):
_f = 'bandpass'
class OpHarmonic(SimpleSignalOperation):
_f = 'harmonic'
class OpPercussive(SimpleSignalOperation):
_f = 'percussive'
class OpPow2(SimpleSignalOperation):
_f = 'pow2'
class OpStretch(SimpleSignalOperation):
_f = 'stretch'
class OpSqrt(SimpleSignalOperation):
_f = 'sqrt'
class OpSmoosh(SimpleSignalOperation):
_f = 'smoosh'
class OpPow(SimpleSignalOperation):
_f = 'pow'
class OpSmooth(SimpleSignalOperation):
_f = 'smooth'
class OpSustain(SimpleSignalOperation):
_f = 'sustain'
class OpNormalize(SimpleSignalOperation):
_f = 'normalize'
class OpAbs(SimpleSignalOperation):
_f = 'abs'
class OpThreshold(SimpleSignalOperation):
_f = 'threshold'
class OpClamp(SimpleSignalOperation):
_f = 'clamp'
class OpModulo(SimpleSignalOperation):
_f = 'modulo'
class OpQuantize(SimpleSignalOperation):
_f = 'quantize'
class OpRms(SimpleSignalOperation):
_f = 'rms'
NODE_CLASS_MAPPINGS = {
"OpNovelty":OpNovelty,
"OpPredominant_pulse":OpPredominant_pulse,
"OpBandpass":OpBandpass,
"OpHarmonic":OpHarmonic,
"OpPercussive":OpPercussive,
"OpPow2":OpPow2,
"OpStretch":OpStretch,
"OpSqrt":OpSqrt,
"OpSmoosh":OpSmoosh,
"OpPow":OpPow,
"OpSmooth":OpSmooth,
"OpSustain":OpSustain,
"OpNormalize":OpNormalize,
"OpAbs":OpAbs,
"OpThreshold":OpThreshold,
"OpClamp":OpClamp,
"OpModulo":OpModulo,
"OpQuantize":OpQuantize,
"OpRms":OpRms,
}
NODE_DISPLAY_NAME_MAPPINGS = {k:v.alias() for k,v in NODE_CLASS_MAPPINGS.items()}