├── TranslationsAtHome.tsf
├── TranslationsAtWork.tsf
├── Translator
├── Banner.jpg
├── Banner.psd
├── settings.png
├── Exclamation.png
├── libmp3lame.32.dll
├── libmp3lame.64.dll
├── speech-bubble.ico
├── speech-bubble.png
├── Translations
│ ├── Translations_cs-cz.csv
│ ├── Translations_de-de.csv
│ ├── Translations_en-cz.csv
│ ├── translations_sk-sk.csv
│ ├── TranslationsAtWork_cs-cz.csv
│ ├── TranslationsAtWork_pt-pt.csv
│ └── Translations_PT-PT.csv
├── App.xaml
├── ToDo.txt
├── Logger.cs
├── packages.config
├── PolygonWaveFormControl.xaml
├── App.xaml.cs
├── ScheduledTask.cs
├── Properties
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ ├── Settings.Installer.settings
│ ├── Settings.settings
│ ├── Settings.Debug.settings
│ ├── Settings.Portable.settings
│ ├── Resources.resx
│ ├── Settings.Installer.Designer.cs
│ └── Settings.Designer.cs
├── SplitButton.xaml.cs
├── SplitButton.xaml
├── app.manifest
├── ConfigWindow.xaml.cs
├── TTSProvider
│ ├── GoogleTTSProvider.cs
│ ├── BingTTSProvider.cs
│ ├── FromtextToSpeechTTSProvider.cs
│ ├── AmazonPollyProvider.cs
│ ├── MicrosoftTTSProvider.cs
│ └── TTSProvider.cs
├── AudioEditor.xaml
├── App.config
├── ConfigWindow.xaml
├── CustomCommands.cs
├── PortableSettingsProvider.cs
├── TTSAutomate.csproj
└── AudioEditor.xaml.cs
├── Setup TTSAutomate
└── Installer
│ └── setup.exe
├── .gitattributes
├── TTSAutomate.sln
├── README.md
└── .gitignore
/TranslationsAtHome.tsf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CaffeineAU/TTSAutomate/HEAD/TranslationsAtHome.tsf
--------------------------------------------------------------------------------
/TranslationsAtWork.tsf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CaffeineAU/TTSAutomate/HEAD/TranslationsAtWork.tsf
--------------------------------------------------------------------------------
/Translator/Banner.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CaffeineAU/TTSAutomate/HEAD/Translator/Banner.jpg
--------------------------------------------------------------------------------
/Translator/Banner.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CaffeineAU/TTSAutomate/HEAD/Translator/Banner.psd
--------------------------------------------------------------------------------
/Translator/settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CaffeineAU/TTSAutomate/HEAD/Translator/settings.png
--------------------------------------------------------------------------------
/Translator/Exclamation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CaffeineAU/TTSAutomate/HEAD/Translator/Exclamation.png
--------------------------------------------------------------------------------
/Translator/libmp3lame.32.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CaffeineAU/TTSAutomate/HEAD/Translator/libmp3lame.32.dll
--------------------------------------------------------------------------------
/Translator/libmp3lame.64.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CaffeineAU/TTSAutomate/HEAD/Translator/libmp3lame.64.dll
--------------------------------------------------------------------------------
/Translator/speech-bubble.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CaffeineAU/TTSAutomate/HEAD/Translator/speech-bubble.ico
--------------------------------------------------------------------------------
/Translator/speech-bubble.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CaffeineAU/TTSAutomate/HEAD/Translator/speech-bubble.png
--------------------------------------------------------------------------------
/Setup TTSAutomate/Installer/setup.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CaffeineAU/TTSAutomate/HEAD/Setup TTSAutomate/Installer/setup.exe
--------------------------------------------------------------------------------
/Translator/Translations/Translations_cs-cz.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CaffeineAU/TTSAutomate/HEAD/Translator/Translations/Translations_cs-cz.csv
--------------------------------------------------------------------------------
/Translator/Translations/Translations_de-de.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CaffeineAU/TTSAutomate/HEAD/Translator/Translations/Translations_de-de.csv
--------------------------------------------------------------------------------
/Translator/Translations/Translations_en-cz.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CaffeineAU/TTSAutomate/HEAD/Translator/Translations/Translations_en-cz.csv
--------------------------------------------------------------------------------
/Translator/Translations/translations_sk-sk.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CaffeineAU/TTSAutomate/HEAD/Translator/Translations/translations_sk-sk.csv
--------------------------------------------------------------------------------
/Translator/App.xaml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
4 | # Custom for Visual Studio
5 | *.cs diff=csharp
6 |
7 | # Standard to msysgit
8 | *.doc diff=astextplain
9 | *.DOC diff=astextplain
10 | *.docx diff=astextplain
11 | *.DOCX diff=astextplain
12 | *.dot diff=astextplain
13 | *.DOT diff=astextplain
14 | *.pdf diff=astextplain
15 | *.PDF diff=astextplain
16 | *.rtf diff=astextplain
17 | *.RTF diff=astextplain
18 |
--------------------------------------------------------------------------------
/Translator/ToDo.txt:
--------------------------------------------------------------------------------
1 | Add option dialog
2 | [*]Option: automatically re-open last psv file
3 | [*]Option: automatically set output directory
4 | [*]Option: remember language / provider selections
5 | [*]Option: automatically fill in folder name on new line, based on previous line
6 | [*]Option: choose whether to encode to wav
7 | [*]Option: choose sample rate / bits per sample
8 | [*]Option: choose ivona region eu-west-1 (EU, Dublin), us-east-1 (US East, N. Virginia), us-west-2 (US West, Oregon)
--------------------------------------------------------------------------------
/Translator/Logger.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Text;
6 |
7 | namespace TTSAutomate
8 | {
9 | public static class Logger
10 | {
11 | public static void Log(String message)
12 | {
13 | using (StreamWriter sw = new StreamWriter(File.OpenWrite("log.txt")))
14 | {
15 | sw.WriteLine(message);
16 | }
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Translator/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/Translator/PolygonWaveFormControl.xaml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/Translator/App.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Configuration;
4 | using System.Data;
5 | using System.Globalization;
6 | using System.Linq;
7 | using System.Threading;
8 | using System.Threading.Tasks;
9 | using System.Windows;
10 |
11 | namespace TTSAutomate
12 | {
13 | ///
14 | /// Interaction logic for App.xaml
15 | ///
16 | public partial class App : Application
17 | {
18 |
19 | public App()
20 | {
21 |
22 |
23 | if ((TTSAutomate.Properties.Settings.Default.SelectedCulture)!=null)
24 | {
25 | CultureInfo ci = TTSAutomate.Properties.Settings.Default.SelectedCulture;
26 | Thread.CurrentThread.CurrentCulture = ci;
27 | Thread.CurrentThread.CurrentUICulture = ci;
28 |
29 | }
30 | }
31 |
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/TTSAutomate.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 14
4 | VisualStudioVersion = 14.0.25420.1
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TTSAutomate", "Translator\TTSAutomate.csproj", "{C749DFE6-7B04-495F-B9D7-C451477FF639}"
7 | EndProject
8 | Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "Setup TTSAutomate", "Setup TTSAutomate\Setup TTSAutomate.vdproj", "{4941D3BD-09EC-4404-9F54-B0F12F0FCF39}"
9 | EndProject
10 | Global
11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
12 | Debug|Any CPU = Debug|Any CPU
13 | Installer|Any CPU = Installer|Any CPU
14 | Portable|Any CPU = Portable|Any CPU
15 | EndGlobalSection
16 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
17 | {C749DFE6-7B04-495F-B9D7-C451477FF639}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
18 | {C749DFE6-7B04-495F-B9D7-C451477FF639}.Debug|Any CPU.Build.0 = Debug|Any CPU
19 | {C749DFE6-7B04-495F-B9D7-C451477FF639}.Installer|Any CPU.ActiveCfg = Installer|Any CPU
20 | {C749DFE6-7B04-495F-B9D7-C451477FF639}.Installer|Any CPU.Build.0 = Installer|Any CPU
21 | {C749DFE6-7B04-495F-B9D7-C451477FF639}.Portable|Any CPU.ActiveCfg = Portable|Any CPU
22 | {C749DFE6-7B04-495F-B9D7-C451477FF639}.Portable|Any CPU.Build.0 = Portable|Any CPU
23 | {4941D3BD-09EC-4404-9F54-B0F12F0FCF39}.Debug|Any CPU.ActiveCfg = Debug
24 | {4941D3BD-09EC-4404-9F54-B0F12F0FCF39}.Installer|Any CPU.ActiveCfg = Installer
25 | {4941D3BD-09EC-4404-9F54-B0F12F0FCF39}.Installer|Any CPU.Build.0 = Installer
26 | {4941D3BD-09EC-4404-9F54-B0F12F0FCF39}.Portable|Any CPU.ActiveCfg = Portable
27 | EndGlobalSection
28 | GlobalSection(SolutionProperties) = preSolution
29 | HideSolutionNode = FALSE
30 | EndGlobalSection
31 | EndGlobal
32 |
--------------------------------------------------------------------------------
/Translator/ScheduledTask.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Concurrent;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 |
8 | namespace TTSAutomate
9 | {
10 | public class ScheduledTask
11 | {
12 | internal readonly Action Action;
13 | internal System.Timers.Timer Timer;
14 | internal EventHandler TaskComplete;
15 |
16 | public ScheduledTask(Action action, int timeoutMs)
17 | {
18 | Action = action;
19 | Timer = new System.Timers.Timer() { Interval = timeoutMs };
20 | Timer.Elapsed += TimerElapsed;
21 | }
22 |
23 | private void TimerElapsed(object sender, System.Timers.ElapsedEventArgs e)
24 | {
25 | Timer.Stop();
26 | Timer.Elapsed -= TimerElapsed;
27 | Timer = null;
28 |
29 | Action();
30 | TaskComplete(this, EventArgs.Empty);
31 | }
32 | }
33 |
34 | public class Scheduler
35 | {
36 | private readonly ConcurrentDictionary _scheduledTasks = new ConcurrentDictionary();
37 |
38 | public void Execute(Action action, int timeoutMs)
39 | {
40 | var task = new ScheduledTask(action, timeoutMs);
41 | task.TaskComplete += RemoveTask;
42 | _scheduledTasks.TryAdd(action, task);
43 | task.Timer.Start();
44 | }
45 |
46 | private void RemoveTask(object sender, EventArgs e)
47 | {
48 | var task = (ScheduledTask)sender;
49 | task.TaskComplete -= RemoveTask;
50 | ScheduledTask deleted;
51 | _scheduledTasks.TryRemove(task.Action, out deleted);
52 | }
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # TTSAutomate
2 |
3 | ## _Download the tool [here](http://www.ttsautomate.com)_
4 |
5 | A tool to generate Audio files from text strings in WAV and MP3 format, using various TTS engines as the source
6 |
7 | Now supports multiple languages (if there's a language you'd like supported, and you can assist with translation, please let me know):
8 |
9 | * Czech
10 | * English
11 | * French
12 | * German
13 | * Portuguese
14 | * Slovak
15 |
16 | # A quick usage guide:
17 |
18 | * Select Open Phrase File (Ctrl-O) to open an existing psv file, or enter new phrases directly into the blank lines
19 | * Select Output Directory (Ctrl-P) to choose where to save the audio files. The files will be saved under two directories under the selected folder; One for MP3, one for WAV, and under that each voice file will be saved with the Folder and Filenames specified
20 | * Add, or modify the folder, filename or phrases in the list of phrases below.
21 | * Select a TTS provider and voice using the drop down boxes.
22 | * Preview a line to hear how that voice will sound.
23 | * Select Go (Ctrl-G) to start the downloading process. As each file is downloaded, the preview button next to it changes to Play, which you can use to listen to the voice from within the tool. Select Stop (Ctrl-H) to stop the download process, or let it run to completion (the progress bar indicates overall progress)
24 | * If you want to modify any of the phrases, edit the phrase in the list, and preview again to hear the change. You will note that the Play button changes to Preview after you edit the line. You can select Go (Ctrl-G) again to have the tool download only those missing files.
25 | * If you have modified your phrases file, or created a new phrases file, you can save the file with the Save Phrases File (Ctrl-S) button, or save the file with a new name using the Save Phrases File As... (Ctrl-A) button.
26 | * You can move lines up and down, by selecting the lines (click on the row header and using the buttons.
27 | * You can add new rows above / below selected lines, or delete lines
28 | * Subfolders in the Folders column are supported, for example: if you specify _voice\user_, then the files will be generated in _