├── 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 _\mp3\voice\user\_ and _\wav\voice\user\_ 29 | 30 | 31 | **You will need [Microsoft .Net 4.5.2](https://www.microsoft.com/en-au/download/details.aspx?id=42643) to run this tool** 32 | -------------------------------------------------------------------------------- /Translator/Translations/TranslationsAtWork_cs-cz.csv: -------------------------------------------------------------------------------- 1 | Id,Original string,Translation 2 | 1,Configure...,Konfigurace ... 3 | 2,Program options,možnosti programu 4 | 3,Program Language,Program Language 5 | 4,Re-open last PSV file,Znovu otevrít poslední PSV souboru 6 | 5,Set output directory to last output directory,Nastavit výstupní adresár na poslední výstupní adresár 7 | 6,Copy previous folder when inserting rows,Kopírovat predchozí složky pri vkládání rádku 8 | 7,Copy previous folder when selecting empty row,Kopírovat predchozí složky pri výberu prázdný rádek 9 | 8,Voice options,možnosti hlasové 10 | 9,Remember language settings,Zapamatovat nastavení jazyka 11 | 10,Encode MP3 to WAV,Enkódování MP3 do WAV 12 | 11,Sample Rate,Vzorkovací frekvence 13 | 12,Hz Bits per sample,Hz bitů na vzorek 14 | 13,TTS specific options,TTS specifické možnosti 15 | 14,Ivona Region,Ivona Kraj 16 | 15,Bing Header String,Bing Header String 17 | 16,Close,Zavrít 18 | 17,TTSAutomate,TTSAutomate 19 | 18,Phrase File,fráze File 20 | 19,Output Directory,výstup Directory 21 | 20,Open Phrase File...,Otevrená fráze soubor ... 22 | 21,Ctrl O,Ctrl O 23 | 22,Select Output Directory...,Vyberte výstupní adresár ... 24 | 23,Ctrl P,Ctrl P 25 | 24,Create new Phrase File,Vytvorit novou frázi soubor 26 | 25,Ctrl N,Ctrl N 27 | 26,TTS Provider,TTS Provider 28 | 27,Voice,hlas 29 | 28,Speech rate: {0},Rychlost reci: {0} 30 | 29,Speech rate:,Rychlost reci: 31 | 30,Volume: {0},Objem: {0} 32 | 31,"Volume: ",Hlasitost: 33 | 32,Alt PageUp,alt PageUp 34 | 33,Move {0} rows(s) up,Presun {0} rádku (y) nahoru 35 | 34,Alt PageDown,alt PageDown 36 | 35,Move {0} rows(s) down,Presun {0} rádku (y) dolu 37 | 36,Alt Insert,alt Insert 38 | 37,Insert {0} rows(s) above,Vložte {0} rádku (y) výše 39 | 38,Ctrl Alt Insert,Ctrl Alt Insert 40 | 39,Insert {0} rows(s) below,Vložte {0} rádku (a) dole 41 | 40,Play {0} voice(s),Hrát {0} hlas (y) 42 | 41,Alt P,alt P 43 | 42,Play All,Hrát vše 44 | 43,Alt A,alt 45 | 44,Pause,pauza 46 | 45,Alt U,alt U 47 | 46,Resume,Životopis 48 | 47,Alt I,alt I 49 | 48,Stop,Stop 50 | 49,Alt S,alt S 51 | 50,#StackPanel_5;,# StackPanel_5; 52 | 51,F12,F12 53 | 52,Settings...,Nastavení ... 54 | 53,Save Phrase File,Uložení fráze Soubor 55 | 54,Ctrl S,Ctrl S 56 | 55,Save Phrase File As...,Uložení vety soubor jako ... 57 | 56,Ctrl Alt S,Ctrl Alt S 58 | 57,Stop!,Stop! 59 | 58,Ctrl H,Ctrl H 60 | 59,Go!,Jít! 61 | 60,Ctrl G,Ctrl G 62 | 61,Setting takes effect on program restart,Nastavení se projeví po restartu programu 63 | -------------------------------------------------------------------------------- /Translator/Translations/TranslationsAtWork_pt-pt.csv: -------------------------------------------------------------------------------- 1 | Id,Original string,Translation 2 | 1,Configure...,Configurar ... 3 | 2,Program options,opções do programa 4 | 3,Program Language,programa de Idiomas 5 | 4,Re-open last PSV file,Re-aberto último arquivo PSV 6 | 5,Set output directory to last output directory,Definir diretório de saída para a última diretório de saída 7 | 6,Copy previous folder when inserting rows,Copie a pasta anterior 8 | 7,Copy previous folder when selecting empty row,Copie a pasta anterior ao selecionar linha vazia 9 | 8,Voice options,opções de voz 10 | 9,Remember language settings,Lembre-se de configurações de idioma 11 | 10,Encode MP3 to WAV,Encode MP3 para WAV 12 | 11,Sample Rate,Taxa de amostragem 13 | 12,Hz Bits per sample,Hz Bits por amostra 14 | 13,TTS specific options,opções específicas TTS 15 | 14,Ivona Region,Ivona Região 16 | 15,Bing Header String,Bing cabeçalho de Cordas 17 | 16,Close,Fechar 18 | 17,TTSAutomate,TTSAutomate 19 | 18,Phrase File,Arquivo frase 20 | 19,Output Directory,Diretório de saída 21 | 20,Open Phrase File...,Open File Frase ... 22 | 21,Ctrl O,Ctrl O 23 | 22,Select Output Directory...,Selecione Diretório de saída ... 24 | 23,Ctrl P,Ctrl P 25 | 24,Create new Phrase File,Criar novo Arquivo Frase 26 | 25,Ctrl N,Ctrl N 27 | 26,TTS Provider,Provedor de TTS 28 | 27,Voice,voz 29 | 28,Speech rate: {0},velocidade de fala: {0} 30 | 29,Speech rate:,velocidade de fala: 31 | 30,Volume: {0},Volume: {0} 32 | 31,"Volume: ",Volume: 33 | 32,Alt PageUp,Alt PageUp 34 | 33,Move {0} rows(s) up,Mover {0} linhas (s) até 35 | 34,Alt PageDown,Alt PageDown 36 | 35,Move {0} rows(s) down,Mover {0} linhas (s) para baixo 37 | 36,Alt Insert,Alt Insert 38 | 37,Insert {0} rows(s) above,Inserir {0} linhas (s) acima 39 | 38,Ctrl Alt Insert,Ctrl Alt Insert 40 | 39,Insert {0} rows(s) below,Inserir {0} linhas (s) abaixo 41 | 40,Play {0} voice(s),Jogar {0} de voz (s) 42 | 41,Alt P,Alt P 43 | 42,Play All,Jogar todos 44 | 43,Alt A,Alt A 45 | 44,Pause,Pausa 46 | 45,Alt U,Alt U 47 | 46,Resume,Currículo 48 | 47,Alt I,Alt I 49 | 48,Stop,Pare 50 | 49,Alt S,Alt S 51 | 50,#StackPanel_5;,# StackPanel_5; 52 | 51,F12,F12 53 | 52,Settings...,Configurações... 54 | 53,Save Phrase File,Salve Frase Arquivo 55 | 54,Ctrl S,Ctrl S 56 | 55,Save Phrase File As...,Salvar Arquivo Frases como ... 57 | 56,Ctrl Alt S,Ctrl Alt S 58 | 57,Stop!,Pare! 59 | 58,Ctrl H,Ctrl H 60 | 59,Go!,Ir! 61 | 60,Ctrl G,Ctrl G 62 | 61,Setting takes effect on program restart,Configuração tem efeito na reinicialização do programa 63 | -------------------------------------------------------------------------------- /Translator/Translations/Translations_PT-PT.csv: -------------------------------------------------------------------------------- 1 | Id,Original string,Translation 2 | 1,Configure...,Configurar... 3 | 2,Program options,Opções do Programa 4 | 3,Program Language,Linguagem do Programa 5 | 4,Re-open last PSV file,Abrir o último ficheiro PSV 6 | 5,Set output directory to last output directory,Utilizar a última directoria seleccionada 7 | 6,Copy previous folder when inserting rows,Copiar pasta anterior quando inserir novas linhas 8 | 7,Copy previous folder when selecting empty row,Copiar pasta anterior quando seleccionar uma linha vazia 9 | 8,Voice options,Opções de voz 10 | 9,Remember language settings,Lembrar configuração da linguagem 11 | 10,Encode MP3 to WAV,Converter de MP3 para WAV 12 | 11,Sample Rate,Taxa de amostragem 13 | 12,Hz Bits per sample,Hz Bits por amostra 14 | 13,TTS specific options,Opções específicas de TTS 15 | 14,Ivona Region,Região Ivona 16 | 15,Bing Header String,Bing Header String 17 | 16,Close,Fechar 18 | 17,TTSAutomate,TTSAutomate 19 | 18,Phrase File, Localização do ficheiro “PSV” 20 | 19,Output Directory,Localização dos ficheiros de audio 21 | 20,Open Phrase File...,Abrir Ficheiro “PSV” 22 | 21,Ctrl O,Ctrl O 23 | 22,Select Output Directory...,Seleccionar Pasta 24 | 23,Ctrl P,Ctrl P 25 | 24,Create new Phrase File,Criar Novo Ficheiro 26 | 25,Ctrl N,Ctrl N 27 | 26,TTS Provider,Origem do serviço TTS 28 | 27,Voice,Voz 29 | 28,Speech rate: {0},Velocidade da Fala: {0} 30 | 29,Speech rate:,Velocidade da Fala 31 | 30,Volume: {0},Volume: {0} 32 | 31,Volume: ,Volume: 33 | 32,Alt PageUp,Alt PageUp 34 | 33,Move {0} rows(s) up,Mover {0} Linha(s) para cima 35 | 34,Alt PageDown,Alt PageDown 36 | 35,Move {0} rows(s) down,Mover {0} Linhas(s) para baixo 37 | 36,Alt Insert,Alt Insert 38 | 37,Insert {0} rows(s) above,Inserir {0} Linhas(s) em cima 39 | 38,Ctrl Alt Insert,Ctrl Alt Insert 40 | 39,Insert {0} rows(s) below,Inserir {0} Linhas(s) em baixo 41 | 40,Play {0} voice(s),Ouvir {0} Voz(es) 42 | 41,Alt P,Alt P 43 | 42,Play All,Ouvir Tudo 44 | 43,Alt A,Alt A 45 | 44,Pause,Pausa 46 | 45,Alt U,Alt U 47 | 46,Resume,Resumir 48 | 47,Alt I,Alt I 49 | 48,Stop,Parar 50 | 49,Alt S,Alt S 51 | 50,#StackPanel_5,#StackPanel_5 52 | 51,F12,F12 53 | 52,Settings...,Configuração... 54 | 53,Save Phrase File,Salvar Ficheiro “PSV” 55 | 54,Ctrl S,Ctrl S 56 | 55,Save Phrase File As...,Salvar Ficheiro “PSV” Como... 57 | 56,Ctrl Alt S,Ctrl Alt S 58 | 57,Stop!,Parar! 59 | 58,Ctrl H,Ctrl H 60 | 59,Go!,Criar! 61 | 60,Ctrl G,Ctrl G 62 | 61,Setting takes effect on program restart,Configuração tem efeito após reinicialização do programa. 63 | -------------------------------------------------------------------------------- /Translator/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Resources; 3 | using System.Runtime.CompilerServices; 4 | using System.Runtime.InteropServices; 5 | using System.Windows; 6 | 7 | // General Information about an assembly is controlled through the following 8 | // set of attributes. Change these attribute values to modify the information 9 | // associated with an assembly. 10 | [assembly: AssemblyTitle("TTSAutomate")] 11 | [assembly: AssemblyDescription("Create WAV and MP3 files of voices using a variety of TTS engines. Icon designed by Freepik / flaticon")] 12 | [assembly: AssemblyConfiguration("")] 13 | [assembly: AssemblyCompany("caffeineau@gmail.com")] 14 | [assembly: AssemblyProduct("TTSAutomate")] 15 | [assembly: AssemblyCopyright("Copyright © 2018")] 16 | [assembly: AssemblyTrademark("")] 17 | [assembly: AssemblyCulture("")] 18 | 19 | // Setting ComVisible to false makes the types in this assembly not visible 20 | // to COM components. If you need to access a type in this assembly from 21 | // COM, set the ComVisible attribute to true on that type. 22 | [assembly: ComVisible(false)] 23 | 24 | //In order to begin building localizable applications, set 25 | //CultureYouAreCodingWith in your .csproj file 26 | //inside a . For example, if you are using US english 27 | //in your source files, set the to en-US. Then uncomment 28 | //the NeutralResourceLanguage attribute below. Update the "en-US" in 29 | //the line below to match the UICulture setting in the project file. 30 | 31 | [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] 32 | 33 | 34 | [assembly: ThemeInfo( 35 | ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located 36 | //(used if a resource is not found in the page, 37 | // or application resource dictionaries) 38 | ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located 39 | //(used if a resource is not found in the page, 40 | // app, or any theme specific resource dictionaries) 41 | )] 42 | 43 | 44 | // Version information for an assembly consists of the following four values: 45 | // 46 | // Major Version 47 | // Minor Version 48 | // Build Number 49 | // Revision 50 | // 51 | // You can specify all the values or you can default the Build and Revision Numbers 52 | // by using the '*' as shown below: 53 | // [assembly: AssemblyVersion("1.0.*")] 54 | [assembly: AssemblyVersion("3.2.0.0")] 55 | [assembly: AssemblyFileVersion("3.2.0.0")] 56 | -------------------------------------------------------------------------------- /Translator/SplitButton.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Collections.ObjectModel; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows; 8 | using System.Windows.Controls; 9 | using System.Windows.Controls.Primitives; 10 | using System.Windows.Data; 11 | using System.Windows.Documents; 12 | using System.Windows.Input; 13 | using System.Windows.Media; 14 | using System.Windows.Media.Imaging; 15 | using System.Windows.Navigation; 16 | using System.Windows.Shapes; 17 | 18 | namespace TTSAutomate 19 | { 20 | /// 21 | /// Interaction logic for SplitButton.xaml 22 | /// 23 | public partial class SplitButton : UserControl 24 | { 25 | private Button button; 26 | 27 | private ObservableCollection menuItemsSource = new ObservableCollection(); 28 | 29 | public Collection MenuItemsSource { get { return this.menuItemsSource; } } 30 | 31 | public SplitButton() 32 | { 33 | InitializeComponent(); 34 | } 35 | 36 | public static readonly DependencyProperty CommandProperty = DependencyProperty.Register( 37 | "Command", 38 | typeof(ICommand), 39 | typeof(SplitButton), 40 | new UIPropertyMetadata(null, OnCommandChanged)); 41 | 42 | public ICommand Command 43 | { 44 | get 45 | { 46 | return (ICommand)GetValue(CommandProperty); 47 | } 48 | 49 | set 50 | { 51 | SetValue(CommandProperty, value); 52 | } 53 | } 54 | 55 | private static void OnCommandChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs eventArgs) 56 | { 57 | if (eventArgs.NewValue != eventArgs.OldValue) 58 | { 59 | var splitButton = dependencyObject as SplitButton; 60 | 61 | if (splitButton.button != null) 62 | { 63 | splitButton.button.Command = eventArgs.NewValue as ICommand; 64 | } 65 | } 66 | } 67 | 68 | private void OnArrowClick(object sender, RoutedEventArgs e) 69 | { 70 | var buttonMenu = ContextMenuService.GetContextMenu(this.button); 71 | 72 | if (this.menuItemsSource.Count > 0 && buttonMenu != null) 73 | { 74 | buttonMenu.IsOpen = !buttonMenu.IsOpen; 75 | buttonMenu.PlacementTarget = this.button; 76 | buttonMenu.Placement = PlacementMode.Bottom; 77 | } 78 | } 79 | 80 | private void SplitButton_OnLoaded(object sender, RoutedEventArgs e) 81 | { 82 | this.button = this.Template.FindName("mainButton", this) as Button; 83 | if (this.Command != null) 84 | { 85 | this.button.Command = this.Command; 86 | } 87 | } 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /Translator/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace TTSAutomate.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TTSAutomate.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /Translator/SplitButton.xaml: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 27 | 28 | 29 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /Translator/app.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 52 | 59 | 60 | 61 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /Translator/ConfigWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Globalization; 5 | using System.Linq; 6 | using System.Text; 7 | using System.Windows; 8 | using System.Windows.Controls; 9 | using System.Windows.Data; 10 | using System.Windows.Documents; 11 | using System.Windows.Input; 12 | using System.Windows.Media; 13 | using System.Windows.Media.Imaging; 14 | using System.Windows.Shapes; 15 | 16 | namespace TTSAutomate 17 | { 18 | /// 19 | /// Interaction logic for ConfigWindow.xaml 20 | /// 21 | public partial class ConfigWindow : Window, INotifyPropertyChanged 22 | { 23 | 24 | bool initialLoad = true; 25 | 26 | private List languageOptions = new List(); 27 | 28 | public List LanguageOptions 29 | { 30 | get { return languageOptions; } 31 | set 32 | { 33 | languageOptions = value; 34 | OnPropertyChanged("LanguageOptions"); 35 | } 36 | } 37 | 38 | 39 | public List IvonaRegions { get; set; } 40 | 41 | public List SampleRates { get; set; } 42 | 43 | public List BitsPerSamples { get; set; } 44 | 45 | public ConfigWindow() 46 | { 47 | InitializeComponent(); 48 | 49 | List cultures = new List(); 50 | System.IO.FileInfo fi = new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location); 51 | System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(fi.Directory.FullName); 52 | foreach (var folder in di.GetDirectories()) 53 | { 54 | try 55 | { 56 | cultures.Add(new CultureInfo(folder.Name)); 57 | 58 | } 59 | catch 60 | { 61 | 62 | } 63 | } 64 | 65 | //cultures.Sort((x, y) => x.DisplayName.CompareTo(y.DisplayName)); 66 | 67 | LanguageOptions = cultures; 68 | 69 | 70 | this.DataContext = this; 71 | //HeaderImage = MainWindow.LoadImage("settings.png"); 72 | IvonaRegions = new List(); 73 | 74 | 75 | foreach (var item in Amazon.RegionEndpoint.EnumerableAllRegions) 76 | { 77 | IvonaRegions.Add(item.DisplayName); 78 | 79 | } 80 | 81 | 82 | SampleRates = new List(); 83 | SampleRates.Add(8000); 84 | SampleRates.Add(11025); 85 | SampleRates.Add(16000); 86 | SampleRates.Add(22050); 87 | SampleRates.Add(32000); 88 | SampleRates.Add(44100); 89 | SampleRates.Add(48000); 90 | 91 | BitsPerSamples = new List(); 92 | BitsPerSamples.Add(8); 93 | BitsPerSamples.Add(16); 94 | BitsPerSamples.Add(24); 95 | 96 | } 97 | 98 | public event PropertyChangedEventHandler PropertyChanged; 99 | protected void OnPropertyChanged(String name) 100 | { 101 | PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); 102 | } 103 | 104 | private void OKButton_Click(object sender, RoutedEventArgs e) 105 | { 106 | //Clipboard.SetText(TTSAutomate.Properties.Settings.Default.SelectedCulture.NativeName); 107 | Close(); 108 | } 109 | 110 | private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 111 | { 112 | if (!initialLoad) 113 | { 114 | (Owner as MainWindow).SetItemsAsDirty(); 115 | } 116 | } 117 | 118 | private void Window_Loaded(object sender, RoutedEventArgs e) 119 | { 120 | initialLoad = false; 121 | } 122 | } 123 | 124 | 125 | } 126 | -------------------------------------------------------------------------------- /Translator/TTSProvider/GoogleTTSProvider.cs: -------------------------------------------------------------------------------- 1 | using NAudio.Wave; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.ComponentModel; 5 | using System.Globalization; 6 | using System.IO; 7 | using System.Linq; 8 | using System.Net; 9 | using System.Security.Cryptography; 10 | using System.Text; 11 | using System.Threading.Tasks; 12 | using System.Web.Script.Serialization; 13 | 14 | namespace TTSAutomate 15 | { 16 | class GoogleTTSProvider : TTSProvider 17 | { 18 | 19 | public GoogleTTSProvider() 20 | { 21 | Name = "Google Text To Speech"; 22 | ProviderClass = Class.Web; 23 | HasVoices = true; 24 | BackgroundWorker loadVoicesWorker = new BackgroundWorker(); 25 | loadVoicesWorker.DoWork += delegate 26 | { 27 | List cultures = new List(); 28 | cultures.AddRange(CultureInfo.GetCultures(CultureTypes.SpecificCultures)); 29 | cultures.Sort((x, y) => x.DisplayName.CompareTo(y.DisplayName)); 30 | AvailableVoices = cultures.Select(x => new Voice() { Name = x.DisplayName, Language = x.Name }).ToList(); 31 | if (this.Name == Properties.Settings.Default.LastTTSProvider) 32 | { 33 | if (Properties.Settings.Default.RememberLanguageSettings) 34 | { 35 | SelectedVoice = AvailableVoices.Find(n => n.Name == Properties.Settings.Default.LastTTSVoice); 36 | } 37 | else 38 | { 39 | SelectedVoice = AvailableVoices[0]; 40 | } 41 | } 42 | 43 | }; 44 | loadVoicesWorker.RunWorkerAsync(); 45 | } 46 | 47 | public override void DownloadItem(PhraseItem item, string folder) 48 | { 49 | try 50 | { 51 | new Task(() => 52 | { 53 | using (WebClient wc = new WebClient()) 54 | { 55 | wc.DownloadFile(String.Format("http://translate.google.com/translate_tts?ie=UTF-8&total=1&idx=0&client=tw-ob&q={0}&tl={1}", item.Phrase.Replace("&", "%26"), SelectedVoice.Language), String.Format("{0}\\mp3\\{1}\\{2}.mp3", folder, item.Folder, item.FileName)); 56 | } 57 | ConvertToWav(item, folder, false, new String[] { Name, SelectedVoice.Name, SelectedDiscreteSpeed, SelectedDiscreteVolume }); 58 | }).Start(); 59 | 60 | } 61 | catch (Exception Ex) 62 | { 63 | Logger.Log(Ex.ToString()); 64 | item.DownloadComplete = false; 65 | } 66 | } 67 | 68 | public override void DownloadAndPlayItem(PhraseItem item, string folder) 69 | { 70 | try 71 | { 72 | new Task(() => 73 | { 74 | using (WebClient wc = new WebClient()) 75 | { 76 | wc.DownloadFile(String.Format("http://translate.google.com/translate_tts?ie=UTF-8&total=1&idx=0&client=tw-ob&q={0}&tl={1}", item.Phrase.Replace("&", "%26"), SelectedVoice.Language), String.Format("{0}\\mp3\\{1}\\{2}.mp3", folder, item.Folder, item.FileName)); 77 | } 78 | ConvertToWav(item, folder, true, new String[] { Name, SelectedVoice.Name, SelectedDiscreteSpeed, SelectedDiscreteVolume }); 79 | }).Start(); 80 | } 81 | catch (Exception Ex) 82 | { 83 | Logger.Log(Ex.ToString()); 84 | item.DownloadComplete = false; 85 | } 86 | } 87 | 88 | public override void Play(PhraseItem item) 89 | { 90 | using (WebClient wc = new WebClient()) 91 | { 92 | MainWindow.PlayAudioStream(wc.DownloadData(String.Format("http://translate.google.com/translate_tts?ie=UTF-8&total=1&idx=0&client=tw-ob&q={0}&tl={1}", item.Phrase.Replace("&", "%26"), SelectedVoice.Language))); 93 | } 94 | } 95 | } 96 | 97 | } 98 | -------------------------------------------------------------------------------- /Translator/Properties/Settings.Installer.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | False 13 | 14 | 15 | True 16 | 17 | 18 | True 19 | 20 | 21 | True 22 | 23 | 24 | eu-west-1 25 | 26 | 27 | Ivona Text To Speech 28 | 29 | 30 | Salli 31 | 32 | 33 | medium 34 | 35 | 36 | medium 37 | 38 | 39 | 100 40 | 41 | 42 | 10 43 | 44 | 45 | True 46 | 47 | 48 | True 49 | 50 | 51 | 16000 52 | 53 | 54 | 16 55 | 56 | 57 | mtstkn=4cgtvd0CJdF%2FSFWkmxNzQba9K1XhI2Gm24waNSWUY4SjtrHDjQ1%2Bw1oAkUtw%2F6Ew;MUIDB=2B66DE567E226CED09D6D72F7FA46D77; 58 | 59 | 60 | (Default) 61 | 62 | 63 | 255 64 | 65 | 66 | True 67 | 68 | 69 | True 70 | 71 | 72 | -48 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /Translator/TTSProvider/BingTTSProvider.cs: -------------------------------------------------------------------------------- 1 | using NAudio.Wave; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.ComponentModel; 5 | using System.Globalization; 6 | using System.IO; 7 | using System.Linq; 8 | using System.Net; 9 | using System.Security.Cryptography; 10 | using System.Text; 11 | using System.Threading.Tasks; 12 | using System.Web.Script.Serialization; 13 | 14 | namespace TTSAutomate 15 | { 16 | class BingTTSProvider : TTSProvider 17 | { 18 | public BingTTSProvider() 19 | { 20 | Name = "Bing Text To Speech"; 21 | ProviderClass = Class.Web; 22 | HasVoices = true; 23 | BackgroundWorker loadVoicesWorker = new BackgroundWorker(); 24 | loadVoicesWorker.DoWork += delegate 25 | { 26 | List cultures = new List(); 27 | cultures.AddRange(CultureInfo.GetCultures(CultureTypes.SpecificCultures)); 28 | cultures.Sort((x, y) => x.DisplayName.CompareTo(y.DisplayName)); 29 | AvailableVoices = cultures.Select(x => new Voice() { Name = x.DisplayName + " (Male)", Language = x.Name, Gender = "male" }).ToList(); 30 | AvailableVoices.AddRange(cultures.Select(x => new Voice() { Name = x.DisplayName + " (Female)", Language = x.Name, Gender = "female" }).ToList()); 31 | AvailableVoices.Sort((x, y) => x.Name.CompareTo(y.Name)); 32 | SelectedVoice = AvailableVoices[0]; 33 | if (Properties.Settings.Default.RememberLanguageSettings && this.Name == Properties.Settings.Default.LastTTSProvider) 34 | { 35 | SelectedVoice = AvailableVoices.Find(n => n.Name == Properties.Settings.Default.LastTTSVoice); 36 | } 37 | else 38 | { 39 | SelectedVoice = AvailableVoices[0]; 40 | } 41 | 42 | }; 43 | loadVoicesWorker.RunWorkerAsync(); 44 | } 45 | 46 | public override void DownloadItem(PhraseItem item, string folder) 47 | { 48 | try 49 | { 50 | new Task(() => 51 | { 52 | using (WebClient wc = new WebClient()) 53 | { 54 | wc.Headers.Add(HttpRequestHeader.Cookie, Properties.Settings.Default.BingHeaderString); 55 | wc.DownloadFile(String.Format("http://www.bing.com/translator/api/language/Speak?locale={1}&gender={2}&media=audio/mp3&text={0}", item.Phrase, SelectedVoice.Language, SelectedVoice.Gender), String.Format("{0}\\mp3\\{1}\\{2}.mp3", folder, item.Folder, item.FileName)); 56 | } 57 | ConvertToWav(item, folder, false, new String[] { Name, SelectedVoice.Name, SelectedDiscreteSpeed, SelectedDiscreteVolume }); 58 | }).Start(); 59 | 60 | } 61 | catch (Exception Ex) 62 | { 63 | Logger.Log(Ex.ToString()); 64 | item.DownloadComplete = false; 65 | } 66 | } 67 | 68 | public override void DownloadAndPlayItem(PhraseItem item, string folder) 69 | { 70 | try 71 | { 72 | new Task(() => 73 | { 74 | using (WebClient wc = new WebClient()) 75 | { 76 | wc.Headers.Add(HttpRequestHeader.Cookie, Properties.Settings.Default.BingHeaderString); 77 | wc.DownloadFile(String.Format("http://www.bing.com/translator/api/language/Speak?locale={1}&gender={2}&media=audio/mp3&text={0}", item.Phrase, SelectedVoice.Language, SelectedVoice.Gender), String.Format("{0}\\mp3\\{1}\\{2}.mp3", folder, item.Folder, item.FileName)); 78 | } 79 | ConvertToWav(item, folder, true, new String[] { Name, SelectedVoice.Name, SelectedDiscreteSpeed, SelectedDiscreteVolume }); 80 | }).Start(); 81 | 82 | } 83 | catch (Exception Ex) 84 | { 85 | Logger.Log(Ex.ToString()); 86 | item.DownloadComplete = false; 87 | } 88 | } 89 | 90 | public override void Play(PhraseItem item) 91 | { 92 | using (WebClient wc = new WebClient()) 93 | { 94 | try 95 | { 96 | wc.Headers.Add(HttpRequestHeader.Cookie, Properties.Settings.Default.BingHeaderString); 97 | MainWindow.PlayAudioStream(wc.DownloadData(String.Format("http://www.bing.com/translator/api/language/Speak?locale={1}&gender={2}&media=audio/mp3&text={0}", item.Phrase, SelectedVoice.Language, SelectedVoice.Gender))); 98 | } 99 | catch 100 | { 101 | 102 | } 103 | } 104 | } 105 | } 106 | 107 | } 108 | -------------------------------------------------------------------------------- /Translator/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | False 13 | 14 | 15 | True 16 | 17 | 18 | True 19 | 20 | 21 | True 22 | 23 | 24 | eu-west-1 25 | 26 | 27 | Ivona Text To Speech 28 | 29 | 30 | Salli 31 | 32 | 33 | medium 34 | 35 | 36 | medium 37 | 38 | 39 | 100 40 | 41 | 42 | 10 43 | 44 | 45 | True 46 | 47 | 48 | True 49 | 50 | 51 | 16000 52 | 53 | 54 | 16 55 | 56 | 57 | mtstkn=4cgtvd0CJdF%2FSFWkmxNzQba9K1XhI2Gm24waNSWUY4SjtrHDjQ1%2Bw1oAkUtw%2F6Ew;MUIDB=2B66DE567E226CED09D6D72F7FA46D77; 58 | 59 | 60 | (Default) 61 | 62 | 63 | 255 64 | 65 | 66 | True 67 | 68 | 69 | True 70 | 71 | 72 | -48 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /Translator/Properties/Settings.Debug.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | False 13 | 14 | 15 | True 16 | 17 | 18 | True 19 | 20 | 21 | True 22 | 23 | 24 | eu-west-1 25 | 26 | 27 | Ivona Text To Speech 28 | 29 | 30 | Salli 31 | 32 | 33 | medium 34 | 35 | 36 | medium 37 | 38 | 39 | 100 40 | 41 | 42 | 10 43 | 44 | 45 | True 46 | 47 | 48 | True 49 | 50 | 51 | 16000 52 | 53 | 54 | 16 55 | 56 | 57 | mtstkn=4cgtvd0CJdF%2FSFWkmxNzQba9K1XhI2Gm24waNSWUY4SjtrHDjQ1%2Bw1oAkUtw%2F6Ew;MUIDB=2B66DE567E226CED09D6D72F7FA46D77; 58 | 59 | 60 | (Default) 61 | 62 | 63 | 255 64 | 65 | 66 | True 67 | 68 | 69 | True 70 | 71 | 72 | -48 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /Translator/Properties/Settings.Portable.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | False 13 | 14 | 15 | True 16 | 17 | 18 | True 19 | 20 | 21 | True 22 | 23 | 24 | eu-west-1 25 | 26 | 27 | Ivona Text To Speech 28 | 29 | 30 | Salli 31 | 32 | 33 | medium 34 | 35 | 36 | medium 37 | 38 | 39 | 100 40 | 41 | 42 | 10 43 | 44 | 45 | True 46 | 47 | 48 | True 49 | 50 | 51 | 16000 52 | 53 | 54 | 16 55 | 56 | 57 | mtstkn=4cgtvd0CJdF%2FSFWkmxNzQba9K1XhI2Gm24waNSWUY4SjtrHDjQ1%2Bw1oAkUtw%2F6Ew;MUIDB=2B66DE567E226CED09D6D72F7FA46D77; 58 | 59 | 60 | (Default) 61 | 62 | 63 | 255 64 | 65 | 66 | True 67 | 68 | 69 | True 70 | 71 | 72 | -48 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /Translator/AudioEditor.xaml: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 33 | 34 | 40 | 41 |