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,30 +245,15 @@ class SpeechHandler:
"""Thread to handle speech processing"""
startSpeech = False # Don't start speaking until after initial output
while True:
try:
# Read directly from stdout, no need for buffer attribute
for line in process.stdout:
try:
# Try multiple encodings in order
encodings = ['utf-8', 'gbk', 'big5', 'latin1']
lineStr = None
line = process.stdout.readline()
# Keep gzdoom's existing functionality of lines being printed to the console.
print(line, end='')
if not line:
break
for encoding in encodings:
try:
if isinstance(line, bytes):
lineStr = line.decode(encoding).strip()
else:
lineStr = line.strip()
break # Successfully decoded
except UnicodeDecodeError:
continue
if lineStr is None:
print(f"Failed to decode line with any encoding", file=sys.stderr)
continue
# Keep gzdoom's existing functionality of lines being printed to the console
print(lineStr)
# Wait for the initial separator before starting speech
if not startSpeech:
@ -278,17 +263,11 @@ class SpeechHandler:
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)
print(f"Error processing game output: {e}", file=sys.stderr)
break
class MenuDialog(QDialog):