Specifically set the encoding to UTF-8. Simplify speak_thread.

This commit is contained in:
Storm Dragon 2025-01-25 08:41:11 -05:00
parent db40032d3d
commit a0e539d3ce

View File

@ -245,50 +245,29 @@ class SpeechHandler:
"""Thread to handle speech processing""" """Thread to handle speech processing"""
startSpeech = False # Don't start speaking until after initial output startSpeech = False # Don't start speaking until after initial output
try: while True:
# Read directly from stdout, no need for buffer attribute try:
for line in process.stdout: line = process.stdout.readline()
try: # Keep gzdoom's existing functionality of lines being printed to the console.
# Try multiple encodings in order print(line, end='')
encodings = ['utf-8', 'gbk', 'big5', 'latin1'] if not line:
lineStr = None break
for encoding in encodings: lineStr = line.strip()
try:
if isinstance(line, bytes):
lineStr = line.decode(encoding).strip()
else:
lineStr = line.strip()
break # Successfully decoded
except UnicodeDecodeError:
continue
if lineStr is None: # Wait for the initial separator before starting speech
print(f"Failed to decode line with any encoding", file=sys.stderr) if not startSpeech:
continue if lineStr and all(c == '-' for c in lineStr):
startSpeech = True
continue
# Keep gzdoom's existing functionality of lines being printed to the console processedLine = self.process_line(lineStr)
print(lineStr) if processedLine:
self.speak(processedLine)
# Wait for the initial separator before starting speech except Exception as e:
if not startSpeech: print(f"Error processing game output: {e}", file=sys.stderr)
if lineStr and all(c == '-' for c in lineStr): break
startSpeech = True
continue
processedLine = self.process_line(lineStr)
if processedLine:
try:
self.speak(processedLine)
except Exception as e:
print(f"Error speaking line: {e}", file=sys.stderr)
except Exception as e:
print(f"Error processing line: {e}", file=sys.stderr)
continue # Skip this line and continue with the next
except Exception as e:
print(f"Error in speech thread: {e}", file=sys.stderr)
class MenuDialog(QDialog): class MenuDialog(QDialog):