You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用ElevenLabs TTS后playsound报UnicodeDecodeError问题求助

解决Playsound播放音频时的UnicodeDecodeError错误

环境信息

  • Python版本:3.9.13
  • Playsound版本:1.2.2
  • 操作系统:Windows 11

问题代码

import requests
import random
from playsound import playsound
import os
from colorama import Fore,init
init(autoreset=True)
import json
from datetime import datetime
import time

def speak(txt):
    
    nows = datetime.now()
    
    with open("Library_9500.json", "r", encoding="utf-8") as f:
        data = json.load(f)

    CHUNK_SIZE = 1024
    url = "https://api.elevenlabs.io/v1/text-to-speech/{}".format(data["tts_voice"])

    headers = {
    "Accept": "audio/mpeg",
    "Content-Type": "application/json",
    "xi-api-key": "{}".format(data["tts_api"])
    }

    data = {
    "text": "{}".format(txt),
    "model_id": "eleven_multilingual_v2",
    "voice_settings": {
        "stability": 0.5,
        "similarity_boost": 0.5
        }
    }

    response = requests.post(url, json=data, headers=headers)
    rand = random.randint(0, 10000)
    file_name = "audio_" + str(rand) + ".mp3"

    with open(file_name, 'wb') as f:
        for chunk in response.iter_content(chunk_size=CHUNK_SIZE):
            if chunk:
                f.write(chunk)
                
    time.sleep(1)
    print(Fore.GREEN+"SB-9500: " + Fore.WHITE + "{}".format(txt))
    logs4 = open("SystemLog.txt", "a", encoding="utf-8")
    logs4.write("[{}] > SB-9500: {}\n\n".format(nows, txt))
    logs4.close()
    playsound(file_name)
    os.remove(file_name)
    
speak("Hello World!")

错误信息

SB-9500: Hello World!
Traceback (most recent call last):
  File "c:\Users\pc\OneDrive\Masaüstü\SB-9500\tts_api.py", line 63, in <module>
    speak("Hello World!")
  File "c:\Users\pc\OneDrive\Masaüstü\SB-9500\tts_api.py", line 60, in speak
    playsound(file_name)
  File "C:\Users\pc\AppData\Local\Programs\Python\Python39\lib\site-packages\playsound.py", line 35, in _playsoundWin
    winCommand('open "' + sound + '" alias', alias)
  File "C:\Users\pc\AppData\Local\Programs\Python\Python39\lib\site-packages\playsound.py", line 30, in winCommand
    '\n    ' + errorBuffer.value.decode())
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfe in position 6: invalid start byte

修复方案

这个错误是因为playsound 1.2.2版本在Windows系统下处理错误信息时,强制用utf-8解码包含非utf-8编码的字节导致的,以下是几种可行的修复方式:

方法1:修改playsound源码

找到Python安装目录下的playsound.py文件(示例路径:C:\Users\pc\AppData\Local\Programs\Python\Python39\lib\site-packages\playsound.py),定位到winCommand函数的错误抛出部分,将解码方式改为Windows系统默认的mbcs编码:
原代码:

raise PlaysoundException(exceptionMessage + '\n    ' + errorBuffer.value.decode())

修改为:

raise PlaysoundException(exceptionMessage + '\n    ' + errorBuffer.value.decode('mbcs'))

方法2:升级playsound到修复版本

playsound的后续版本已修复该编码问题,执行以下命令升级:

pip install --upgrade playsound

升级后重新运行代码即可。

方法3:替换为其他音频播放库

如果不想修改源码或升级,可改用pygame库替代playsound:

  1. 先安装pygame:
pip install pygame
  1. 替换代码中playsound(file_name)的部分为:
import pygame
pygame.mixer.init()
pygame.mixer.music.load(file_name)
pygame.mixer.music.play()
# 等待音频播放完成
while pygame.mixer.music.get_busy():
    time.sleep(0.1)
pygame.mixer.quit()

内容的提问来源于stack exchange,提问作者Salih Bastan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 03:42:19