use torch audio

This commit is contained in:
bennykok 2025-02-07 23:14:16 +08:00
parent 3d6a554f7f
commit 4073a43d3d

View File

@ -1,96 +1,57 @@
import os import os
import io
import torchaudio
from folder_paths import get_annotated_filepath
def get_vhs_load_audio(): class ComfyUIDeployExternalAudio:
try: RETURN_TYPES = ("AUDIO",)
vhs_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'ComfyUI-VideoHelperSuite')) RETURN_NAMES = ("audio",)
print(vhs_path) FUNCTION = "load_audio"
# Add the VHS directory to sys.path temporarily
import sys @classmethod
sys.path.insert(0, vhs_path) def INPUT_TYPES(cls):
return {
# Import the module using the package path "required": {
from videohelpersuite.nodes import LoadAudio "input_id": (
"STRING",
# Remove the temporary path {"multiline": False, "default": "input_audio"},
sys.path.pop(0) ),
"audio_file": ("STRING", {"default": ""}),
print("LoadAudio from VHS: ", LoadAudio) },
"optional": {
return LoadAudio "default_value": ("AUDIO",),
except Exception as e: "display_name": (
print(f"Failed to load VideoHelperSuite LoadAudio: {str(e)}") "STRING",
return None {"multiline": False, "default": ""},
),
VHSLoadAudio = get_vhs_load_audio() "description": (
if VHSLoadAudio: "STRING",
class ComfyUIDeployExternalAudio(VHSLoadAudio): {"multiline": False, "default": ""},
RETURN_TYPES = ("AUDIO",) ),
# RETURN_NAMES = ("audio",)
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"input_id": (
"STRING",
{"multiline": False, "default": "input_audio"},
),
"audio_file": ("STRING", {"default": ""}),
},
"optional": {
"default_value": ("AUDIO",),
"display_name": (
"STRING",
{"multiline": False, "default": ""},
),
"description": (
"STRING",
{"multiline": False, "default": ""},
),
}
} }
}
@classmethod
def VALIDATE_INPUTS(s, audio_file, **kwargs): @classmethod
return True def VALIDATE_INPUTS(s, audio_file, **kwargs):
return True
def load_audio(self, input_id, audio_file, default_value=None, display_name=None, description=None): def load_audio(self, input_id, audio_file, default_value=None, display_name=None, description=None):
# Use audio_file for loading audio, ignoring input_id for actual loading if audio_file and audio_file != "":
# , start_time=0.0, duration=0.0 if audio_file.startswith(('http://', 'https://')):
if audio_file and audio_file != "": # Handle URL input
return super().load_audio(audio_file, seek_seconds=0.0) import requests
response = requests.get(audio_file)
audio_data = io.BytesIO(response.content)
waveform, sample_rate = torchaudio.load(audio_data)
else: else:
return (default_value, ) # Handle local file
else: audio_path = get_annotated_filepath(audio_file)
class ComfyUIDeployExternalAudio: waveform, sample_rate = torchaudio.load(audio_path)
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"input_id": (
"STRING",
{"multiline": False, "default": "input_audio"},
),
},
"optional": {
"default_value": ("AUDIO",),
"display_name": (
"STRING",
{"multiline": False, "default": ""},
),
"description": (
"STRING",
{"multiline": False, "default": ""},
),
}
}
RETURN_TYPES = ("AUDIO",)
RETURN_NAMES = ("audio",)
FUNCTION = "load_audio"
def load_audio(self, input_id, default_value=None, display_name=None, description=None): audio = {"waveform": waveform.unsqueeze(0), "sample_rate": sample_rate}
raise NotImplementedError("VideoHelperSuite is required for audio loading functionality") return (audio,)
else:
return (default_value,)
NODE_CLASS_MAPPINGS = {"ComfyUIDeployExternalAudio": ComfyUIDeployExternalAudio} NODE_CLASS_MAPPINGS = {"ComfyUIDeployExternalAudio": ComfyUIDeployExternalAudio}
NODE_DISPLAY_NAME_MAPPINGS = {"ComfyUIDeployExternalAudio": "External Audio (ComfyUI Deploy)"} NODE_DISPLAY_NAME_MAPPINGS = {"ComfyUIDeployExternalAudio": "External Audio (ComfyUI Deploy)"}