diff --git a/TTS/TikTok.py b/TTS/TikTok.py index 29542e2..284def4 100644 --- a/TTS/TikTok.py +++ b/TTS/TikTok.py @@ -1,9 +1,9 @@ # documentation for tiktok api: https://github.com/oscie57/tiktok-voice/wiki + import base64 import random import time from typing import Optional, Final - import requests from utils import settings @@ -34,7 +34,6 @@ eng_voices: Final[tuple] = ( "en_us_009", # English US - Male 3 "en_us_010", # English US - Male 4 "en_male_narration", # Narrator - "en_male_funny", # Funny "en_female_emotional", # Peaceful "en_male_cody", # Serious ) @@ -83,10 +82,12 @@ class TikTok: headers = { "User-Agent": "com.zhiliaoapp.musically/2022600030 (Linux; U; Android 7.1.2; es_ES; SM-G988N; " "Build/NRD90M;tt-ok/3.12.13.1)", - "Cookie": f"sessionid={settings.config['settings']['tts']['tiktok_sessionid']}", + #"Cookie": f"sessionid={settings.config['settings']['tts']['tiktok_sessionid']}", } - self.URI_BASE = "https://api16-normal-c-useast1a.tiktokv.com/media/api/text/speech/invoke/" + self.URI_BASE = ( + "https://tiktok-tts.weilnet.workers.dev/api/generation" + ) self.max_chars = 200 self._session = requests.Session() @@ -102,15 +103,12 @@ class TikTok: # get the audio from the TikTok API data = self.get_voices(voice=voice, text=text) - # check if there was an error in the request - status_code = data["status_code"] - if status_code != 0: - raise TikTokTTSException(status_code, data["message"]) + status_code = data["error"] # decode data from base64 to binary try: - raw_voices = data["data"]["v_str"] + raw_voices = data["data"] except: print( "The TikTok TTS returned an invalid response. Please try again later, and report this bug." @@ -128,17 +126,16 @@ class TikTok: text = text.replace("+", "plus").replace("&", "and").replace("r/", "") # prepare url request - params = {"req_text": text, "speaker_map_type": 0, "aid": 1233} - + params = {"text": text,"voice": voice} if voice is not None: - params["text_speaker"] = voice + params["voice"] = voice # send request try: - response = self._session.post(self.URI_BASE, params=params) + response = self._session.post(self.URI_BASE, json=params) except ConnectionError: time.sleep(random.randrange(1, 7)) - response = self._session.post(self.URI_BASE, params=params) + response = self._session.post(self.URI_BASE, json=params) return response.json() @@ -148,18 +145,10 @@ class TikTok: class TikTokTTSException(Exception): - def __init__(self, code: int, message: str): - self._code = code - self._message = message - - def __str__(self) -> str: - if self._code == 1: - return f"Code: {self._code}, reason: probably the aid value isn't correct, message: {self._message}" - - if self._code == 2: - return f"Code: {self._code}, reason: the text is too long, message: {self._message}" - - if self._code == 4: - return f"Code: {self._code}, reason: the speaker doesn't exist, message: {self._message}" + def __init__(self, status_code, message): + self.status_code = status_code + self.message = message + super().__init__(self.message) - return f"Code: {self._message}, reason: unknown, message: {self._message}" + def __str__(self): + return f"Code: {self.status_code}, Message: {self.message}" \ No newline at end of file diff --git a/utils/.config.template.toml b/utils/.config.template.toml index 0f6165e..09a20ee 100644 --- a/utils/.config.template.toml +++ b/utils/.config.template.toml @@ -52,7 +52,7 @@ elevenlabs_api_key = { optional = true, example = "21f13f91f54d741e2ae27d2ab1b99 aws_polly_voice = { optional = false, default = "Matthew", example = "Matthew", explanation = "The voice used for AWS Polly" } streamlabs_polly_voice = { optional = false, default = "Matthew", example = "Matthew", explanation = "The voice used for Streamlabs Polly" } tiktok_voice = { optional = true, default = "en_us_001", example = "en_us_006", explanation = "The voice used for TikTok TTS" } -tiktok_sessionid = { optional = true, example = "c76bcc3a7625abcc27b508c7db457ff1", explanation = "TikTok sessionid needed if you're using the TikTok TTS. Check documentation if you don't know how to obtain it." } +#tiktok_sessionid = { optional = true, example = "c76bcc3a7625abcc27b508c7db457ff1", explanation = "TikTok sessionid needed if you're using the TikTok TTS. Check documentation if you don't know how to obtain it." } python_voice = { optional = false, default = "1", example = "1", explanation = "The index of the system tts voices (can be downloaded externally, run ptt.py to find value, start from zero)" } py_voice_num = { optional = false, default = "2", example = "2", explanation = "The number of system voices (2 are pre-installed in Windows)" } silence_duration = { optional = true, example = "0.1", explanation = "Time in seconds between TTS comments", default = 0.3, type = "float" }