diff --git a/C#/.vs/GoogleSpeak/v15/.suo b/C#/.vs/GoogleSpeak/v15/.suo new file mode 100644 index 0000000..31f1498 Binary files /dev/null and b/C#/.vs/GoogleSpeak/v15/.suo differ diff --git a/C#/.vs/config/applicationhost.config b/C#/.vs/config/applicationhost.config new file mode 100644 index 0000000..f3e21da --- /dev/null +++ b/C#/.vs/config/applicationhost.config @@ -0,0 +1,1021 @@ + + + + + + + + +
+
+
+
+
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+
+ + +
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/C#/App.config b/C#/App.config new file mode 100644 index 0000000..88fa402 --- /dev/null +++ b/C#/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/C#/Form1.Designer.cs b/C#/Form1.Designer.cs new file mode 100644 index 0000000..b11b30d --- /dev/null +++ b/C#/Form1.Designer.cs @@ -0,0 +1,48 @@ +namespace GoogleSpeak +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(284, 261); + this.Name = "Form1"; + this.Text = "Form1"; + this.Load += new System.EventHandler(this.Form1_Load); + this.ResumeLayout(false); + + } + + #endregion + } +} + diff --git a/C#/Form1.cs b/C#/Form1.cs new file mode 100644 index 0000000..3693b97 --- /dev/null +++ b/C#/Form1.cs @@ -0,0 +1,22 @@ +using System; +using System.Windows.Forms; +using GoogleSpeak.GoogleSpeak; + +namespace GoogleSpeak +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + + private void Form1_Load(object sender, EventArgs e) + { + var googleLina = GoogleSpeech.Instance; + googleLina.Say("Her er en hest"); + googleLina.Say("og en hest mere"); + googleLina.Say("and yet an other one", "en"); + } + } +} diff --git a/C#/Form1.resx b/C#/Form1.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/C#/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/C#/GoogleSpeak.csproj b/C#/GoogleSpeak.csproj new file mode 100644 index 0000000..0bebe1b --- /dev/null +++ b/C#/GoogleSpeak.csproj @@ -0,0 +1,90 @@ + + + + + Debug + AnyCPU + {580F8F2A-2A28-4328-AD0B-4403F0266C19} + WinExe + GoogleSpeak + GoogleSpeak + v4.5.2 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + packages\NAudio.1.8.4\lib\net35\NAudio.dll + + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + \ No newline at end of file diff --git a/C#/GoogleSpeak.sln b/C#/GoogleSpeak.sln new file mode 100644 index 0000000..1109c09 --- /dev/null +++ b/C#/GoogleSpeak.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26403.7 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GoogleSpeak", "GoogleSpeak.csproj", "{580F8F2A-2A28-4328-AD0B-4403F0266C19}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {580F8F2A-2A28-4328-AD0B-4403F0266C19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {580F8F2A-2A28-4328-AD0B-4403F0266C19}.Debug|Any CPU.Build.0 = Debug|Any CPU + {580F8F2A-2A28-4328-AD0B-4403F0266C19}.Release|Any CPU.ActiveCfg = Release|Any CPU + {580F8F2A-2A28-4328-AD0B-4403F0266C19}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/C#/GoogleSpeak/CRC32.cs b/C#/GoogleSpeak/CRC32.cs new file mode 100644 index 0000000..9a45b12 --- /dev/null +++ b/C#/GoogleSpeak/CRC32.cs @@ -0,0 +1,74 @@ +namespace GoogleSpeak.GoogleSpeak +{ + // ReSharper disable once InconsistentNaming + public static class CRC32 + { + + public static uint Hash(string input) + { + var table = new uint[]{ + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, + 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, + 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, + 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, + 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, + 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, + 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, + 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, + 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, + 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, + 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106, + 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, + 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, + 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, + 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, + 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, + 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, + 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, + 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, + 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, + 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, + 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, + 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, + 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, + 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, + 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, + 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E, + 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, + 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, + 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, + 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, + 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, + 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, + 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, + 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, + 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, + 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, + 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, + 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, + 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, + 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, + 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, + 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D + }; + + unchecked + { + uint crc = (uint)((uint)0 ^ -1); + var len = input.Length; + + for (var i = 0; i < len; i++) + crc = (crc >> 8) ^ table[(crc ^ (byte)input[i]) & 0xFF]; + + crc = (uint)(crc ^ -1); + + if (crc < 0) + crc += (uint)4294967296; + + return crc; + } + } + + } + +} diff --git a/C#/GoogleSpeak/GoogleSpeech.cs b/C#/GoogleSpeak/GoogleSpeech.cs new file mode 100644 index 0000000..bb3de84 --- /dev/null +++ b/C#/GoogleSpeak/GoogleSpeech.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Threading.Tasks; +using System.Web; +using NAudio.Wave; + +namespace GoogleSpeak.GoogleSpeak +{ + public class GoogleSpeech + { + private readonly Queue playlist = new Queue(); + private IWavePlayer player; + private Mp3FileReader mp3FileReader; + private string downloadFolder; + private static readonly Lazy Lazy = new Lazy(() => new GoogleSpeech()); + private bool playing; + + public event EventHandler PlaybackStopped; + public Language Language { get; set; } = Languages.FromCode("da"); + + private void Play() + { + if (playlist.Count < 1) + return; + playing = true; + + player = new WaveOutEvent(); + player.PlaybackStopped += (sender, e) => + { + player?.Dispose(); + mp3FileReader?.Dispose(); + if (playlist.Any()) + Play(); + else + OnPlaybackStopped(e); + }; + + mp3FileReader = new Mp3FileReader(playlist.Dequeue()); + player.Init(mp3FileReader); + player.Play(); + } + + protected virtual void OnPlaybackStopped(StoppedEventArgs e) + { + playing = false; + PlaybackStopped?.Invoke(this, e); + } + + + public void Say(string text, string languageCode) + { + var language = Languages.FromCode(languageCode); + Say(text, language); + } + + public void Say(string text, Language language = null) + { + if (language == null) + language = Language; + + var filename = DownloadFolder + CRC32.Hash(language.Code + " " + text) + ".mp3"; + var url = $"https://translate.googleapis.com/translate_tts?ie=UTF-8&q={HttpUtility.UrlEncode(text)}&tl={language.Code}&total=1&idx=0&textlen={text.Length}&client=gtx"; + + if (!UseCache || !File.Exists(filename)) + using (var webClient = new WebClient()) + webClient.DownloadFile(url, filename); + + playlist.Enqueue(filename); + + if (!playing) + Play(); + } + + public GoogleSpeech(bool useCache = true) + { + UseCache = useCache; + DownloadFolder = AppDomain.CurrentDomain.BaseDirectory + @"Cache\"; + } + + ~GoogleSpeech() + { + if (!UseCache) + Directory.Delete(DownloadFolder); + } + + public string DownloadFolder + { + get => downloadFolder; + set + { + downloadFolder = value; + Directory.CreateDirectory(downloadFolder); + } + } + + public static GoogleSpeech Instance => Lazy.Value; + public bool UseCache { get; set; } + } +} diff --git a/C#/GoogleSpeak/Languages.cs b/C#/GoogleSpeak/Languages.cs new file mode 100644 index 0000000..5d787ef --- /dev/null +++ b/C#/GoogleSpeak/Languages.cs @@ -0,0 +1,130 @@ +using System.Collections.Generic; +using System.Linq; + +namespace GoogleSpeak.GoogleSpeak +{ + public class Language + { + public string Code { get; set; } + public string Name { get; set; } + } + + public static class Languages + { + public static List List { get; } + + public static Language FromCode(string code) => List.FirstOrDefault(e => e.Code == code); + public static Language FromName(string name) => List.FirstOrDefault(e => e.Name == name); + + static Languages() + { + List = new List + { + new Language {Name = "Afrikaans", Code = "af"}, + new Language {Name = "Albanian", Code = "sq"}, + new Language {Name = "Amharic", Code = "am"}, + new Language {Name = "Arabic", Code = "ar"}, + new Language {Name = "Armenian", Code = "hy"}, + new Language {Name = "Azeerbaijani", Code = "az"}, + new Language {Name = "Basque", Code = "eu"}, + new Language {Name = "Belarusian", Code = "be"}, + new Language {Name = "Bengali", Code = "bn"}, + new Language {Name = "Bosnian", Code = "bs"}, + new Language {Name = "Bulgarian", Code = "bg"}, + new Language {Name = "Catalan", Code = "ca"}, + new Language {Name = "Cebuano", Code = "ceb (ISO-639-2)"}, + new Language {Name = "Chinese (Simplified)", Code = "zh-CN"}, + new Language {Name = "Chinese (Traditional)", Code = "zh-TW"}, + new Language {Name = "Corsican", Code = "co"}, + new Language {Name = "Croatian", Code = "hr"}, + new Language {Name = "Czech", Code = "cs"}, + new Language {Name = "Danish", Code = "da"}, + new Language {Name = "Dutch", Code = "nl"}, + new Language {Name = "English", Code = "en"}, + new Language {Name = "Esperanto", Code = "eo"}, + new Language {Name = "Estonian", Code = "et"}, + new Language {Name = "Finnish", Code = "fi"}, + new Language {Name = "French", Code = "fr"}, + new Language {Name = "Frisian", Code = "fy"}, + new Language {Name = "Galician", Code = "gl"}, + new Language {Name = "Georgian", Code = "ka"}, + new Language {Name = "German", Code = "de"}, + new Language {Name = "Greek", Code = "el"}, + new Language {Name = "Gujarati", Code = "gu"}, + new Language {Name = "Haitian Creole", Code = "ht"}, + new Language {Name = "Hausa", Code = "ha"}, + new Language {Name = "Hawaiian", Code = "haw"}, + new Language {Name = "Hebrew", Code = "iw"}, + new Language {Name = "Hindi", Code = "hi"}, + new Language {Name = "Hmong", Code = "hmn"}, + new Language {Name = "Hungarian", Code = "hu"}, + new Language {Name = "Icelandic", Code = "is"}, + new Language {Name = "Igbo", Code = "ig"}, + new Language {Name = "Indonesian", Code = "id"}, + new Language {Name = "Irish", Code = "ga"}, + new Language {Name = "Italian", Code = "it"}, + new Language {Name = "Japanese", Code = "ja"}, + new Language {Name = "Javanese", Code = "jw"}, + new Language {Name = "Kannada", Code = "kn"}, + new Language {Name = "Kazakh", Code = "kk"}, + new Language {Name = "Khmer", Code = "km"}, + new Language {Name = "Korean", Code = "ko"}, + new Language {Name = "Kurdish", Code = "ku"}, + new Language {Name = "Kyrgyz", Code = "ky"}, + new Language {Name = "Lao", Code = "lo"}, + new Language {Name = "Latin", Code = "la"}, + new Language {Name = "Latvian", Code = "lv"}, + new Language {Name = "Lithuanian", Code = "lt"}, + new Language {Name = "Luxembourgish", Code = "lb"}, + new Language {Name = "Macedonian", Code = "mk"}, + new Language {Name = "Malagasy", Code = "mg"}, + new Language {Name = "Malay", Code = "ms"}, + new Language {Name = "Malayalam", Code = "ml"}, + new Language {Name = "Maltese", Code = "mt"}, + new Language {Name = "Maori", Code = "mi"}, + new Language {Name = "Marathi", Code = "mr"}, + new Language {Name = "Mongolian", Code = "mn"}, + new Language {Name = "Myanmar (Burmese)", Code = "my"}, + new Language {Name = "Nepali", Code = "ne"}, + new Language {Name = "Norwegian", Code = "no"}, + new Language {Name = "Nyanja (Chichewa)", Code = "ny"}, + new Language {Name = "Pashto", Code = "ps"}, + new Language {Name = "Persian", Code = "fa"}, + new Language {Name = "Polish", Code = "pl"}, + new Language {Name = "Portuguese (Portugal, Brazil)", Code = "pt"}, + new Language {Name = "Punjabi", Code = "pa"}, + new Language {Name = "Romanian", Code = "ro"}, + new Language {Name = "Russian", Code = "ru"}, + new Language {Name = "Samoan", Code = "sm"}, + new Language {Name = "Scots Gaelic", Code = "gd"}, + new Language {Name = "Serbian", Code = "sr"}, + new Language {Name = "Sesotho", Code = "st"}, + new Language {Name = "Shona", Code = "sn"}, + new Language {Name = "Sindhi", Code = "sd"}, + new Language {Name = "Sinhala (Sinhalese)", Code = "si"}, + new Language {Name = "Slovak", Code = "sk"}, + new Language {Name = "Slovenian", Code = "sl"}, + new Language {Name = "Somali", Code = "so"}, + new Language {Name = "Spanish", Code = "es"}, + new Language {Name = "Sundanese", Code = "su"}, + new Language {Name = "Swahili", Code = "sw"}, + new Language {Name = "Swedish", Code = "sv"}, + new Language {Name = "Tagalog (Filipino)", Code = "tl"}, + new Language {Name = "Tajik", Code = "tg"}, + new Language {Name = "Tamil", Code = "ta"}, + new Language {Name = "Telugu", Code = "te"}, + new Language {Name = "Thai", Code = "th"}, + new Language {Name = "Turkish", Code = "tr"}, + new Language {Name = "Ukrainian", Code = "uk"}, + new Language {Name = "Urdu", Code = "ur"}, + new Language {Name = "Uzbek", Code = "uz"}, + new Language {Name = "Vietnamese", Code = "vi"}, + new Language {Name = "Welsh", Code = "cy"}, + new Language {Name = "Xhosa", Code = "xh"}, + new Language {Name = "Yiddish", Code = "yi"}, + new Language {Name = "Yoruba", Code = "yo"}, + new Language {Name = "Zulu", Code = "zu"} + }; + } + } +} diff --git a/C#/Program.cs b/C#/Program.cs new file mode 100644 index 0000000..330672a --- /dev/null +++ b/C#/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GoogleSpeak +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/C#/Properties/AssemblyInfo.cs b/C#/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..1381ed8 --- /dev/null +++ b/C#/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("GoogleSpeak")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("GoogleSpeak")] +[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("580f8f2a-2a28-4328-ad0b-4403f0266c19")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/C#/Properties/Resources.Designer.cs b/C#/Properties/Resources.Designer.cs new file mode 100644 index 0000000..d94dad2 --- /dev/null +++ b/C#/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace GoogleSpeak.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GoogleSpeak.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/C#/Properties/Resources.resx b/C#/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/C#/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/C#/Properties/Settings.Designer.cs b/C#/Properties/Settings.Designer.cs new file mode 100644 index 0000000..380a96e --- /dev/null +++ b/C#/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace GoogleSpeak.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/C#/Properties/Settings.settings b/C#/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/C#/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/C#/packages.config b/C#/packages.config new file mode 100644 index 0000000..1d482cc --- /dev/null +++ b/C#/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Delphi/CRC32U.pas b/Delphi/CRC32U.pas new file mode 100644 index 0000000..101d581 --- /dev/null +++ b/Delphi/CRC32U.pas @@ -0,0 +1,69 @@ +unit CRC32U; + +interface + +uses + Winapi.Windows, System.SysUtils; + +type + TCrc32 = record + public + class procedure Hash(p: Pointer; ByteCount: DWORD; var CRCValue: DWORD); overload; static; + class function Hash(input: string): DWORD; overload; static; + end; + +implementation + +const + Table: array [0 .. 255] of DWORD = ($00000000, $77073096, $EE0E612C, $990951BA, $076DC419, $706AF48F, $E963A535, $9E6495A3, $0EDB8832, $79DCB8A4, $E0D5E91E, $97D2D988, $09B64C2B, $7EB17CBD, + $E7B82D07, $90BF1D91, $1DB71064, $6AB020F2, $F3B97148, $84BE41DE, $1ADAD47D, $6DDDE4EB, $F4D4B551, $83D385C7, $136C9856, $646BA8C0, $FD62F97A, $8A65C9EC, $14015C4F, $63066CD9, $FA0F3D63, + $8D080DF5, $3B6E20C8, $4C69105E, $D56041E4, $A2677172, $3C03E4D1, $4B04D447, $D20D85FD, $A50AB56B, $35B5A8FA, $42B2986C, $DBBBC9D6, $ACBCF940, $32D86CE3, $45DF5C75, $DCD60DCF, $ABD13D59, + $26D930AC, $51DE003A, $C8D75180, $BFD06116, $21B4F4B5, $56B3C423, $CFBA9599, $B8BDA50F, $2802B89E, $5F058808, $C60CD9B2, $B10BE924, $2F6F7C87, $58684C11, $C1611DAB, $B6662D3D, + + $76DC4190, $01DB7106, $98D220BC, $EFD5102A, $71B18589, $06B6B51F, $9FBFE4A5, $E8B8D433, $7807C9A2, $0F00F934, $9609A88E, $E10E9818, $7F6A0DBB, $086D3D2D, $91646C97, $E6635C01, $6B6B51F4, + $1C6C6162, $856530D8, $F262004E, $6C0695ED, $1B01A57B, $8208F4C1, $F50FC457, $65B0D9C6, $12B7E950, $8BBEB8EA, $FCB9887C, $62DD1DDF, $15DA2D49, $8CD37CF3, $FBD44C65, $4DB26158, $3AB551CE, + $A3BC0074, $D4BB30E2, $4ADFA541, $3DD895D7, $A4D1C46D, $D3D6F4FB, $4369E96A, $346ED9FC, $AD678846, $DA60B8D0, $44042D73, $33031DE5, $AA0A4C5F, $DD0D7CC9, $5005713C, $270241AA, $BE0B1010, + $C90C2086, $5768B525, $206F85B3, $B966D409, $CE61E49F, $5EDEF90E, $29D9C998, $B0D09822, $C7D7A8B4, $59B33D17, $2EB40D81, $B7BD5C3B, $C0BA6CAD, + + $EDB88320, $9ABFB3B6, $03B6E20C, $74B1D29A, $EAD54739, $9DD277AF, $04DB2615, $73DC1683, $E3630B12, $94643B84, $0D6D6A3E, $7A6A5AA8, $E40ECF0B, $9309FF9D, $0A00AE27, $7D079EB1, $F00F9344, + $8708A3D2, $1E01F268, $6906C2FE, $F762575D, $806567CB, $196C3671, $6E6B06E7, $FED41B76, $89D32BE0, $10DA7A5A, $67DD4ACC, $F9B9DF6F, $8EBEEFF9, $17B7BE43, $60B08ED5, $D6D6A3E8, $A1D1937E, + $38D8C2C4, $4FDFF252, $D1BB67F1, $A6BC5767, $3FB506DD, $48B2364B, $D80D2BDA, $AF0A1B4C, $36034AF6, $41047A60, $DF60EFC3, $A867DF55, $316E8EEF, $4669BE79, $CB61B38C, $BC66831A, $256FD2A0, + $5268E236, $CC0C7795, $BB0B4703, $220216B9, $5505262F, $C5BA3BBE, $B2BD0B28, $2BB45A92, $5CB36A04, $C2D7FFA7, $B5D0CF31, $2CD99E8B, $5BDEAE1D, + + $9B64C2B0, $EC63F226, $756AA39C, $026D930A, $9C0906A9, $EB0E363F, $72076785, $05005713, $95BF4A82, $E2B87A14, $7BB12BAE, $0CB61B38, $92D28E9B, $E5D5BE0D, $7CDCEFB7, $0BDBDF21, $86D3D2D4, + $F1D4E242, $68DDB3F8, $1FDA836E, $81BE16CD, $F6B9265B, $6FB077E1, $18B74777, $88085AE6, $FF0F6A70, $66063BCA, $11010B5C, $8F659EFF, $F862AE69, $616BFFD3, $166CCF45, $A00AE278, $D70DD2EE, + $4E048354, $3903B3C2, $A7672661, $D06016F7, $4969474D, $3E6E77DB, $AED16A4A, $D9D65ADC, $40DF0B66, $37D83BF0, $A9BCAE53, $DEBB9EC5, $47B2CF7F, $30B5FFE9, $BDBDF21C, $CABAC28A, $53B39330, + $24B4A3A6, $BAD03605, $CDD70693, $54DE5729, $23D967BF, $B3667A2E, $C4614AB8, $5D681B02, $2A6F2B94, $B40BBE37, $C30C8EA1, $5A05DF1B, $2D02EF8D); + { TCrc32 } + +class function TCrc32.Hash(input: string): DWORD; +var + CRC32Table: DWORD; +begin + CRC32Table := $FFFFFFFF; + Hash(Addr(Table[0]), SizeOf(Table), CRC32Table); + CRC32Table := not CRC32Table; + + if CRC32Table <> $6FCF9E13 then + raise Exception.Create('CRC32 Table CRC32 is ' + IntToHex(CRC32Table, 8) + ', expecting $6FCF9E13'); + + Result := $FFFFFFFF; + if Length(input) > 0 then + Hash(Addr(input[1]), Length(input), Result); + Result := not Result; +end; + +class procedure TCrc32.Hash(p: Pointer; ByteCount: DWORD; var CRCValue: DWORD); +var + i: DWORD; + q: ^BYTE; +begin + q := p; + for i := 0 to ByteCount - 1 do + begin + CRCValue := (CRCValue shr 8) xor Table[q^ xor (CRCValue and $000000FF)]; + Inc(q) + end; +end; + +end. diff --git a/Delphi/GoogleSpeak.dpr b/Delphi/GoogleSpeak.dpr new file mode 100644 index 0000000..809057c --- /dev/null +++ b/Delphi/GoogleSpeak.dpr @@ -0,0 +1,17 @@ +program GoogleSpeak; + +uses + Vcl.Forms, + MainU in 'MainU.pas' {FormMain}, + GoogleSpeakU in 'GoogleSpeakU.pas', + CRC32U in 'CRC32U.pas', + LanguagesU in 'LanguagesU.pas'; + +{$R *.res} + +begin + Application.Initialize; + Application.MainFormOnTaskbar := True; + Application.CreateForm(TFormMain, FormMain); + Application.Run; +end. diff --git a/Delphi/GoogleSpeak.dproj b/Delphi/GoogleSpeak.dproj new file mode 100644 index 0000000..cdded11 --- /dev/null +++ b/Delphi/GoogleSpeak.dproj @@ -0,0 +1,533 @@ + + + {CCAD942C-3B6D-4EF1-A6EA-AF6EC40EC689} + 18.0 + VCL + GoogleSpeak.dpr + True + Debug + Win32 + 1 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) + $(BDS)\bin\delphi_PROJECTICON.ico + GoogleSpeak + .\$(Platform)\$(Config) + .\$(Platform)\$(Config) + false + false + false + false + false + + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + $(BDS)\bin\default_app.manifest + true + DBXSqliteDriver;DBXDb2Driver;dxCoreRS23;vclactnband;frxe23;vclFireDAC;dxPSLnksRS23;dxPSdxLCLnkRS23;tethering;cxDataRS23;dxPSdxOCLnkRS23;dxTabbedMDIRS23;FireDACADSDriver;dxSkinBlackRS23;dxSkinLondonLiquidSkyRS23;dxDBXServerModeRS23;dxHttpIndyRequestRS23;dxPScxGridLnkRS23;cxSchedulerRS23;FireDACMSSQLDriver;vcltouch;vcldb;Intraweb;svn;dxWizardControlRS23;dxSkinMcSkinRS23;dxPScxCommonRS23;Spring.Data;dxSkinOffice2007BlueRS23;dxBarRS23;cxSchedulerRibbonStyleEventEditorRS23;dxSkinOffice2013WhiteRS23;dxPSTeeChartRS23;cxLibraryRS23;dxSkinVisualStudio2013LightRS23;cxPivotGridChartRS23;dxSkinSummer2008RS23;dxPSdxDBOCLnkRS23;dxGDIPlusRS23;dxSkinDarkSideRS23;FireDACDBXDriver;dxSkinFoggyRS23;dxSkinSevenRS23;vclx;dxSkinOffice2010SilverRS23;DataBindingsVCL;dxdborRS23;RESTBackendComponents;dxLayoutControlRS23;dxPSPrVwRibbonRS23;VCLRESTComponents;dxSkinDevExpressStyleRS23;dxSkinWhiteprintRS23;vclie;bindengine;CloudService;FireDACMySQLDriver;dxSkinOffice2013DarkGrayRS23;DataSnapClient;dxPScxPCProdRS23;bindcompdbx;DBXSybaseASEDriver;IndyIPServer;dxSkinPumpkinRS23;IndySystem;dsnapcon;cxTreeListdxBarPopupMenuRS23;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;dxSkinLilianRS23;dxRichEditDocumentModelRS23;dxRichEditCoreRS23;dxSpreadSheetConditionalFormattingDialogsRS23;dxBarDBNavRS23;dxFlowChartRS23;dxSkinOffice2016ColorfulRS23;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;dxSpreadSheetRS23;dxSkinOffice2007PinkRS23;dxPSdxSpreadSheetLnkRS23;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;dxSkinHighContrastRS23;dxSkinSevenClassicRS23;rtl;dxSkinTheAsphaltWorldRS23;DbxClientDriver;dxSkinDevExpressDarkStyleRS23;DBXSybaseASADriver;dxNavBarRS23;dxSkinMetropolisDarkRS23;dxRichEditControlCoreRS23;dxRichEditControlRS23;dxOfficeCoreRS23;appanalytics;cxPivotGridRS23;dxSkinsdxDLPainterRS23;IndyIPClient;dxRibbonRS23;dxPScxVGridLnkRS23;bindcompvcl;frxDB23;dxSkinOffice2007SilverRS23;dxSpreadSheetInplaceRichEditRS23;dxPScxTLLnkRS23;dxMapControlRS23;TeeUI;VclSmp;dxPScxSchedulerLnkRS23;cxTreeListRS23;FireDACODBCDriver;DataSnapIndy10ServerTransport;dxRibbonCustomizationFormRS23;dxPSRichEditControlLnkRS23;dxBarExtDBItemsRS23;DataSnapProviderClient;FireDACMongoDBDriver;dxSpreadSheetReportDesignerRS23;dxSkiniMaginaryRS23;frx23;dxSpellCheckerRS23;dxSkinsdxBarPainterRS23;dxSkinCoffeeRS23;DataSnapServerMidas;RESTComponents;DBXInterBaseDriver;dxADOServerModeRS23;emsclientfiredac;DataSnapFireDAC;svnui;dxmdsRS23;dxSkinLiquidSkyRS23;dxPSDBTeeChartRS23;dxSkinSpringTimeRS23;dxdbtrRS23;dxPSCoreRS23;dxSkinscxPCPainterRS23;DBXMSSQLDriver;dxSkinXmas2008BlueRS23;DatasnapConnectorsFreePascal;bindcompfmx;DBXOracleDriver;dxSkinSilverRS23;dxSkinValentineRS23;inetdb;DataBindings;dxPSdxMapControlLnkRS23;FmxTeeUI;dxBarExtItemsRS23;FireDACIBDriver;fmx;fmxdae;dxServerModeRS23;dxPsPrVwAdvRS23;dxSkinOffice2010BlackRS23;cxPageControlRS23;dxSkinStardustRS23;cxSchedulerGridRS23;dbexpress;IndyCore;dxSkinSharpPlusRS23;dsnap;DataSnapCommon;emsclient;FireDACCommon;dxSkinOffice2010BlueRS23;dxSkinVS2010RS23;dxSkinMetropolisRS23;DataSnapConnectors;cxVerticalGridRS23;soapserver;dxSkinCaramelRS23;frxTee23;dxTileControlRS23;cxGridRS23;FireDACOracleDriver;DBXMySQLDriver;DBXFirebirdDriver;FireDACCommonDriver;inet;IndyIPCommon;dxSkinDarkRoomRS23;dxDockingRS23;vcl;dxSkinOffice2007GreenRS23;dxPScxExtCommonRS23;dxSkinsCoreRS23;FireDACDb2Driver;dxThemeRS23;dxSkinsdxRibbonPainterRS23;dxSkinVisualStudio2013BlueRS23;dxSkinMoneyTwinsRS23;dxPSdxFCLnkRS23;dxtrmdRS23;TeeDB;FireDAC;cxSchedulerTreeBrowserRS23;dxFireDACServerModeRS23;dxSkinBlueRS23;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;cxEditorsRS23;dxSkinGlassOceansRS23;dxSkinsdxNavBarPainterRS23;dxGaugeControlRS23;Tee;dxSkinSharpRS23;DataSnapServer;cxPivotGridOLAPRS23;dxPSdxPDFViewerLnkRS23;vclwinx;FireDACDSDriver;dxSkinBlueprintRS23;dxSkinOffice2007BlackRS23;CustomIPTransport;vcldsnap;dxSkinOffice2013LightGrayRS23;bindcomp;DBXInformixDriver;dxPSdxGaugeControlLnkRS23;dxRichEditInplaceRS23;dxPScxPivotGridLnkRS23;dxorgcRS23;dxPSdxDBTVLnkRS23;vclribbon;dbxcds;dxPDFViewerRS23;adortl;dxComnRS23;dsnapxml;dbrtl;inetdbxpress;IndyProtocols;cxExportRS23;dxSkinOffice2016DarkRS23;dxSkinVisualStudio2013DarkRS23;dxSkinscxSchedulerPainterRS23;fmxase;$(DCC_UsePackage) + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + 1033 + + + DBXSqliteDriver;DBXDb2Driver;dxCoreRS23;vclactnband;vclFireDAC;dxPSLnksRS23;dxPSdxLCLnkRS23;tethering;cxDataRS23;dxPSdxOCLnkRS23;dxTabbedMDIRS23;FireDACADSDriver;dxSkinBlackRS23;dxSkinLondonLiquidSkyRS23;dxDBXServerModeRS23;dxHttpIndyRequestRS23;dxPScxGridLnkRS23;cxSchedulerRS23;FireDACMSSQLDriver;vcltouch;vcldb;Intraweb;dxWizardControlRS23;dxSkinMcSkinRS23;dxPScxCommonRS23;Spring.Data;dxSkinOffice2007BlueRS23;dxBarRS23;cxSchedulerRibbonStyleEventEditorRS23;dxSkinOffice2013WhiteRS23;dxPSTeeChartRS23;cxLibraryRS23;dxSkinVisualStudio2013LightRS23;cxPivotGridChartRS23;dxSkinSummer2008RS23;dxPSdxDBOCLnkRS23;dxGDIPlusRS23;dxSkinDarkSideRS23;FireDACDBXDriver;dxSkinFoggyRS23;dxSkinSevenRS23;vclx;dxSkinOffice2010SilverRS23;DataBindingsVCL;dxdborRS23;RESTBackendComponents;dxLayoutControlRS23;dxPSPrVwRibbonRS23;VCLRESTComponents;dxSkinDevExpressStyleRS23;dxSkinWhiteprintRS23;vclie;bindengine;CloudService;FireDACMySQLDriver;dxSkinOffice2013DarkGrayRS23;DataSnapClient;dxPScxPCProdRS23;bindcompdbx;DBXSybaseASEDriver;IndyIPServer;dxSkinPumpkinRS23;IndySystem;dsnapcon;cxTreeListdxBarPopupMenuRS23;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;dxSkinLilianRS23;dxRichEditDocumentModelRS23;dxRichEditCoreRS23;dxSpreadSheetConditionalFormattingDialogsRS23;dxBarDBNavRS23;dxFlowChartRS23;dxSkinOffice2016ColorfulRS23;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;dxSpreadSheetRS23;dxSkinOffice2007PinkRS23;dxPSdxSpreadSheetLnkRS23;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;dxSkinHighContrastRS23;dxSkinSevenClassicRS23;rtl;dxSkinTheAsphaltWorldRS23;DbxClientDriver;dxSkinDevExpressDarkStyleRS23;DBXSybaseASADriver;dxNavBarRS23;dxSkinMetropolisDarkRS23;dxRichEditControlCoreRS23;dxRichEditControlRS23;dxOfficeCoreRS23;appanalytics;cxPivotGridRS23;dxSkinsdxDLPainterRS23;IndyIPClient;dxRibbonRS23;dxPScxVGridLnkRS23;bindcompvcl;dxSkinOffice2007SilverRS23;dxSpreadSheetInplaceRichEditRS23;dxPScxTLLnkRS23;dxMapControlRS23;TeeUI;VclSmp;dxPScxSchedulerLnkRS23;cxTreeListRS23;FireDACODBCDriver;DataSnapIndy10ServerTransport;dxRibbonCustomizationFormRS23;dxPSRichEditControlLnkRS23;dxBarExtDBItemsRS23;DataSnapProviderClient;FireDACMongoDBDriver;dxSpreadSheetReportDesignerRS23;dxSkiniMaginaryRS23;dxSpellCheckerRS23;dxSkinsdxBarPainterRS23;dxSkinCoffeeRS23;DataSnapServerMidas;RESTComponents;DBXInterBaseDriver;dxADOServerModeRS23;emsclientfiredac;DataSnapFireDAC;dxmdsRS23;dxSkinLiquidSkyRS23;dxPSDBTeeChartRS23;dxSkinSpringTimeRS23;dxdbtrRS23;dxPSCoreRS23;dxSkinscxPCPainterRS23;DBXMSSQLDriver;dxSkinXmas2008BlueRS23;DatasnapConnectorsFreePascal;bindcompfmx;DBXOracleDriver;dxSkinSilverRS23;dxSkinValentineRS23;inetdb;DataBindings;dxPSdxMapControlLnkRS23;FmxTeeUI;dxBarExtItemsRS23;FireDACIBDriver;fmx;fmxdae;dxServerModeRS23;dxPsPrVwAdvRS23;dxSkinOffice2010BlackRS23;cxPageControlRS23;dxSkinStardustRS23;cxSchedulerGridRS23;dbexpress;IndyCore;dxSkinSharpPlusRS23;dsnap;DataSnapCommon;emsclient;FireDACCommon;dxSkinOffice2010BlueRS23;dxSkinVS2010RS23;dxSkinMetropolisRS23;DataSnapConnectors;cxVerticalGridRS23;soapserver;dxSkinCaramelRS23;dxTileControlRS23;cxGridRS23;FireDACOracleDriver;DBXMySQLDriver;DBXFirebirdDriver;FireDACCommonDriver;inet;IndyIPCommon;dxSkinDarkRoomRS23;dxDockingRS23;vcl;dxSkinOffice2007GreenRS23;dxPScxExtCommonRS23;dxSkinsCoreRS23;FireDACDb2Driver;dxThemeRS23;dxSkinsdxRibbonPainterRS23;dxSkinVisualStudio2013BlueRS23;dxSkinMoneyTwinsRS23;dxPSdxFCLnkRS23;dxtrmdRS23;TeeDB;FireDAC;cxSchedulerTreeBrowserRS23;dxFireDACServerModeRS23;dxSkinBlueRS23;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;cxEditorsRS23;dxSkinGlassOceansRS23;dxSkinsdxNavBarPainterRS23;dxGaugeControlRS23;Tee;dxSkinSharpRS23;DataSnapServer;cxPivotGridOLAPRS23;dxPSdxPDFViewerLnkRS23;vclwinx;FireDACDSDriver;dxSkinBlueprintRS23;dxSkinOffice2007BlackRS23;CustomIPTransport;vcldsnap;dxSkinOffice2013LightGrayRS23;bindcomp;DBXInformixDriver;dxPSdxGaugeControlLnkRS23;dxRichEditInplaceRS23;dxPScxPivotGridLnkRS23;dxorgcRS23;dxPSdxDBTVLnkRS23;vclribbon;dbxcds;dxPDFViewerRS23;adortl;dxComnRS23;dsnapxml;dbrtl;inetdbxpress;IndyProtocols;cxExportRS23;dxSkinOffice2016DarkRS23;dxSkinVisualStudio2013DarkRS23;dxSkinscxSchedulerPainterRS23;fmxase;$(DCC_UsePackage) + + + DEBUG;$(DCC_Define) + true + false + true + true + true + + + true + true + false + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + true + + + + MainSource + + +
FormMain
+ dfm +
+ + + + + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + +
+ + Delphi.Personality.12 + Application + + + + GoogleSpeak.dpr + + + + + + GoogleSpeak.exe + true + + + + + 1 + + + 1 + + + + + Contents\Resources + 1 + + + + + classes + 1 + + + + + Contents\MacOS + 0 + + + 1 + + + Contents\MacOS + 1 + + + + + 1 + + + 1 + + + 1 + + + + + res\drawable-xxhdpi + 1 + + + + + library\lib\mips + 1 + + + + + 0 + + + 1 + + + Contents\MacOS + 1 + + + 1 + + + library\lib\armeabi-v7a + 1 + + + 1 + + + + + 0 + + + Contents\MacOS + 1 + .framework + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + library\lib\x86 + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + library\lib\armeabi + 1 + + + + + 0 + + + 1 + + + Contents\MacOS + 1 + + + + + 1 + + + 1 + + + 1 + + + + + res\drawable-normal + 1 + + + + + res\drawable-xhdpi + 1 + + + + + res\drawable-large + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ../ + 1 + + + ../ + 1 + + + + + res\drawable-hdpi + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + Contents + 1 + + + + + ../ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + res\values + 1 + + + + + res\drawable-small + 1 + + + + + res\drawable + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + + + res\drawable + 1 + + + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + 0 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 0 + .bpl + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + + + res\drawable-mdpi + 1 + + + + + res\drawable-xlarge + 1 + + + + + res\drawable-ldpi + 1 + + + + + 0 + .dll;.bpl + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + + + + + + + + + + True + False + + + 12 + + + + +
diff --git a/Delphi/GoogleSpeak.dproj.local b/Delphi/GoogleSpeak.dproj.local new file mode 100644 index 0000000..40666e3 --- /dev/null +++ b/Delphi/GoogleSpeak.dproj.local @@ -0,0 +1,15 @@ + + + + 1899-12-30 00:00:00.000.592,C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\CRC32U.pas=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Unit1.pas + 1899-12-30 00:00:00.000.375,C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\GoogleSpeak.dproj=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Project24.dproj + 1899-12-30 00:00:00.000.320,C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\MainU.pas=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Unit28.pas + 1899-12-30 00:00:00.000.320,C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\MainU.dfm=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Unit28.dfm + 1899-12-30 00:00:00.000.851,=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Unit1.pas + 1899-12-30 00:00:00.000.192,=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Unit28.pas + 1899-12-30 00:00:00.000.318,C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\GoogleSpeakU.pas=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Unit1.pas + 1899-12-30 00:00:00.000.239,=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Unit1.pas + 2018-02-25 07:44:41.655,=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\Unit1.pas + 2018-02-25 07:44:58.969,C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\LanguagesU.pas=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\Unit1.pas + + diff --git a/Delphi/GoogleSpeak.dsk b/Delphi/GoogleSpeak.dsk new file mode 100644 index 0000000..ed619b9 --- /dev/null +++ b/Delphi/GoogleSpeak.dsk @@ -0,0 +1,802 @@ +[Closed Files] +File_0=TSourceModule,'c:\program files (x86)\embarcadero\studio\17.0\SOURCE\RTL\SYS\System.SysUtils.pas',0,1,288,3,313,0,0,, +File_1=TSourceModule,'c:\program files (x86)\embarcadero\studio\17.0\SOURCE\VCL\Vcl.MPlayer.pas',0,1,11,27,36,0,0,,{1 +File_2=TSourceModule,'c:\program files (x86)\embarcadero\studio\17.0\SOURCE\VCL\Vcl.Controls.pas',0,1,1,6,9,0,0,, +File_3=TSourceModule,'c:\program files (x86)\embarcadero\studio\17.0\source\rtl\common\System.IOUtils.pas',0,1,853,120,878,0,0,, +File_4=TSourceModule,'c:\program files (x86)\embarcadero\studio\17.0\SOURCE\VCL\Vcl.Forms.pas',0,1,3740,1,3763,0,0,{{1729,4} +File_5=TSourceModule,'c:\program files (x86)\embarcadero\studio\17.0\source\rtl\win\Winapi.Windows.pas',0,1,8255,107,8281,0,0,, +File_6=TSourceModule,'C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Unit26.pas',0,1,1,90,39,0,0,,{1 +File_7=TSourceModule,'C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\ClipBoardMonitorU.pas',0,1,1,75,24,0,0,,{1 +File_8=TSourceModule,'c:\program files (x86)\embarcadero\studio\17.0\source\rtl\win\Winapi.Messages.pas',0,1,1130,5,1155,0,0,, +File_9=TSourceModule,'C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\HukoFtpU.pas',0,1,1,1,13,0,0,, +File_10=TSourceModule,'C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Unit23.pas',0,1,1,1,1,0,0,, +File_11=TSourceModule,'C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Unit22.pas',0,1,97,36,119,0,0,,{1 +File_12=TSourceModule,'C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\QuestionPosterU.pas',0,1,60,63,60,0,0,,{1 +File_13=TSourceModule,'C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\GoogleSpeakU.pas',0,1,1,30,66,0,0,, +File_14=TSourceModule,'c:\program files (x86)\embarcadero\studio\17.0\source\data\ado\Data.Win.ADODB.pas',0,1,2563,1,2591,0,0,, + +[Modules] +Module0=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\MainU.pas +Module1=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\LanguagesU.pas +Module2=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\GoogleSpeakU.pas +Count=3 +EditWindowCount=1 + +[C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\MainU.pas] +ModuleType=TSourceModule +FormState=1 +FormOnTop=0 + +[C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\LanguagesU.pas] +ModuleType=TSourceModule +FormState=0 +FormOnTop=0 + +[C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\GoogleSpeakU.pas] +ModuleType=TSourceModule +FormState=0 +FormOnTop=0 + +[EditWindow0] +ViewCount=3 +CurrentEditView=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\MainU.pas +View0=0 +View1=1 +View2=2 +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=10000 +Height=9342 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=10000 +ClientHeight=9342 +DockedToMainForm=1 +BorlandEditorCodeExplorer=BorlandEditorCodeExplorer@EditWindow0 +TopPanelSize=0 +LeftPanelSize=0 +RightPanelSize=0 +BottomPanelSize=1550 +BottomPanelClients=DockSite1,MessageView +BottomPanelData=0000080001020100000009000000446F636B5369746531803E000000000000020E060000000000000100000000803E00000F0000004D65737361676556696577466F726DFFFFFFFF +BottomMiddlePanelSize=0 +BottomMiddlePanelClients=DockSite0,GraphDrawingModel +BottomMiddelPanelData=0000080001020200000009000000446F636B536974653010000000477261706844726177696E67566965779F1D00000000000002F706000000000000FFFFFFFF + +[View0] +CustomEditViewType=TEditView +Module=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\MainU.pas +CursorX=153 +CursorY=15 +TopLine=1 +LeftCol=1 +Elisions= +Bookmarks= +EditViewName=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\MainU.pas + +[View1] +CustomEditViewType=TEditView +Module=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\GoogleSpeakU.pas +CursorX=111 +CursorY=38 +TopLine=19 +LeftCol=1 +Elisions= +Bookmarks={1,102,3}{2,76,11} +EditViewName=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\GoogleSpeakU.pas + +[View2] +CustomEditViewType=TEditView +Module=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\LanguagesU.pas +CursorX=133 +CursorY=41 +TopLine=1 +LeftCol=1 +Elisions= +Bookmarks={1,163,1} +EditViewName=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\LanguagesU.pas + +[Watches] +Count=0 + +[WatchWindow] +WatchColumnWidth=120 +WatchShowColumnHeaders=1 +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3823 +Height=1133 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3823 +ClientHeight=1133 +TBDockHeight=217 +LRDockWidth=13604 +Dockable=1 +StayOnTop=0 + +[Breakpoints] +Count=0 + +[EmbarcaderoWin32Debugger_AddressBreakpoints] +Count=0 + +[EmbarcaderoWin64Debugger_AddressBreakpoints] +Count=0 + +[EmbarcaderoAndroidDebugger_AddressBreakpoints] +Count=0 + +[Main Window] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=0 +State=2 +Left=146 +Top=275 +Width=8932 +Height=8525 +MaxLeft=-5 +MaxTop=-8 +MaxWidth=8932 +MaxHeight=8525 +ClientWidth=10000 +ClientHeight=9808 +BottomPanelSize=9342 +BottomPanelClients=EditWindow0 +BottomPanelData=0000080000000000000000000000000000000000000000000000000100000000000000000C0000004564697457696E646F775F30FFFFFFFF + +[ProjectManager] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=1917 +Height=4050 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1917 +ClientHeight=4050 +TBDockHeight=5900 +LRDockWidth=2349 +Dockable=1 +StayOnTop=0 + +[MessageView] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=23 +Width=10000 +Height=1358 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=10000 +ClientHeight=1358 +TBDockHeight=1358 +LRDockWidth=2771 +Dockable=1 +StayOnTop=0 + +[ToolForm] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=1917 +Height=3825 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1917 +ClientHeight=3825 +TBDockHeight=7150 +LRDockWidth=2000 +Dockable=1 +StayOnTop=0 + +[ClipboardHistory] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=0 +State=0 +Left=0 +Top=0 +Width=1271 +Height=3717 +MaxLeft=-5 +MaxTop=-8 +ClientWidth=1188 +ClientHeight=3392 +TBDockHeight=3717 +LRDockWidth=1271 +Dockable=1 +StayOnTop=0 + +[ProjectStatistics] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=0 +State=0 +Left=0 +Top=0 +Width=1375 +Height=4275 +MaxLeft=-5 +MaxTop=-8 +ClientWidth=1292 +ClientHeight=3950 +TBDockHeight=4275 +LRDockWidth=1375 +Dockable=1 +StayOnTop=0 + +[ClassBrowserTool] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=-3484 +Top=-217 +Width=1849 +Height=3142 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1849 +ClientHeight=3142 +TBDockHeight=3142 +LRDockWidth=1849 +Dockable=1 +StayOnTop=0 + +[MetricsView] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2339 +Height=1250 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2339 +ClientHeight=1250 +TBDockHeight=4833 +LRDockWidth=3562 +Dockable=1 +StayOnTop=0 + +[QAView] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2339 +Height=1250 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2339 +ClientHeight=1250 +TBDockHeight=4833 +LRDockWidth=3562 +Dockable=1 +StayOnTop=0 + +[PropertyInspector] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=0 +State=0 +Left=10458 +Top=2017 +Width=1896 +Height=3875 +MaxLeft=-5 +MaxTop=-8 +ClientWidth=1812 +ClientHeight=3550 +TBDockHeight=7508 +LRDockWidth=1896 +Dockable=1 +StayOnTop=0 +SplitPos=106 + +[PropInspDesignerSelection] +ArrangeBy=Name +SelectedItem=Action, +ExpandedItems=Anchors=0,BorderIcons=0,Constraints=0,Font=0,GlassFrame=0,HorzScrollBar=0,LiveBindings=0,"LiveBindings Designer=0",Margins=0,Padding=0,StyleElements=0 + +[frmDesignPreview] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=1917 +Height=4050 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1917 +ClientHeight=4050 +TBDockHeight=5958 +LRDockWidth=2510 +Dockable=1 +StayOnTop=0 + +[TFileExplorerForm] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=-2282 +Top=16 +Width=2844 +Height=6200 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2844 +ClientHeight=6200 +TBDockHeight=6200 +LRDockWidth=2844 +Dockable=1 +StayOnTop=0 + +[TemplateView] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=-3464 +Top=282 +Width=276 +Height=358 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=276 +ClientHeight=358 +TBDockHeight=358 +LRDockWidth=276 +Dockable=1 +StayOnTop=0 +Name=120 +Description=334 +filter=1 + +[DebugLogView] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3823 +Height=1133 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3823 +ClientHeight=1133 +TBDockHeight=408 +LRDockWidth=4953 +Dockable=1 +StayOnTop=0 + +[ThreadStatusWindow] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3823 +Height=1133 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3823 +ClientHeight=1133 +TBDockHeight=217 +LRDockWidth=7406 +Dockable=1 +StayOnTop=0 +Column0Width=145 +Column1Width=100 +Column2Width=115 +Column3Width=250 + +[LocalVarsWindow] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3823 +Height=1133 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3823 +ClientHeight=1133 +TBDockHeight=1533 +LRDockWidth=3484 +Dockable=1 +StayOnTop=0 + +[CallStackWindow] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3823 +Height=1133 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3823 +ClientHeight=1133 +TBDockHeight=2067 +LRDockWidth=3484 +Dockable=1 +StayOnTop=0 + +[FindReferencsForm] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2339 +Height=1017 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2339 +ClientHeight=1017 +TBDockHeight=2317 +LRDockWidth=2823 +Dockable=1 +StayOnTop=0 + +[RefactoringForm] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2339 +Height=1250 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2339 +ClientHeight=1250 +TBDockHeight=3208 +LRDockWidth=2823 +Dockable=1 +StayOnTop=0 + +[ToDo List] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2339 +Height=1250 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2339 +ClientHeight=1250 +TBDockHeight=1158 +LRDockWidth=3677 +Dockable=1 +StayOnTop=0 +Column0Width=314 +Column1Width=30 +Column2Width=150 +Column3Width=172 +Column4Width=129 +SortOrder=4 +ShowHints=1 +ShowChecked=1 + +[DataExplorerContainer] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=1917 +Height=4050 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1917 +ClientHeight=4050 +TBDockHeight=4883 +LRDockWidth=7151 +Dockable=1 +StayOnTop=0 + +[GraphDrawingModel] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=370 +Top=963 +Width=2854 +Height=3208 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2854 +ClientHeight=3208 +TBDockHeight=3208 +LRDockWidth=2854 +Dockable=1 +StayOnTop=0 + +[BreakpointWindow] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3823 +Height=1133 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3823 +ClientHeight=1133 +TBDockHeight=1550 +LRDockWidth=8740 +Dockable=1 +StayOnTop=0 +Column0Width=200 +Column1Width=75 +Column2Width=200 +Column3Width=200 +Column4Width=200 +Column5Width=75 +Column6Width=75 + +[StructureView] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=1812 +Height=3125 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1812 +ClientHeight=3125 +TBDockHeight=3675 +LRDockWidth=1896 +Dockable=1 +StayOnTop=0 + +[TestInsightForm] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=0 +State=0 +Left=0 +Top=0 +Width=2969 +Height=2733 +MaxLeft=-5 +MaxTop=-8 +ClientWidth=2885 +ClientHeight=2408 +TBDockHeight=2733 +LRDockWidth=2969 +Dockable=1 +StayOnTop=0 +TabIndex=0 + +[ModelViewTool] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=1917 +Height=4050 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1917 +ClientHeight=4050 +TBDockHeight=4883 +LRDockWidth=5307 +Dockable=1 +StayOnTop=0 + +[BorlandEditorCodeExplorer@EditWindow0] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=0 +State=0 +Left=0 +Top=0 +Width=1823 +Height=6175 +MaxLeft=-5 +MaxTop=-8 +ClientWidth=1740 +ClientHeight=5850 +TBDockHeight=6175 +LRDockWidth=1823 +Dockable=1 +StayOnTop=0 + +[DockHosts] +DockHostCount=5 + +[DockSite0] +HostDockSite=DockBottomCenterPanel +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2339 +Height=1475 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2339 +ClientHeight=1475 +TBDockHeight=1475 +LRDockWidth=2339 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=RefactoringForm +TabDockClients=RefactoringForm,FindReferencsForm,ToDo List,MetricsView,QAView + +[DockSite1] +HostDockSite=DockBottomPanel +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=0 +Top=23 +Width=3823 +Height=1358 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3823 +ClientHeight=1358 +TBDockHeight=1358 +LRDockWidth=3823 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=DebugLogView +TabDockClients=DebugLogView,BreakpointWindow,ThreadStatusWindow,CallStackWindow,WatchWindow,LocalVarsWindow + +[DockSite2] +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=1 +Docked=0 +State=0 +Left=12453 +Top=450 +Width=2000 +Height=4600 +MaxLeft=-5 +MaxTop=-8 +ClientWidth=1917 +ClientHeight=4275 +TBDockHeight=7508 +LRDockWidth=2000 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=ProjectManager +TabDockClients=ProjectManager,ModelViewTool,DataExplorerContainer,frmDesignPreview,TFileExplorerForm + +[DockSite3] +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=1 +Docked=0 +State=0 +Left=17302 +Top=1550 +Width=1896 +Height=3450 +MaxLeft=-5 +MaxTop=-8 +ClientWidth=1812 +ClientHeight=3125 +TBDockHeight=7508 +LRDockWidth=1896 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=StructureView +TabDockClients=StructureView,ClassBrowserTool + +[DockSite4] +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=1 +Docked=0 +State=0 +Left=15042 +Top=942 +Width=2000 +Height=4150 +MaxLeft=-5 +MaxTop=-8 +ClientWidth=1917 +ClientHeight=3825 +TBDockHeight=7508 +LRDockWidth=2000 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=ToolForm +TabDockClients=ToolForm,TemplateView + diff --git a/Delphi/GoogleSpeak.identcache b/Delphi/GoogleSpeak.identcache new file mode 100644 index 0000000..23b26b9 Binary files /dev/null and b/Delphi/GoogleSpeak.identcache differ diff --git a/Delphi/GoogleSpeak.res b/Delphi/GoogleSpeak.res new file mode 100644 index 0000000..20ba553 Binary files /dev/null and b/Delphi/GoogleSpeak.res differ diff --git a/Delphi/GoogleSpeak.skincfg b/Delphi/GoogleSpeak.skincfg new file mode 100644 index 0000000..c03ee5a --- /dev/null +++ b/Delphi/GoogleSpeak.skincfg @@ -0,0 +1,55 @@ +[ExpressSkins] +Default=1 +ShowNotifications=1 +Enabled=0 +dxSkinBlack=1 +dxSkinBlue=1 +dxSkinBlueprint=1 +dxSkinCaramel=1 +dxSkinCoffee=1 +dxSkinDarkRoom=1 +dxSkinDarkSide=1 +dxSkinDevExpressDarkStyle=1 +dxSkinDevExpressStyle=1 +dxSkinFoggy=1 +dxSkinGlassOceans=1 +dxSkinHighContrast=1 +dxSkiniMaginary=1 +dxSkinLilian=1 +dxSkinLiquidSky=1 +dxSkinLondonLiquidSky=1 +dxSkinMcSkin=1 +dxSkinMetropolis=1 +dxSkinMetropolisDark=1 +dxSkinMoneyTwins=1 +dxSkinOffice2007Black=1 +dxSkinOffice2007Blue=1 +dxSkinOffice2007Green=1 +dxSkinOffice2007Pink=1 +dxSkinOffice2007Silver=1 +dxSkinOffice2010Black=1 +dxSkinOffice2010Blue=1 +dxSkinOffice2010Silver=1 +dxSkinOffice2013DarkGray=1 +dxSkinOffice2013LightGray=1 +dxSkinOffice2013White=1 +dxSkinOffice2016Colorful=1 +dxSkinOffice2016Dark=1 +dxSkinPumpkin=1 +dxSkinSeven=1 +dxSkinSevenClassic=1 +dxSkinSharp=1 +dxSkinSharpPlus=1 +dxSkinSilver=1 +dxSkinSpringTime=1 +dxSkinStardust=1 +dxSkinSummer2008=1 +dxSkinTheAsphaltWorld=1 +dxSkinsDefaultPainters=1 +dxSkinValentine=1 +dxSkinVisualStudio2013Blue=1 +dxSkinVisualStudio2013Dark=1 +dxSkinVisualStudio2013Light=1 +dxSkinVS2010=1 +dxSkinWhiteprint=1 +dxSkinXmas2008Blue=1 diff --git a/Delphi/GoogleSpeak.stat b/Delphi/GoogleSpeak.stat new file mode 100644 index 0000000..7505bf8 --- /dev/null +++ b/Delphi/GoogleSpeak.stat @@ -0,0 +1,10 @@ +[Stats] +EditorSecs=1975 +DesignerSecs=8 +InspectorSecs=30 +CompileSecs=39015 +OtherSecs=56 +StartTime=24-02-2018 16:06:23 +RealKeys=0 +EffectiveKeys=0 +DebugSecs=163 diff --git a/Delphi/GoogleSpeak.~dsk b/Delphi/GoogleSpeak.~dsk new file mode 100644 index 0000000..e748358 --- /dev/null +++ b/Delphi/GoogleSpeak.~dsk @@ -0,0 +1,779 @@ +[Closed Files] +File_0=TSourceModule,'c:\program files (x86)\embarcadero\studio\17.0\SOURCE\VCL\Vcl.MPlayer.pas',0,1,11,27,36,0,0,,{1 +File_1=TSourceModule,'c:\program files (x86)\embarcadero\studio\17.0\SOURCE\VCL\Vcl.Controls.pas',0,1,1,6,9,0,0,, +File_2=TSourceModule,'c:\program files (x86)\embarcadero\studio\17.0\source\rtl\common\System.IOUtils.pas',0,1,853,120,878,0,0,, +File_3=TSourceModule,'c:\program files (x86)\embarcadero\studio\17.0\SOURCE\VCL\Vcl.Forms.pas',0,1,3740,1,3763,0,0,{{1729,4} +File_4=TSourceModule,'c:\program files (x86)\embarcadero\studio\17.0\SOURCE\RTL\SYS\System.SysUtils.pas',0,1,10763,25,10788,0,0,, +File_5=TSourceModule,'c:\program files (x86)\embarcadero\studio\17.0\source\rtl\win\Winapi.Windows.pas',0,1,8255,107,8281,0,0,, +File_6=TSourceModule,'C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Unit26.pas',0,1,1,90,39,0,0,,{1 +File_7=TSourceModule,'C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\ClipBoardMonitorU.pas',0,1,1,75,24,0,0,,{1 +File_8=TSourceModule,'c:\program files (x86)\embarcadero\studio\17.0\source\rtl\win\Winapi.Messages.pas',0,1,1130,5,1155,0,0,, +File_9=TSourceModule,'C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\HukoFtpU.pas',0,1,1,1,13,0,0,, +File_10=TSourceModule,'C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Unit23.pas',0,1,1,1,1,0,0,, +File_11=TSourceModule,'C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Unit22.pas',0,1,97,36,119,0,0,,{1 +File_12=TSourceModule,'C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\QuestionPosterU.pas',0,1,60,63,60,0,0,,{1 +File_13=TSourceModule,'C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\GoogleSpeakU.pas',0,1,1,30,66,0,0,, +File_14=TSourceModule,'c:\program files (x86)\embarcadero\studio\17.0\source\data\ado\Data.Win.ADODB.pas',0,1,2563,1,2591,0,0,, + +[Modules] +Module0=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\GoogleSpeakU.pas +Module1=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\MainU.pas +Count=2 +EditWindowCount=1 + +[C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\GoogleSpeakU.pas] +ModuleType=TSourceModule +FormState=0 +FormOnTop=0 + +[C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\MainU.pas] +ModuleType=TSourceModule +FormState=1 +FormOnTop=0 + +[EditWindow0] +ViewCount=2 +CurrentEditView=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\GoogleSpeakU.pas +View0=0 +View1=1 +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=10000 +Height=9342 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=10000 +ClientHeight=9342 +DockedToMainForm=1 +BorlandEditorCodeExplorer=BorlandEditorCodeExplorer@EditWindow0 +TopPanelSize=0 +LeftPanelSize=0 +RightPanelSize=0 +BottomPanelSize=1550 +BottomPanelClients=DockSite1,MessageView +BottomPanelData=0000080001020100000009000000446F636B5369746531803E000000000000020E060000000000000100000000803E00000F0000004D65737361676556696577466F726DFFFFFFFF +BottomMiddlePanelSize=0 +BottomMiddlePanelClients=DockSite0,GraphDrawingModel +BottomMiddelPanelData=0000080001020200000009000000446F636B536974653010000000477261706844726177696E67566965779F1D00000000000002F706000000000000FFFFFFFF + +[View0] +CustomEditViewType=TEditView +Module=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\MainU.pas +CursorX=1 +CursorY=30 +TopLine=1 +LeftCol=1 +Elisions= +Bookmarks= +EditViewName=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\MainU.pas + +[View1] +CustomEditViewType=TEditView +Module=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\GoogleSpeakU.pas +CursorX=44 +CursorY=58 +TopLine=19 +LeftCol=1 +Elisions= +Bookmarks={1,72,1}{2,69,11} +EditViewName=C:\Users\Jens Borrisholt\Documents\Embarcadero\Studio\Projects\Google Speak\Delphi\GoogleSpeakU.pas + +[Watches] +Count=0 + +[WatchWindow] +WatchColumnWidth=120 +WatchShowColumnHeaders=1 +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3823 +Height=1192 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3823 +ClientHeight=1192 +TBDockHeight=217 +LRDockWidth=13604 +Dockable=1 +StayOnTop=0 + +[Breakpoints] +Count=0 + +[EmbarcaderoWin32Debugger_AddressBreakpoints] +Count=0 + +[EmbarcaderoWin64Debugger_AddressBreakpoints] +Count=0 + +[EmbarcaderoAndroidDebugger_AddressBreakpoints] +Count=0 + +[Main Window] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=0 +State=2 +Left=8797 +Top=3875 +Width=8932 +Height=8525 +MaxLeft=-5 +MaxTop=-8 +MaxWidth=8932 +MaxHeight=8525 +ClientWidth=10000 +ClientHeight=9808 +BottomPanelSize=9342 +BottomPanelClients=EditWindow0 +BottomPanelData=0000080000000000000000000000000000000000000000000000000100000000000000000C0000004564697457696E646F775F30FFFFFFFF + +[ProjectManager] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=1917 +Height=4050 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1917 +ClientHeight=4050 +TBDockHeight=5900 +LRDockWidth=2349 +Dockable=1 +StayOnTop=0 + +[MessageView] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=23 +Width=10000 +Height=1358 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=10000 +ClientHeight=1358 +TBDockHeight=1358 +LRDockWidth=2771 +Dockable=1 +StayOnTop=0 + +[ToolForm] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=1917 +Height=3825 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1917 +ClientHeight=3825 +TBDockHeight=7150 +LRDockWidth=2000 +Dockable=1 +StayOnTop=0 + +[ClipboardHistory] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=0 +State=0 +Left=0 +Top=0 +Width=1271 +Height=3717 +MaxLeft=-5 +MaxTop=-8 +ClientWidth=1188 +ClientHeight=3392 +TBDockHeight=3717 +LRDockWidth=1271 +Dockable=1 +StayOnTop=0 + +[ProjectStatistics] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=0 +State=0 +Left=0 +Top=0 +Width=1375 +Height=4275 +MaxLeft=-5 +MaxTop=-8 +ClientWidth=1292 +ClientHeight=3950 +TBDockHeight=4275 +LRDockWidth=1375 +Dockable=1 +StayOnTop=0 + +[ClassBrowserTool] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=-8 +Top=-31 +Width=1849 +Height=3142 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1849 +ClientHeight=3142 +TBDockHeight=3142 +LRDockWidth=1849 +Dockable=1 +StayOnTop=0 + +[MetricsView] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2339 +Height=1250 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2339 +ClientHeight=1250 +TBDockHeight=4833 +LRDockWidth=3562 +Dockable=1 +StayOnTop=0 + +[QAView] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2339 +Height=1250 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2339 +ClientHeight=1250 +TBDockHeight=4833 +LRDockWidth=3562 +Dockable=1 +StayOnTop=0 + +[PropertyInspector] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=0 +State=0 +Left=10458 +Top=2017 +Width=1896 +Height=3875 +MaxLeft=-5 +MaxTop=-8 +ClientWidth=1812 +ClientHeight=3550 +TBDockHeight=7508 +LRDockWidth=1896 +Dockable=1 +StayOnTop=0 +SplitPos=106 + +[frmDesignPreview] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=1917 +Height=4050 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1917 +ClientHeight=4050 +TBDockHeight=5958 +LRDockWidth=2510 +Dockable=1 +StayOnTop=0 + +[TFileExplorerForm] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=-8 +Top=-31 +Width=2844 +Height=6200 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2844 +ClientHeight=6200 +TBDockHeight=6200 +LRDockWidth=2844 +Dockable=1 +StayOnTop=0 + +[TemplateView] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=-8 +Top=-31 +Width=276 +Height=358 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=276 +ClientHeight=358 +TBDockHeight=358 +LRDockWidth=276 +Dockable=1 +StayOnTop=0 +Name=120 +Description=334 +filter=1 + +[DebugLogView] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3823 +Height=1192 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3823 +ClientHeight=1192 +TBDockHeight=408 +LRDockWidth=4953 +Dockable=1 +StayOnTop=0 + +[ThreadStatusWindow] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3823 +Height=1192 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3823 +ClientHeight=1192 +TBDockHeight=217 +LRDockWidth=7406 +Dockable=1 +StayOnTop=0 +Column0Width=145 +Column1Width=100 +Column2Width=115 +Column3Width=250 + +[LocalVarsWindow] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3823 +Height=1192 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3823 +ClientHeight=1192 +TBDockHeight=1533 +LRDockWidth=3484 +Dockable=1 +StayOnTop=0 + +[CallStackWindow] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3823 +Height=1192 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3823 +ClientHeight=1192 +TBDockHeight=2067 +LRDockWidth=3484 +Dockable=1 +StayOnTop=0 + +[FindReferencsForm] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2339 +Height=1250 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2339 +ClientHeight=1250 +TBDockHeight=2317 +LRDockWidth=2823 +Dockable=1 +StayOnTop=0 + +[RefactoringForm] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2339 +Height=1250 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2339 +ClientHeight=1250 +TBDockHeight=3208 +LRDockWidth=2823 +Dockable=1 +StayOnTop=0 + +[ToDo List] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2339 +Height=1250 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2339 +ClientHeight=1250 +TBDockHeight=1158 +LRDockWidth=3677 +Dockable=1 +StayOnTop=0 +Column0Width=314 +Column1Width=30 +Column2Width=150 +Column3Width=172 +Column4Width=129 +SortOrder=4 +ShowHints=1 +ShowChecked=1 + +[DataExplorerContainer] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=1917 +Height=4050 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1917 +ClientHeight=4050 +TBDockHeight=4883 +LRDockWidth=7151 +Dockable=1 +StayOnTop=0 + +[GraphDrawingModel] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2854 +Height=3208 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2854 +ClientHeight=3208 +TBDockHeight=3208 +LRDockWidth=2854 +Dockable=1 +StayOnTop=0 + +[BreakpointWindow] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3823 +Height=1192 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3823 +ClientHeight=1192 +TBDockHeight=1550 +LRDockWidth=8740 +Dockable=1 +StayOnTop=0 +Column0Width=200 +Column1Width=75 +Column2Width=200 +Column3Width=200 +Column4Width=200 +Column5Width=75 +Column6Width=75 + +[StructureView] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=1812 +Height=3125 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1812 +ClientHeight=3125 +TBDockHeight=3675 +LRDockWidth=1896 +Dockable=1 +StayOnTop=0 + +[TestInsightForm] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=0 +State=0 +Left=0 +Top=0 +Width=2969 +Height=2733 +MaxLeft=-5 +MaxTop=-8 +ClientWidth=2885 +ClientHeight=2408 +TBDockHeight=2733 +LRDockWidth=2969 +Dockable=1 +StayOnTop=0 +TabIndex=0 + +[ModelViewTool] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=1917 +Height=4050 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1917 +ClientHeight=4050 +TBDockHeight=4883 +LRDockWidth=5307 +Dockable=1 +StayOnTop=0 + +[BorlandEditorCodeExplorer@EditWindow0] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=0 +State=0 +Left=0 +Top=0 +Width=1823 +Height=6175 +MaxLeft=-5 +MaxTop=-8 +ClientWidth=1740 +ClientHeight=5850 +TBDockHeight=6175 +LRDockWidth=1823 +Dockable=1 +StayOnTop=0 + +[DockHosts] +DockHostCount=5 + +[DockSite0] +HostDockSite=DockBottomCenterPanel +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2339 +Height=1475 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2339 +ClientHeight=1475 +TBDockHeight=1475 +LRDockWidth=2339 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=RefactoringForm +TabDockClients=RefactoringForm,FindReferencsForm,ToDo List,MetricsView,QAView + +[DockSite1] +HostDockSite=DockBottomPanel +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3823 +Height=1417 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3823 +ClientHeight=1417 +TBDockHeight=1417 +LRDockWidth=3823 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=DebugLogView +TabDockClients=DebugLogView,BreakpointWindow,ThreadStatusWindow,CallStackWindow,WatchWindow,LocalVarsWindow + +[DockSite2] +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=0 +Docked=0 +State=0 +Left=12453 +Top=450 +Width=2000 +Height=4600 +MaxLeft=-5 +MaxTop=-8 +ClientWidth=1917 +ClientHeight=4275 +TBDockHeight=7508 +LRDockWidth=2000 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=ProjectManager +TabDockClients=ProjectManager,ModelViewTool,DataExplorerContainer,frmDesignPreview,TFileExplorerForm + +[DockSite3] +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=0 +Docked=0 +State=0 +Left=17302 +Top=1550 +Width=1896 +Height=3450 +MaxLeft=-5 +MaxTop=-8 +ClientWidth=1812 +ClientHeight=3125 +TBDockHeight=7508 +LRDockWidth=1896 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=StructureView +TabDockClients=StructureView,ClassBrowserTool + +[DockSite4] +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=0 +Docked=0 +State=0 +Left=15042 +Top=942 +Width=2000 +Height=4150 +MaxLeft=-5 +MaxTop=-8 +ClientWidth=1917 +ClientHeight=3825 +TBDockHeight=7508 +LRDockWidth=2000 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=ToolForm +TabDockClients=ToolForm,TemplateView + diff --git a/Delphi/GoogleSpeakU.pas b/Delphi/GoogleSpeakU.pas new file mode 100644 index 0000000..ac82e7a --- /dev/null +++ b/Delphi/GoogleSpeakU.pas @@ -0,0 +1,108 @@ +unit GoogleSpeakU; + +interface + +uses + System.Classes, System.SysUtils, VCL.Forms, VCL.MPlayer, VCL.Controls, LanguagesU; +{$M+} + +type + TGoogleSpeak = class(TComponent) + private + FMediaPlayer: TMediaPlayer; + FUseCache: Boolean; + FDownloadFolder: string; + FBuffer: TStringlist; + FLanguage: TLanguage; + procedure SayNext; + procedure MediaPlayerNotify(Sender: TObject); + function DownloadFile(aText: String; aLanguage: TLanguage): string; + published + property Language: TLanguage read FLanguage write FLanguage; + public + constructor Create(AOwner: TWinControl; AUseCache: Boolean = True; aLanguageCode: string = 'da'); reintroduce; + destructor Destroy; override; + procedure Say(aText: String; aLanguage: TLanguage = nil); overload; + procedure Say(aText: String; aLanguageCode: string); overload; + end; + +implementation + +uses + System.Types, System.IOUtils, + IdURI, UrlMon, CRC32U; + +{ TGoogleSpeak } + +constructor TGoogleSpeak.Create(AOwner: TWinControl; AUseCache: Boolean; aLanguageCode: string); +begin + inherited Create(AOwner); + FUseCache := AUseCache; + FDownloadFolder := ExtractFilePath(ParamStr(0)) + 'Cache\'; + ForceDirectories(FDownloadFolder); + + FBuffer := TStringlist.Create; + FMediaPlayer := TMediaPlayer.Create(self); + FMediaPlayer.OnNotify := MediaPlayerNotify; + + FMediaPlayer.Parent := AOwner; + FMediaPlayer.Visible := False; + FLanguage := TLanguages.FromCode(aLanguageCode); +end; + +destructor TGoogleSpeak.Destroy; +begin + FBuffer.Free; + if not FUseCache then + TDirectory.Delete(FDownloadFolder); + inherited; +end; + +function TGoogleSpeak.DownloadFile(aText: String; aLanguage: TLanguage): string; +var + Url: String; +begin + Url := 'https://translate.googleapis.com/translate_tts?ie=UTF-8&q=' + TIdURI.PathEncode(aText) + '&tl=' + aLanguage.Code + '&total=1&idx=0&textlen=' + aText.Length.ToString + '&client=gtx'; + Result := FDownloadFolder + TCrc32.Hash(aText).ToString + '.mp3'; + + if (FUseCache and TFile.Exists(Result)) then + exit; + + URLDownloadToFile(nil, pchar(Url), pchar(Result), 0, nil); +end; + +procedure TGoogleSpeak.MediaPlayerNotify(Sender: TObject); +begin + SayNext; +end; + +procedure TGoogleSpeak.Say(aText: String; aLanguage: TLanguage = nil); +begin + if aLanguage = nil then + aLanguage := FLanguage; + + FBuffer.AddObject(aText, aLanguage); + if not(FMediaPlayer.Mode in [TMPModes.mpPlaying, TMPModes.mpSeeking, TMPModes.mpPaused]) then + SayNext; +end; + +procedure TGoogleSpeak.Say(aText, aLanguageCode: string); +var + Language : TLanguage; +begin + Language := TLanguages.FromCode(aLanguageCode); + Say(aText, Language); +end; + +procedure TGoogleSpeak.SayNext; +begin + if FBuffer.Count = 0 then + exit; + + FMediaPlayer.FileName := DownloadFile(FBuffer[0], TLanguage(FBuffer.Objects[0])); + FBuffer.Delete(0); + FMediaPlayer.Open; + FMediaPlayer.Play; +end; + +end. diff --git a/Delphi/LanguagesU.pas b/Delphi/LanguagesU.pas new file mode 100644 index 0000000..410d529 --- /dev/null +++ b/Delphi/LanguagesU.pas @@ -0,0 +1,175 @@ +unit LanguagesU; + +interface + +uses + System.Generics.Collections; + +type + TLanguage = class + Code: string; + Name: string; + private + constructor Create(aName, aCode: string); + end; + + TLanguages = class + private + class var FList: TObjectList; + public + class constructor Create; + class destructor Destroy; + class property List: TObjectList read FList; + class function FromCode(aCode: String): TLanguage; + class function FromName(aName: String): TLanguage; + end; + +implementation + +{ TLanguages } + +class constructor TLanguages.Create; +begin + FList := TObjectList.Create; + FList.Add(TLanguage.Create('Afrikaans', 'af')); + FList.Add(TLanguage.Create('Albanian', 'sq')); + FList.Add(TLanguage.Create('Amharic', 'am')); + FList.Add(TLanguage.Create('Arabic', 'ar')); + FList.Add(TLanguage.Create('Armenian', 'hy')); + FList.Add(TLanguage.Create('Azeerbaijani', 'az')); + FList.Add(TLanguage.Create('Basque', 'eu')); + FList.Add(TLanguage.Create('Belarusian', 'be')); + FList.Add(TLanguage.Create('Bengali', 'bn')); + FList.Add(TLanguage.Create('Bosnian', 'bs')); + FList.Add(TLanguage.Create('Bulgarian', 'bg')); + FList.Add(TLanguage.Create('Catalan', 'ca')); + FList.Add(TLanguage.Create('Cebuano', 'ceb (ISO-639-2)')); + FList.Add(TLanguage.Create('Chinese (Simplified)', 'zh-CN')); + FList.Add(TLanguage.Create('Chinese (Traditional)', 'zh-TW')); + FList.Add(TLanguage.Create('Corsican', 'co')); + FList.Add(TLanguage.Create('Croatian', 'hr')); + FList.Add(TLanguage.Create('Czech', 'cs')); + FList.Add(TLanguage.Create('Danish', 'da')); + FList.Add(TLanguage.Create('Dutch', 'nl')); + FList.Add(TLanguage.Create('English', 'en')); + FList.Add(TLanguage.Create('Esperanto', 'eo')); + FList.Add(TLanguage.Create('Estonian', 'et')); + FList.Add(TLanguage.Create('Finnish', 'fi')); + FList.Add(TLanguage.Create('French', 'fr')); + FList.Add(TLanguage.Create('Frisian', 'fy')); + FList.Add(TLanguage.Create('Galician', 'gl')); + FList.Add(TLanguage.Create('Georgian', 'ka')); + FList.Add(TLanguage.Create('German', 'de')); + FList.Add(TLanguage.Create('Greek', 'el')); + FList.Add(TLanguage.Create('Gujarati', 'gu')); + FList.Add(TLanguage.Create('Haitian Creole', 'ht')); + FList.Add(TLanguage.Create('Hausa', 'ha')); + FList.Add(TLanguage.Create('Hawaiian', 'haw')); + FList.Add(TLanguage.Create('Hebrew', 'iw')); + FList.Add(TLanguage.Create('Hindi', 'hi')); + FList.Add(TLanguage.Create('Hmong', 'hmn')); + FList.Add(TLanguage.Create('Hungarian', 'hu')); + FList.Add(TLanguage.Create('Icelandic', 'is')); + FList.Add(TLanguage.Create('Igbo', 'ig')); + FList.Add(TLanguage.Create('Indonesian', 'id')); + FList.Add(TLanguage.Create('Irish', 'ga')); + FList.Add(TLanguage.Create('Italian', 'it')); + FList.Add(TLanguage.Create('Japanese', 'ja')); + FList.Add(TLanguage.Create('Javanese', 'jw')); + FList.Add(TLanguage.Create('Kannada', 'kn')); + FList.Add(TLanguage.Create('Kazakh', 'kk')); + FList.Add(TLanguage.Create('Khmer', 'km')); + FList.Add(TLanguage.Create('Korean', 'ko')); + FList.Add(TLanguage.Create('Kurdish', 'ku')); + FList.Add(TLanguage.Create('Kyrgyz', 'ky')); + FList.Add(TLanguage.Create('Lao', 'lo')); + FList.Add(TLanguage.Create('Latin', 'la')); + FList.Add(TLanguage.Create('Latvian', 'lv')); + FList.Add(TLanguage.Create('Lithuanian', 'lt')); + FList.Add(TLanguage.Create('Luxembourgish', 'lb')); + FList.Add(TLanguage.Create('Macedonian', 'mk')); + FList.Add(TLanguage.Create('Malagasy', 'mg')); + FList.Add(TLanguage.Create('Malay', 'ms')); + FList.Add(TLanguage.Create('Malayalam', 'ml')); + FList.Add(TLanguage.Create('Maltese', 'mt')); + FList.Add(TLanguage.Create('Maori', 'mi')); + FList.Add(TLanguage.Create('Marathi', 'mr')); + FList.Add(TLanguage.Create('Mongolian', 'mn')); + FList.Add(TLanguage.Create('Myanmar (Burmese)', 'my')); + FList.Add(TLanguage.Create('Nepali', 'ne')); + FList.Add(TLanguage.Create('Norwegian', 'no')); + FList.Add(TLanguage.Create('Nyanja (Chichewa)', 'ny')); + FList.Add(TLanguage.Create('Pashto', 'ps')); + FList.Add(TLanguage.Create('Persian', 'fa')); + FList.Add(TLanguage.Create('Polish', 'pl')); + FList.Add(TLanguage.Create('Portuguese (Portugal, Brazil)', 'pt')); + FList.Add(TLanguage.Create('Punjabi', 'pa')); + FList.Add(TLanguage.Create('Romanian', 'ro')); + FList.Add(TLanguage.Create('Russian', 'ru')); + FList.Add(TLanguage.Create('Samoan', 'sm')); + FList.Add(TLanguage.Create('Scots Gaelic', 'gd')); + FList.Add(TLanguage.Create('Serbian', 'sr')); + FList.Add(TLanguage.Create('Sesotho', 'st')); + FList.Add(TLanguage.Create('Shona', 'sn')); + FList.Add(TLanguage.Create('Sindhi', 'sd')); + FList.Add(TLanguage.Create('Sinhala (Sinhalese)', 'si')); + FList.Add(TLanguage.Create('Slovak', 'sk')); + FList.Add(TLanguage.Create('Slovenian', 'sl')); + FList.Add(TLanguage.Create('Somali', 'so')); + FList.Add(TLanguage.Create('Spanish', 'es')); + FList.Add(TLanguage.Create('Sundanese', 'su')); + FList.Add(TLanguage.Create('Swahili', 'sw')); + FList.Add(TLanguage.Create('Swedish', 'sv')); + FList.Add(TLanguage.Create('Tagalog (Filipino)', 'tl')); + FList.Add(TLanguage.Create('Tajik', 'tg')); + FList.Add(TLanguage.Create('Tamil', 'ta')); + FList.Add(TLanguage.Create('Telugu', 'te')); + FList.Add(TLanguage.Create('Thai', 'th')); + FList.Add(TLanguage.Create('Turkish', 'tr')); + FList.Add(TLanguage.Create('Ukrainian', 'uk')); + FList.Add(TLanguage.Create('Urdu', 'ur')); + FList.Add(TLanguage.Create('Uzbek', 'uz')); + FList.Add(TLanguage.Create('Vietnamese', 'vi')); + FList.Add(TLanguage.Create('Welsh', 'cy')); + FList.Add(TLanguage.Create('Xhosa', 'xh')); + FList.Add(TLanguage.Create('Yiddish', 'yi')); + FList.Add(TLanguage.Create('Yoruba', 'yo')); + FList.Add(TLanguage.Create('Zulu', 'zu')); +end; + +class destructor TLanguages.Destroy; +begin + FList.Free; +end; + +class function TLanguages.FromCode(aCode: String): TLanguage; +var + Language: TLanguage; +begin + for Language in FList do + if Language.Code = aCode then + exit(Language); + + exit(nil); +end; + +class function TLanguages.FromName(aName: String): TLanguage; +var + Language: TLanguage; +begin + for Language in FList do + if Language.Name = aName then + exit(Language); + + exit(nil); +end; + +{ TLanguage } + +constructor TLanguage.Create(aName, aCode: string); +begin + Code := aCode; + Name := aName; +end; + +end. diff --git a/Delphi/MainU.dfm b/Delphi/MainU.dfm new file mode 100644 index 0000000..971791e --- /dev/null +++ b/Delphi/MainU.dfm @@ -0,0 +1,17 @@ +object FormMain: TFormMain + Left = 0 + Top = 0 + Caption = 'Demo' + ClientHeight = 336 + ClientWidth = 635 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 +end diff --git a/Delphi/MainU.pas b/Delphi/MainU.pas new file mode 100644 index 0000000..2ac38d3 --- /dev/null +++ b/Delphi/MainU.pas @@ -0,0 +1,35 @@ +unit MainU; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, GoogleSpeakU; + +type + TFormMain = class(TForm) + procedure FormCreate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + FormMain: TFormMain; + +implementation + +{$R *.dfm} + +procedure TFormMain.FormCreate(Sender: TObject); +begin + with TGoogleSpeak.Create(Self) do + begin + Say('Her er en hest'); + Say('og en hest mere'); + Say('and yet another one', 'en'); + end; +end; + +end.