0 of 0

File information

Last updated

Original upload

Created by

ToxicDrake

Uploaded by

ToxicDrake

Virus scan

Some manually verified files

About this mod

Narrator now speak Russian (TTS)

Permissions and credits
CREDIT
Inspired by KasadaWolfduaSnk4211NolesterXiaokuii

DESCRIPTION

I don't know if it good or not so please post some comments (y)
Also I don't speak Russian



My game, my money, I do what I want
This mod let TTS (Text-to-speech) AI read Narrator's dialogue, which extracted by STT (Speech-to-text) program

Listen to compare: Samples
>>Male version<<
>>Girl version<<
>>Italian<<
>>French<<

The video using High accurary version

All my mods of Narrator's replacement will base on this from now on
This is a 72-hour transcribed product, it has been edited to sound as real as possible
Do enjoy, give your comments and maybe, a little donation for my time <3

INSTALLATION
Install with BG3ModManager (enable it, allow it) or manually, it's just a single .pak file

OTHER
STT's script ( Google Colaboratory ):

from google.colab import drive
drive.mount('/content/drive')
!pip install git+https://github.com/openai/whisper.git
!sudo apt update && sudo apt install ffmpeg

from google.colab import drive
drive.mount('/content/drive')
import os
import shutil
import time
import re

# Define the directory containing .wav files
audio_dir = "/content/drive/MyDrive/audios"

# Define the output directory in Google Drive
output_dir = "/content/drive/MyDrive/Narrator_Out_Large"

# Define the completed directory in Google Drive
completed_dir = "/content/drive/MyDrive/Completed/audios"

# Counter for processed files
counter = 0

# Get the total number of .wav files
total_files = len([name for name in os.listdir(audio_dir) if name.endswith(".wav")])

# Function to replace any existing file or folder
def replace_existing(path):
    if os.path.exists(path):
        if os.path.isfile(path):
            os.remove(path)
        else:
            shutil.rmtree(path)

# Create the output and completed directories if they don't exist
for dir in [output_dir, completed_dir]:
    if not os.path.exists(dir):
        os.makedirs(dir)

# Check if there are .txt files in the output directory that have similar names to any .wav files in the audio directory
for filename in os.listdir(output_dir):
    if filename.endswith(".txt"):
        wav_file = os.path.join(audio_dir, os.path.splitext(filename)[0] + ".wav")
        if os.path.exists(wav_file):
            shutil.move(wav_file, completed_dir)

# Check if there are .wav files in the completed directory that don't have similar names to any .txt files in the output directory
for filename in os.listdir(completed_dir):
    if filename.endswith(".wav"):
        txt_file = os.path.join(output_dir, os.path.splitext(filename)[0] + ".txt")
        if not os.path.exists(txt_file):
            shutil.move(os.path.join(completed_dir, filename), audio_dir)

# Iterate over all files in the directory
for filename in os.listdir(audio_dir):
    if filename.endswith(".wav"):
        # Full path to the .wav file
        wav_file = os.path.join(audio_dir, filename)

        # Attempt to transcribe the file up to 5 times
        for attempt in range(5):
            try:
                # Transcribe the .wav file
                !whisper "$wav_file" --model large

                # If transcription is successful, move the .txt file to Google Drive and print a number
                txt_file = "/content/" + os.path.splitext(filename)[0] + ".txt"

                # Open the transcribed text file and read its content
                with open(txt_file, 'r') as file:
                    data = file.read()

                # Replace multiple "." with a single "."
                data = re.sub('\.+', '.', data)

                # Replace newline characters with a space to ensure the transcribed text does not contain more than one line
                data = data.replace('\n', ' ')

                # Write the modified content back to the file
                with open(txt_file, 'w') as file:
                    file.write(data)

                # Replace any existing file or folder
                replace_existing(os.path.join(output_dir, os.path.basename(txt_file)))

                shutil.move(txt_file, output_dir)

                # Move the .wav file to the completed directory
                shutil.move(wav_file, completed_dir)

                # Print the counter for successful transcriptions along with the filename
                print(f"Successfully transcribed file number {counter + 1} - {filename}")
                print(f"Transcribed content: \n{data}")

                # If successful, break the loop and move on to the next file
                break

            except Exception as e:
                print(f"Failed attempt {attempt+1} for {filename}: {e}")

                # Wait for a bit before trying again
                time.sleep(5)

        # Increment the counter for processed files
        counter += 1

        # Print the progress percentage
        print(f"Progress: {round((counter / total_files) * 100, 2)}%")

print("[================ TRANSCRIPTION COMPLETED ================]")

      █ hire Me for any Voice request █