Commit 4f04de43 authored by xuanweiace's avatar xuanweiace

fix bug

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