76 lines
2.0 KiB
Python
76 lines
2.0 KiB
Python
import sys
|
|
|
|
import torchaudio.functional as F
|
|
|
|
from .node_def import BASE_NODE_CATEGORY, AudioData
|
|
|
|
NODE_CATEGORY = BASE_NODE_CATEGORY + "/filter"
|
|
|
|
|
|
class HighpassBiquad:
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"audio": ("AUDIO",),
|
|
"cutoff_freq": (
|
|
"FLOAT",
|
|
{"default": 0, "min": 0, "max": sys.float_info.max},
|
|
),
|
|
"Q": (
|
|
"FLOAT",
|
|
{"default": 0.707, "min": 0, "max": sys.float_info.max},
|
|
),
|
|
},
|
|
}
|
|
|
|
CATEGORY = NODE_CATEGORY
|
|
|
|
RETURN_TYPES = ("AUDIO",)
|
|
RETURN_NAMES = ("audio",)
|
|
FUNCTION = "highpass_biquad"
|
|
|
|
def highpass_biquad(self, audio: AudioData, cutoff_freq: float, Q: float):
|
|
waveform = F.highpass_biquad(
|
|
audio["waveform"], audio["sample_rate"], cutoff_freq, Q
|
|
)
|
|
new_audio = {"waveform": waveform, "sample_rate": audio["sample_rate"]}
|
|
return (new_audio,)
|
|
|
|
|
|
class LowpassBiquad:
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"audio": ("AUDIO",),
|
|
"cutoff_freq": (
|
|
"FLOAT",
|
|
{"default": 0, "min": 0, "max": sys.float_info.max},
|
|
),
|
|
"Q": ("FLOAT", {"default": 0.707, "min": 0, "max": sys.float_info.max}),
|
|
},
|
|
}
|
|
|
|
CATEGORY = NODE_CATEGORY
|
|
|
|
RETURN_TYPES = ("AUDIO",)
|
|
RETURN_NAMES = ("audio",)
|
|
FUNCTION = "lowpass_biquad"
|
|
|
|
def lowpass_biquad(self, audio: AudioData, cutoff_freq: float, Q: float):
|
|
waveform = F.lowpass_biquad(audio["waveform"], audio["sample_rate"], cutoff_freq, Q)
|
|
new_audio = {"waveform": waveform, "sample_rate": audio["sample_rate"]}
|
|
return (new_audio,)
|
|
|
|
|
|
NODE_CLASS_MAPPINGS = {
|
|
"SDT_HighpassBiquad": HighpassBiquad,
|
|
"SDT_LowpassBiquad": LowpassBiquad,
|
|
}
|
|
|
|
NODE_DISPLAY_NAME_MAPPINGS = {
|
|
"SDT_HighpassBiquad": "Highpass Biquad",
|
|
"SDT_LowpassBiquad": "Lowpass Biquad",
|
|
}
|