elebumm / RedditVideoMakerBot

Create Reddit Videos with just✨ one command ✨
GNU General Public License v3.0
6.51k stars 1.83k forks source link

[Bug]: probably the aid value isn't correct, message: Couldn't load speech. Try again. #1858

Closed ManicMarrc closed 9 months ago

ManicMarrc commented 10 months ago

Describe the bug

I can't seem to get the tiktok voice working. All I get is probably the aid value isn't correct, message: Couldn't load speech. Try again.

I did set tiktok_sessionid so that can't be the problem. At least I don't think it is.

Here's the full error:

╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Sorry, something went wrong with this version! Try again, and feel free to report this issue at GitHub or the       │
│ Discord community.                                                                                                  │
│ Version: 3.2.1                                                                                                      │
│ Error: Code: 1, reason: probably the aid value isn't correct, message: Couldn't load speech. Try again.             │
│ Config: {'allow_nsfw': False, 'theme': 'light', 'times_to_run': 5, 'opacity': 0.9, 'storymode': False,              │
│ 'storymodemethod': 1, 'storymode_max_length': 1000, 'resolution_w': 1080, 'resolution_h': 1920, 'zoom': 2.0,        │
│ 'background': {'background_video': 'minecraft', 'background_audio': 'lofi', 'background_audio_volume': 0.15,        │
│ 'enable_extra_audio': False, 'background_thumbnail': False, 'background_thumbnail_font_family': 'arial',            │
│ 'background_thumbnail_font_size': 96, 'background_thumbnail_font_color': '255,255,255'}, 'tts': {'voice_choice':    │
│ 'tiktok', 'random_voice': False, 'elevenlabs_voice_name': 'Adam', 'elevenlabs_api_key': 'REDACTED',                 │
│ 'aws_polly_voice': 'Matthew', 'streamlabs_polly_voice': 'Matthew', 'tiktok_voice': 'en_us_001', 'tiktok_sessionid': │
│ 'REDACTED', 'python_voice': '1', 'py_voice_num': '2', 'silence_duration': 0.3, 'no_emojis': False}}                 │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
Traceback (most recent call last):
  File "D:\Downloads\mymods\projects\RedditVideoMakerBot\main.py", line 135, in <module>
    raise err
  File "D:\Downloads\mymods\projects\RedditVideoMakerBot\main.py", line 117, in <module>
    run_many(config["settings"]["times_to_run"])
  File "D:\Downloads\mymods\projects\RedditVideoMakerBot\main.py", line 70, in run_many
    main()
  File "D:\Downloads\mymods\projects\RedditVideoMakerBot\main.py", line 52, in main
    length, number_of_comments = save_text_to_mp3(reddit_object)
  File "D:\Downloads\mymods\projects\RedditVideoMakerBot\video_creation\voices.py", line 53, in save_text_to_mp3
    return text_to_mp3.run()
  File "D:\Downloads\mymods\projects\RedditVideoMakerBot\TTS\engine_wrapper.py", line 75, in run
    self.call_tts("title", process_text(self.reddit_object["thread_title"]))
  File "D:\Downloads\mymods\projects\RedditVideoMakerBot\TTS\engine_wrapper.py", line 152, in call_tts
    self.tts_module.run(
  File "D:\Downloads\mymods\projects\RedditVideoMakerBot\TTS\TikTok.py", line 111, in run
    raise TikTokTTSException(status_code, data["message"])
TTS.TikTok.TikTokTTSException: Code: 1, reason: probably the aid value isn't correct, message: Couldn't load speech. Try again.

Reproduction Steps

$ python main

Expected behavior

The tiktok voice to work

Screenshots

No response

System Information

Operating System : Windows 10 Python version : Python 3.10.2 App version / Branch : develop

Checklist

Additional Context

No response

romanrsr commented 10 months ago

+1

NathanLok7 commented 10 months ago

Any solution?

realzib commented 10 months ago

ive been trying to get help for 5 months they dont respond on anything

Datcomx2 commented 10 months ago

You can fix this by changing the default value for voice_choice, instead of "tiktok" try the other options like "streamlabspolly"

NathanLok7 commented 10 months ago

The bot worked for me, doing this video, step by step https://www.youtube.com/watch?v=JfIp3nMwqtU

github-actions[bot] commented 10 months ago

This issue is stale because it has been open 7 days with no activity. Remove stale label or comment, or this will be closed in 10 days.

handmodels commented 10 months ago

You can fix this by changing the default value for voice_choice, instead of "tiktok" try the other options like "streamlabspolly"

Thank you!

RedactedIV commented 10 months ago

Try replacing the code for Tiktok.py with this.

This new code was written by @joshholly only with line 6 being edited, since it was also causing an issue for me. This modified code seems to work no problems tho

# 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

__all__ = ["TikTok", "TikTokTTSException"]

disney_voices: Final[tuple] = (
    "en_us_ghostface",  # Ghost Face
    "en_us_chewbacca",  # Chewbacca
    "en_us_c3po",  # C3PO
    "en_us_stitch",  # Stitch
    "en_us_stormtrooper",  # Stormtrooper
    "en_us_rocket",  # Rocket
    "en_female_madam_leota",  # Madame Leota
    "en_male_ghosthost",  # Ghost Host
    "en_male_pirate",  # pirate
)

eng_voices: Final[tuple] = (
    "en_au_001",  # English AU - Female
    "en_au_002",  # English AU - Male
    "en_uk_001",  # English UK - Male 1
    "en_uk_003",  # English UK - Male 2
    "en_us_001",  # English US - Female (Int. 1)
    "en_us_002",  # English US - Female (Int. 2)
    "en_us_006",  # English US - Male 1
    "en_us_007",  # English US - Male 2
    "en_us_009",  # English US - Male 3
    "en_us_010",  # English US - Male 4
    "en_male_narration",  # Narrator
    "en_female_emotional",  # Peaceful
    "en_male_cody",  # Serious
)

non_eng_voices: Final[tuple] = (
    # Western European voices
    "fr_001",  # French - Male 1
    "fr_002",  # French - Male 2
    "de_001",  # German - Female
    "de_002",  # German - Male
    "es_002",  # Spanish - Male
    "it_male_m18",  # Italian - Male
    # South american voices
    "es_mx_002",  # Spanish MX - Male
    "br_001",  # Portuguese BR - Female 1
    "br_003",  # Portuguese BR - Female 2
    "br_004",  # Portuguese BR - Female 3
    "br_005",  # Portuguese BR - Male
    # asian voices
    "id_001",  # Indonesian - Female
    "jp_001",  # Japanese - Female 1
    "jp_003",  # Japanese - Female 2
    "jp_005",  # Japanese - Female 3
    "jp_006",  # Japanese - Male
    "kr_002",  # Korean - Male 1
    "kr_003",  # Korean - Female
    "kr_004",  # Korean - Male 2
)

vocals: Final[tuple] = (
    "en_female_f08_salut_damour",  # Alto
    "en_male_m03_lobby",  # Tenor
    "en_male_m03_sunshine_soon",  # Sunshine Soon
    "en_female_f08_warmy_breeze",  # Warmy Breeze
    "en_female_ht_f08_glorious",  # Glorious
    "en_male_sing_funny_it_goes_up",  # It Goes Up
    "en_male_m2_xhxs_m03_silly",  # Chipmunk
    "en_female_ht_f08_wonderful_world",  # Dramatic
)

class TikTok:
    """TikTok Text-to-Speech Wrapper"""

    def __init__(self):
        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']}",
        }

        self.URI_BASE = (
            "https://tiktok-tts.weilnet.workers.dev/api/generation"
        )
        self.max_chars = 200

        self._session = requests.Session()
        # set the headers to the session, so we don't have to do it for every request
        self._session.headers = headers

    def run(self, text: str, filepath: str, random_voice: bool = False):
        if random_voice:
            voice = self.random_voice()
        else:
            # if tiktok_voice is not set in the config file, then use a random voice
            voice = settings.config["settings"]["tts"].get("tiktok_voice", None)

        # 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["error"]

        # decode data from base64 to binary
        try:
            raw_voices = data["data"]
        except:
            print(
                "The TikTok TTS returned an invalid response. Please try again later, and report this bug."
            )
            raise TikTokTTSException(0, "Invalid response")
        decoded_voices = base64.b64decode(raw_voices)

        # write voices to specified filepath
        with open(filepath, "wb") as out:
            out.write(decoded_voices)

    def get_voices(self, text: str, voice: Optional[str] = None) -> dict:
        """If voice is not passed, the API will try to use the most fitting voice"""
        # sanitize text
        text = text.replace("+", "plus").replace("&", "and").replace("r/", "")

        # prepare url request
        params = {"text": text,"voice": voice}
        if voice is not None:
            params["voice"] = voice

        # send request
        try:
            response = self._session.post(self.URI_BASE, json=params)
        except ConnectionError:
            time.sleep(random.randrange(1, 7))
            response = self._session.post(self.URI_BASE, json=params)

        return response.json()

    @staticmethod
    def random_voice() -> str:
        return random.choice(eng_voices)

class TikTokTTSException(Exception):
    def __init__(self, status_code, message):
        self.status_code = status_code
        self.message = message
        super().__init__(self.message)

    def __str__(self):
        return f"Code: {self.status_code}, Message: {self.message}"
github-actions[bot] commented 9 months ago

This issue is stale because it has been open 7 days with no activity. Remove stale label or comment, or this will be closed in 10 days.

github-actions[bot] commented 9 months ago

Issue closed due to being stale. Please reopen if issue persists in latest version.