Commit 4f04de43 authored by xuanweiace's avatar xuanweiace

fix bug

parent d87a7437
......@@ -2,6 +2,7 @@
class Content:
StartTimeColumn = 0
AsideColumnNumber = 2
SpeedColumnNumber = 3
ActivateColumns = [2,3]
# ColumnCount = 3
ObjectName = "all_tableWidget"
......@@ -10,6 +11,7 @@ class Content:
class Aside:
StartTimeColumn = 0
AsideColumnNumber = 3
SpeedColumnNumber = 4
ActivateColumns = [3,4]
ObjectName = "pb_tableWidget"
TimeFormatColumns = [0,1]
......
......@@ -305,7 +305,8 @@ def add_to_list(mainWindow: MainWindow, element_type: str, li: list):
st_time_sec, ed_time_sec, subtitle, suggest = li
st_time_sec, ed_time_sec = str(st_time_sec), str(ed_time_sec)
speed = '1.00(4字/秒)'
# 默认使用配置文件中的语速
speed = mainWindow.projectContext.speaker_speed
aside = ""
i = len(mainWindow.projectContext.all_elements)
if element_type == "字幕":
......
......@@ -139,6 +139,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.all_tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.pb_tableWidget.itemDoubleClicked.connect(self.writeHistory)
self.pb_tableWidget.itemChanged.connect(self.rewriteHistory)
self.pb_tableWidget.itemChanged.connect(self.generate_audio_slot)
self.pb_tableWidget.itemChanged.connect(self.write2ProjectFromAside)
self.zm_tableWidget.itemDoubleClicked.connect(self.change_video_time)
......@@ -508,8 +509,15 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.pb_tableWidget_idx = 0
self.zm_tableWidget_idx = 0
self.set_table_to_window()
def set_table_to_window(self, need_refresh_all = True):
self.projectContext.initial_ing = True
"""
把projectContext里的内容呈现在UI上。
只有在初始化工程时,need_refresh_all = True,此时才需要initial_ing置为true。
initial_ing为true时,不会生成音频,不会写入历史记录
"""
if need_refresh_all:
self.projectContext.initial_ing = True
header = self.projectContext.header
subtitle_list = self.projectContext.subtitle_list
aside_list = self.projectContext.aside_list
......@@ -547,9 +555,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.pb_tableWidget_idx = len(aside_list)
self.zm_tableWidget_idx = len(subtitle_list)
self.projectContext.initial_ing = False
if need_refresh_all:
self.projectContext.initial_ing = False
def setElememtToTable(self, table: QTableWidget, elem: Element, idx: int):
elem_list = elem.to_list()
......@@ -646,10 +653,21 @@ class MainWindow(QMainWindow, Ui_MainWindow):
#
# self.projectContext.history_push(row, text, text)
def rewriteHistory(self, item):
def generate_audio_slot(self, item):
"""
在set表格的时候(初始化),不会触发。只有双击修改的时候才会触发
"""
if self.projectContext.initial_ing == True:
return
if item is None:
print("WRONG!!!! item Is None")
return
row = item.row() # 获取行数
col = item.column() # 获取列数 注意是column而不是col
# 只有更新语速或者更新旁白,才需要重新生成音频
if col not in constant.Aside.ActivateColumns:
return
# 合成这一段语音
from speech_synthesis import speech_synthesis, Speaker, choose_speaker
print("self.projectContext.excel_path:", self.projectContext.excel_path)
......@@ -657,47 +675,46 @@ class MainWindow(QMainWindow, Ui_MainWindow):
print("self.pb_tableWidget.itemAt(item.row(), 0).text()", self.projectContext.aside_list[item.row()].st_time_sec)
wav_path = audio_dir + '/tmp/%.2f.wav' % float(self.projectContext.aside_list[item.row()].st_time_sec)
print("wav_path:", wav_path)
speed_info = self.projectContext.speaker_speed
# speed_info = self.projectContext.speaker_speed
# 使用私有 语速
speed_info = self.pb_tableWidget.item(int(row), constant.Aside.SpeedColumnNumber).text()
speaker_info = self.projectContext.speaker_info
speed = float(speed_info.split('(')[0])
speaker_name = speaker_info.split(",")[0]
speaker = self.projectContext.choose_speaker(speaker_name)
text = self.pb_tableWidget.item(int(row), constant.Aside.AsideColumnNumber).text()
t = RunThread(funcName=speech_synthesis,
args=(item.text(), wav_path, speaker, speed),
args=(text, wav_path, speaker, speed),
name="speech_synthesis")
t.setDaemon(True)
t.start()
def rewriteHistory(self, item):
if self.projectContext.initial_ing == True:
return
if item is None:
print("WRONG!!!! item Is None")
return
row = item.row() # 获取行数
col = item.column() # 获取列数 注意是column而不是col
text = item.text() # 获取内容
if self.can_write_history == False:
self.can_write_history = True
return
# print("re writeHistory")
if item is None:
print("WRONG!!!! item Is None")
if col != constant.Aside.AsideColumnNumber:
return
opt = self.projectContext.history_pop()
if opt == None: # 刚打开表格的时候,会触发这个槽函数,此时opt肯定是None
return
# 抛出一个可能的异常
if row != opt.row:
print("[rewriteHistory] Warning!!!row=",row,", old_row=", opt.row, ", [row != opt.row]=", row != opt.row)
else:
row = item.row() # 获取行数
col = item.column() # 获取列数 注意是column而不是col哦
text = item.text() # 获取内容
if col != constant.Aside.AsideColumnNumber:
return
opt = self.projectContext.history_pop()
if opt == None: # 刚打开表格的时候,会触发这个槽函数,此时opt肯定是None
return
# 抛出一个可能的异常
if row != opt.row:
print("[rewriteHistory] Warning!!!row=",row,", old_row=", opt.row, ", [row != opt.row]=", row != opt.row)
else:
self.projectContext.history_push(opt.row, opt.old_str, text)
self.projectContext.history_push(opt.row, opt.old_str, text)
# def rewriteHistoryFromContent(self, item):
# print("re rewriteHistoryFromContent")
......@@ -726,7 +743,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
def write2ProjectFromAside(self, item):
if self.projectContext.initial_ing == True:
return
print("write2ProjectFromAside")
if item is None:
print("WRONG!!!! item Is None")
return
......@@ -734,14 +750,20 @@ class MainWindow(QMainWindow, Ui_MainWindow):
row = item.row() # 获取行数
col = item.column() # 获取列数 注意是column而不是col哦
text = item.text() # 获取内容
if col != constant.Aside.AsideColumnNumber:
if col not in constant.Aside.ActivateColumns:
return
self.projectContext.refresh_aside(row, text)
# 更新【字幕旁白】这个tab里的字
# 更新【字幕旁白】这个tab里的字,如果是语速,那就更新语速这一列,如果是旁白,那就更新旁白这一列
start_time = self.pb_tableWidget.item(int(row), constant.Aside.StartTimeColumn).text()
start_time = utils.trans_to_seconds(start_time)
idx = self.projectContext.aside_subtitle_2contentId(Element(str(start_time),0,0,0,0))
self.all_tableWidget.setItem(int(idx), constant.Content.AsideColumnNumber, QTableWidgetItem(text))
if col == constant.Aside.AsideColumnNumber:
self.all_tableWidget.setItem(int(idx), constant.Content.AsideColumnNumber, QTableWidgetItem(text))
self.projectContext.refresh_aside(row, text)
elif col == constant.Aside.SpeedColumnNumber:
self.all_tableWidget.setItem(int(idx), constant.Content.SpeedColumnNumber, QTableWidgetItem(text))
self.projectContext.refresh_aside_speed(row, text)
# def write2ProjectFromContent(self, item):
# print("write2ProjectFromContent")
# if item is None:
......@@ -828,10 +850,10 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# 其实end_time目前是没啥用的,可以删掉了
if idx != len(self.projectContext.all_elements):
self.add_line_operation_slot(idx, str(cur_time), self.projectContext.all_elements[idx+1].st_time_sec,
"", "插入旁白,推荐字数为0", "")
"", "插入旁白,推荐字数为0", "",self.projectContext.speaker_speed)
else:
self.add_line_operation_slot(idx, str(cur_time), str(cur_time+1),
"", "插入旁白,推荐字数为0", "")
"", "插入旁白,推荐字数为0", "",self.projectContext.speaker_speed)
def calculate_element_row(self, cur_time):
idx = 0
......
......@@ -135,7 +135,7 @@ class ProjectContext:
self.excel_sheet_name = "旁白插入位置建议"
self.history_records = []
self.records_pos = 0
#是否处于初始化中
#是否处于初始化中:在set_table_to_window时为True,主要用来做undo和redo记录操作历史的时候用到该变量,值为False才进行undo等操作。
self.initial_ing = False
self.speakers = []
......@@ -166,6 +166,7 @@ class ProjectContext:
with open('./conf.ini', 'w', encoding='utf-8') as f:
f.writelines([self.speaker_info + '\n', self.speaker_speed])
def setVideoPath(self, video_path):
self.video_path = video_path
def setExcelPath(self, excel_path):
......@@ -194,6 +195,11 @@ class ProjectContext:
if not self.initial_ing:
save_excel_to_to_path(self.all_elements, self.excel_path, self.header, self.excel_sheet_name)
def refresh_aside_speed(self, row, speed: str)->None:
self.aside_list[int(row)].speed = speed
if not self.initial_ing:
save_excel_to_to_path(self.all_elements, self.excel_path, self.header, self.excel_sheet_name)
def refresh_element(self, row, aside: str):
self.all_elements[int(row)].aside = aside
if not self.initial_ing:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment