diff --git a/GPT_SoVITS/inference_webui.py b/GPT_SoVITS/inference_webui.py index 45916e36..96f4ea97 100644 --- a/GPT_SoVITS/inference_webui.py +++ b/GPT_SoVITS/inference_webui.py @@ -356,29 +356,60 @@ SoVITS_names,GPT_names = get_weights_names() #region 输出音频历史记录相关 output_history =[] -history_max_num = 12 +history_max_num = 20 + +def sync_output_history_to_checkbox_audio(): + checkbox_result = [] + audio_result = [] + for item in output_history: + label = item['label'] + if len(label)>15: + label=label[:15]+'...' + checkbox_result.append(gr.update(label=label,value=False)) + audio_result.append(gr.Audio.update(value=item['value'])) + for _ in range(len(audio_result),history_max_num): + checkbox_result.append(gr.Checkbox.update(label="",value=False)) + audio_result.append(gr.Audio.update(value = None)) + return [*checkbox_result,*audio_result] def add_to_history(audio,input_text): - result = [] - #TODO change to audio type - # if len(textbox_list_value) == history_max_num: - # output_history.pop() - # output_history.insert(0,text) - # for _ in range(history_max_num): - # result.append(gr.Textbox()) - # for index,value in enumerate(output_history): - # result[index]._constructor_args[0]['value'] =value + if(audio is None or audio[1] is not None): + if len(output_history) == history_max_num: + output_history.pop() + output_history.insert(0,{'value':audio,'label':input_text}) - return result + return [*sync_output_history_to_checkbox_audio()] + +def clear_history(): + global output_history + output_history = [] + checkbox_result = [] + audio_result = [] + for _ in range(history_max_num): + checkbox_result.append(gr.Checkbox.update(label="",value=False)) + audio_result.append(gr.Audio.update(value = None)) + return [*checkbox_result,*audio_result] def shown_audio_num_change(audio_num): - audio_numr = int(audio_num) - result = [] + audio_num = int(audio_num) + audio_result = [] + checkbox_result = [] for _ in range(audio_num): - result.append(gr.Audio(visible=True)) + audio_result.append(gr.Audio.update(visible=True)) + checkbox_result.append(gr.update(visible=True)) for _ in range(audio_num,history_max_num): - result.append(gr.Audio(visible=False)) - return result + audio_result.append(gr.Audio.update(visible=False)) + checkbox_result.append(gr.update(visible=False)) + return [*checkbox_result,*audio_result] + +def delete_selected_history(*selected_list): + global output_history + print(f"!!!!!!!!{selected_list}") + for i in reversed(range(len(output_history))): + if(selected_list[i]): + output_history.pop(i) + print(f"!!!!{output_history}") + return [*sync_output_history_to_checkbox_audio()] #endregion with gr.Blocks(title="GPT-SoVITS WebUI") as app: @@ -415,19 +446,26 @@ with gr.Blocks(title="GPT-SoVITS WebUI") as app: [output], ) history_audio = [] + history_checkbox = [] with gr.Accordion("生成历史"): - shown_audio_num = gr.Slider(0,12,8,step=1,interactive=True) - with gr.Group(): + with gr.Row(): + shown_audio_num = gr.Slider(1,20,history_max_num,step=1,interactive=True,label="记录显示数量") + add_history_button = gr.Button("添加当前音频记录",variant="primary") + delete_select_history_button = gr.Button("删除选择的记录") + clear_history_button = gr.Button("清空记录") + index=0 + while(index