56 lines
1.9 KiB
Python
56 lines
1.9 KiB
Python
import sys,os
|
|
import torch, torchaudio
|
|
import hashlib
|
|
|
|
sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), "comfy"))
|
|
|
|
import folder_paths
|
|
|
|
class SignalProcessingLoadAudio():
|
|
supported_formats = ['wav','mp3','ogg','m4a','flac','mp4']
|
|
@classmethod
|
|
def INPUT_TYPES(s):
|
|
supported_extensions = tuple(f".{fmt.lower()}" for fmt in SignalProcessingLoadAudio.supported_formats)
|
|
|
|
input_dir = folder_paths.get_input_directory()
|
|
all_items = os.listdir(input_dir)
|
|
filtered_files = [
|
|
x for x in all_items
|
|
if x.lower().endswith(supported_extensions)
|
|
]
|
|
files = [os.path.join(input_dir,x) for x in filtered_files]
|
|
|
|
return {
|
|
"required": {"audio_file": (sorted(files), {"image_upload": True})},
|
|
"optional" : {"seek_seconds": ("FLOAT", {"default": 0, "min": 0})}
|
|
}
|
|
|
|
RETURN_TYPES = ("AUDIO","INT")
|
|
RETURN_NAMES = ("audio","sample_rate")
|
|
CATEGORY = "Signal Processing"
|
|
FUNCTION = "process"
|
|
|
|
def process(self, audio_file, seek_seconds):
|
|
|
|
audio_file_path = folder_paths.get_annotated_filepath(audio_file)
|
|
|
|
waveform, sample_rate = torchaudio.load(audio_file_path)
|
|
waveform = waveform.unsqueeze(0).contiguous()
|
|
|
|
print('SignalProcessingLoadAudio.waveform',waveform.shape)
|
|
return {'waveform': waveform, 'sample_rate': sample_rate} , sample_rate
|
|
|
|
@classmethod
|
|
def IS_CHANGED(s, audio_file, seek_seconds):
|
|
audio_file_path = folder_paths.get_annotated_filepath(audio_file)
|
|
m = hashlib.sha256()
|
|
with open(audio_file_path, 'rb') as f:
|
|
m.update(f.read())
|
|
return m.digest().hex()
|
|
|
|
@classmethod
|
|
def VALIDATE_INPUTS(s, audio_file, seek_seconds):
|
|
if not folder_paths.exists_annotated_filepath(audio_file):
|
|
return "Invalid image file: {}".format(audio_file)
|
|
|
|
return True |