fix: SenseVoice+spk_model crash and torchaudio>=2.11 compatibility

1. auto_model.py: When ASR model (e.g. SenseVoice) doesn't produce
   timestamps, automatically fall back to vad_segment mode for speaker
   diarization instead of crashing. Fixes #2945.

2. load_utils.py: Add soundfile as fallback when torchaudio.load fails
   (torchaudio>=2.11 requires torchcodec). Falls through to ffmpeg only
   if soundfile also fails.
This commit is contained in:
游雁
2026-05-30 02:27:59 +08:00
parent 0d824c10e2
commit 80f3f2a4e9
2 changed files with 14 additions and 4 deletions
+3
View File
@@ -819,6 +819,9 @@ class AutoModel:
)
# del result['spk_embedding']
sv_output = postprocess(all_segments, None, labels, spk_embedding.cpu())
if self.spk_mode == "punc_segment" and "timestamp" not in result and "timestamps" not in result:
logging.warning("No timestamps in ASR result (e.g. SenseVoice), falling back to vad_segment mode for speaker diarization.")
self.spk_mode = "vad_segment"
if self.spk_mode == "vad_segment": # recover sentence_list
sentence_list = []
for rest, vadsegment in zip(restored_data, vadsegments):
+11 -4
View File
@@ -113,10 +113,17 @@ def load_audio_text_image_video(
if kwargs.get("reduce_channels", True):
data_or_path_or_list = data_or_path_or_list.mean(0)
except:
data_or_path_or_list = _load_audio_ffmpeg(data_or_path_or_list, sr=fs)
data_or_path_or_list = torch.from_numpy(
data_or_path_or_list
).squeeze() # [n_samples,]
try:
import soundfile as sf
data_np, audio_fs = sf.read(data_or_path_or_list, dtype="float32")
data_or_path_or_list = torch.from_numpy(data_np).squeeze()
if data_or_path_or_list.ndim > 1 and kwargs.get("reduce_channels", True):
data_or_path_or_list = data_or_path_or_list.mean(-1)
except:
data_or_path_or_list = _load_audio_ffmpeg(data_or_path_or_list, sr=fs)
data_or_path_or_list = torch.from_numpy(
data_or_path_or_list
).squeeze() # [n_samples,]
elif data_type == "text" and tokenizer is not None:
with open(data_or_path_or_list, "r") as f:
data_or_path_or_list = tokenizer.encode(f.read().strip())