diff --git a/VoiceGenerator/.gitattributes b/VoiceGenerator/.gitattributes new file mode 100644 index 0000000..15d1866 --- /dev/null +++ b/VoiceGenerator/.gitattributes @@ -0,0 +1 @@ +voices/** filter=lfs diff=lfs merge=lfs -text \ No newline at end of file diff --git a/VoiceGenerator/.gitignore b/VoiceGenerator/.gitignore new file mode 100644 index 0000000..dfd1acd --- /dev/null +++ b/VoiceGenerator/.gitignore @@ -0,0 +1,6 @@ +* +!.gitignore +!.gitattributes +!GenerateDialogue.py +!install.ps1 +!voices/ \ No newline at end of file diff --git a/VoiceGenerator/GenerateDialogue.py b/VoiceGenerator/GenerateDialogue.py new file mode 100644 index 0000000..2aa3117 --- /dev/null +++ b/VoiceGenerator/GenerateDialogue.py @@ -0,0 +1,12 @@ +import torch +from TTS.api import TTS + +# Get device +device = "cuda" if torch.cuda.is_available() else "cpu" +tts = TTS("tts_models/multilingual/multi-dataset/bark").to(device) + +tts.tts_to_file(text="Greetings Martin. This is a synthesized speech for future dialogues. \ + As you can see [cough] I mean hear... Yes, hear with your own ears, the speech trained from 2min audio is indeed impressive.", + voice_dir="..\\voices\\", + speaker="Mortis", + file_path=".\\output\\Mortis.wav") \ No newline at end of file diff --git a/VoiceGenerator/install.ps1 b/VoiceGenerator/install.ps1 new file mode 100644 index 0000000..37e7d07 --- /dev/null +++ b/VoiceGenerator/install.ps1 @@ -0,0 +1,107 @@ +$pythonVersion = "3.11.9" +$pythonInstallerUrl = "https://www.python.org/ftp/python/$pythonVersion/python-$pythonVersion-amd64.exe" +$pythonInstallerPath = "$env:TEMP\python-$pythonVersion-amd64.exe" +$pyActivate = Join-Path . "Scripts\Activate.ps1" + +$espeakngVersion = "1.51" +$espeakngInstallerUrl = "https://github.com/espeak-ng/espeak-ng/releases/download/$espeakngVersion/espeak-ng-X64.msi" +$espeakngInstallerPath = "$env:TEMP\espeak-ng-X64.msi" + +$msBuildToolsVersion = "17" +$msBuildToolsInstallerUrl = "https://aka.ms/vs/$msBuildToolsVersion/release/vs_BuildTools.exe" +$msBuildToolsInstallerPath = "$env:TEMP\vs_BuildTools$msBuildToolsVersion.exe" + +$cudaToolkitVersion = "12.4.1_551.78" +$cudaToolkitInstallerUrl = "https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_$cudaToolkitVersion_windows.exe" +$cudaToolkitInstallerPath = "$env:TEMP\cudaToolkit_$cudaToolkitVersion.exe" + +$pytorchVersion = "CUDA 12.4" +$pytorchInstallCommand = "pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124" + +$coquiVersion = "0.25.1" +$coquiZipUrl = "https://github.com/idiap/coqui-ai-TTS/archive/refs/tags/v$coquiVersion.zip" +$coquiZipPath = "$env:TEMP\coqui_v$coquiVersion.zip" + +function Is-PythonInstalled { + try { + $pythonVersionOutput = python --version 2>&1 + if ($pythonVersionOutput -match "Python ($pythonVersion)") { + Write-Output "Python $($matches[1]) is already installed." + return $true + } else { + return $false + } + } catch { + return $false + } +} + +function Install-Python { + Write-Output "Installing Python $pythonVersion..." + Invoke-WebRequest -Uri $pythonInstallerUrl -OutFile $pythonInstallerPath + Start-Process -FilePath $pythonInstallerPath -ArgumentList "/quiet InstallAllUsers=1 PrependPath=1" -Wait + Remove-Item $pythonInstallerPath -Force +} + +function Setup-Python-Environment { + python -m venv . + & $pyActivate + pip install --upgrade pip setuptools wheel + deactivate +} + +function Install-Espeakng { + Write-Output "Installing eSpeak-ng $espeakngVersion..." + Invoke-WebRequest -Uri $espeakngInstallerUrl -OutFile $espeakngInstallerPath + Start-Process -FilePath "msiexec.exe" -ArgumentList "/i `"$espeakngInstallerPath`" /quiet" + Remove-Item $espeakngInstallerPath -Force +} + +function Install-MsBuildTools { + Write-Output "Installing MS Build Tools $msBuildToolsVersion..." + Invoke-WebRequest -Uri $msBuildToolsInstallerUrl -OutFile $msBuildToolsInstallerPath + Start-Process -FilePath $msBuildToolsInstallerPath -ArgumentList ` + "--quiet --wait --norestart --add Microsoft.VisualStudio.Workload.NativeDesktop" -Wait + Remove-Item $msBuildToolsInstallerPath -Force +} + +function Install-CUDA { + Write-Output "Installing CUDA Toolkit $cudaToolkitVersion..." + Invoke-WebRequest -Uri $cudaToolkitInstallerUrl -OutFile $cudaToolkitInstallerPath + Start-Process -FilePath $cudaToolkitInstallerPath -ArgumentList "--silent --toolkit" -Wait + Remove-Item $cudaToolkitInstallerPath -Force +} + +function Install-PyTorch { + Write-Output "Installing PyTorch $pytorchVersion..." + & $pyActivate + Invoke-Expression $pytorchInstallCommand + deactivate +} + +function Install-Coqui { + Write-Output "Installing Coqui $coquiVersion..." + Invoke-WebRequest -Uri $coquiZipUrl -OutFile $coquiZipPath + Expand-Archive -Path $coquiZipPath -DestinationPath . -Force + Remove-Item $coquiZipPath -Force + + & $pyActivate + cd coqui-ai-TTS-$coquiVersion + pip install -e . + deactivate +} + + + +Write-Output "Starting voice environment installation." +if (-not (Is-PythonInstalled)) { + Install-Python +} +Setup-Python-Environment +Install-Espeakng +Install-MsBuildTools +Install-CUDA +Install-PyTorch +Install-Coqui +Write-Output "Setup finished." +Write-Output "To generate dialogue type:\n 1] Scripts\Activate.ps1\n 2] python GenerateDialogue.py."