88 lines
2.5 KiB
Python
88 lines
2.5 KiB
Python
|
|
from clearvoice import ClearVoice
|
|
import os
|
|
import time
|
|
import soundfile as sf
|
|
import soxr
|
|
# 初始化语音分离模型
|
|
|
|
T1=time.time()
|
|
cv_ss = ClearVoice(
|
|
task='speech_separation',
|
|
model_names=['MossFormer2_SS_16K']
|
|
)
|
|
print("Model init Time used", time.time() - T1)
|
|
|
|
|
|
|
|
input_path = '/root/lisiyuan/Pyprojects/speech_separation/ComfyUI_temp_axihh_00005_.flac'
|
|
output_dir = 'output_separated'
|
|
output_wav_dict = cv_ss(input_path=input_path, online_write=False)
|
|
if isinstance(output_wav_dict, dict):
|
|
key = next(iter(output_wav_dict))
|
|
output_wav_list = output_wav_dict[key]
|
|
output_wav_s1 = output_wav_list[0]
|
|
output_wav_s2 = output_wav_list[1]
|
|
else:
|
|
output_wav_list = output_wav_dict
|
|
output_wav_s1 = output_wav_list[0]
|
|
output_wav_s2 = output_wav_list[1]
|
|
sf.write('separated_s1.wav', output_wav_s1[0,:], 16000)
|
|
sf.write('separated_s2.wav', output_wav_s2[0,:], 16000)
|
|
|
|
# os.makedirs(output_dir, exist_ok=True)
|
|
# # 分离语音并自动保存
|
|
# cv_ss(
|
|
# input_path=input_path,
|
|
# online_write=True,
|
|
# output_path=output_dir
|
|
# )
|
|
# print("infer Time used", time.time() - T1)
|
|
|
|
|
|
# T1=time.time()
|
|
# # 处理混合语音文件
|
|
# input_path = '《沈园外-阿YueYue 戾格 小田音乐社》.mp3'
|
|
# output_dir = 'output_separated'
|
|
# os.makedirs(output_dir, exist_ok=True)
|
|
# # 分离语音并自动保存
|
|
# cv_ss(
|
|
# input_path=input_path,
|
|
# online_write=True,
|
|
# output_path=output_dir
|
|
# )
|
|
# print("infer Time used", time.time() - T1)
|
|
|
|
# T1=time.time()
|
|
|
|
input_path = '/root/lisiyuan/Pyprojects/speech_separation/《沈园外-阿YueYue 戾格 小田音乐社》.mp3'
|
|
T1=time.time()
|
|
# 处理混合语音文件
|
|
resolution=16000 #resolution=8000
|
|
audio, sr = sf.read(input_path)
|
|
T1=time.time()
|
|
if sr != resolution:
|
|
print(f"Resampling audio from {sr} Hz to {resolution}Hz...")
|
|
# soxr 是最快的重采样库
|
|
# 如果是立体声,转换为单声道
|
|
if len(audio.shape) > 1:
|
|
print(f"Converting stereo to mono...")
|
|
audio = audio.mean(axis=1) # 取平均值转为单声道
|
|
audio = soxr.resample(audio, sr, resolution)
|
|
temp_file = 'temp_resampled_processed.wav'
|
|
sf.write(temp_file, audio, resolution)
|
|
input_path = temp_file
|
|
print(f"Resampling Done")
|
|
print("ResamplingTime used",time.time()-T1)
|
|
|
|
output_dir = 'output_separated'
|
|
os.makedirs(output_dir, exist_ok=True)
|
|
# 分离语音并自动保存
|
|
cv_ss(
|
|
input_path=input_path,
|
|
online_write=True,
|
|
output_path=output_dir
|
|
)
|
|
print("infer Time used", time.time() - T1)
|
|
|