fix(audio): improve compatibility with third-party extensions (LazyAudioMap support)
This commit is contained in:
+30
-5
@@ -181,11 +181,36 @@ class AIIA_E2E_Speaker_Diarization:
|
||||
if not model_path:
|
||||
return (self._assign_speakers_to_chunks(whisper_chunks, [{"start":0, "end":0, "speaker":f"error_model_not_found_{backend_model}"}]),)
|
||||
|
||||
if audio is None or not isinstance(audio, dict) or \
|
||||
"waveform" not in audio or not isinstance(audio["waveform"], torch.Tensor) or \
|
||||
"sample_rate" not in audio or not isinstance(audio["sample_rate"], int) or \
|
||||
audio["waveform"].ndim < 1:
|
||||
print("错误: [AIIA E2E Diarization] 音频数据缺失、格式不正确或无效。")
|
||||
if audio is None:
|
||||
print("错误: [AIIA E2E Diarization] 音频数据为 None")
|
||||
return (self._assign_speakers_to_chunks(whisper_chunks, [{"start":0, "end":0, "speaker":"error_no_audio"}]),)
|
||||
|
||||
# Handle cases where audio might be passed as a single-item list
|
||||
if isinstance(audio, list) and len(audio) > 0:
|
||||
audio = audio[0]
|
||||
|
||||
# Try to treat as a dictionary or object with waveform/sample_rate
|
||||
try:
|
||||
waveform = audio["waveform"]
|
||||
sample_rate = audio["sample_rate"]
|
||||
except (KeyError, TypeError):
|
||||
try:
|
||||
waveform = getattr(audio, "waveform", None)
|
||||
sample_rate = getattr(audio, "sample_rate", None)
|
||||
except:
|
||||
waveform, sample_rate = None, None
|
||||
|
||||
if waveform is None or sample_rate is None:
|
||||
print(f"错误: [AIIA E2E Diarization] 音频数据格式错误: 无法获取 waveform 或 sample_rate (输入类型: {type(audio)})")
|
||||
return (self._assign_speakers_to_chunks(whisper_chunks, [{"start":0, "end":0, "speaker":"error_no_audio"}]),)
|
||||
|
||||
# Ensure waveform is a tensor and sample_rate is a number
|
||||
if not isinstance(waveform, torch.Tensor) or not isinstance(sample_rate, (int, float)):
|
||||
print(f"错误: [AIIA E2E Diarization] 音频数据类型错误: waveform={type(waveform)}, sample_rate={type(sample_rate)}")
|
||||
return (self._assign_speakers_to_chunks(whisper_chunks, [{"start":0, "end":0, "speaker":"error_no_audio"}]),)
|
||||
|
||||
if waveform.ndim < 1:
|
||||
print("错误: [AIIA E2E Diarization] 音频波形维度不足")
|
||||
return (self._assign_speakers_to_chunks(whisper_chunks, [{"start":0, "end":0, "speaker":"error_no_audio"}]),)
|
||||
|
||||
if not isinstance(whisper_chunks, dict) or not isinstance(whisper_chunks.get("chunks"), list) :
|
||||
|
||||
@@ -172,11 +172,19 @@ class AIIA_GenerateSpeakerSegments:
|
||||
if isinstance(audio, list) and len(audio) > 0:
|
||||
audio = audio[0]
|
||||
|
||||
if not isinstance(audio, dict) or "waveform" not in audio or "sample_rate" not in audio:
|
||||
return self._create_error_output(f"音频格式不匹配 (预期为 dict, 实际为 {type(audio)})")
|
||||
# Try to treat as a dictionary or object with waveform/sample_rate
|
||||
try:
|
||||
waveform = audio["waveform"]
|
||||
sample_rate = audio["sample_rate"]
|
||||
except (KeyError, TypeError):
|
||||
try:
|
||||
waveform = getattr(audio, "waveform", None)
|
||||
sample_rate = getattr(audio, "sample_rate", None)
|
||||
except:
|
||||
waveform, sample_rate = None, None
|
||||
|
||||
waveform = audio["waveform"]
|
||||
sample_rate = audio["sample_rate"]
|
||||
if waveform is None or sample_rate is None:
|
||||
return self._create_error_output(f"音频数据格式错误: 无法获取 waveform 或 sample_rate (输入类型: {type(audio)})")
|
||||
|
||||
# Ensure waveform is a tensor and sample_rate is a number
|
||||
if not isinstance(waveform, torch.Tensor) or not isinstance(sample_rate, (int, float)):
|
||||
|
||||
Reference in New Issue
Block a user