From 5829b8e577978b6e867c0e0834e1af50179c5277 Mon Sep 17 00:00:00 2001 From: Andrei Ignat Date: Tue, 5 Nov 2024 20:57:39 +0200 Subject: [PATCH] speaking defaults --- v2/GeneratorVideo/Program.cs | 4 ++-- v2/GeneratorVideo/StartProjectVSCode.cs | 5 +++- v2/GeneratorVideo/StartTourVSCode.cs | 5 +++- v2/GeneratorVideo/Step.cs | 31 +++++++++++++++++++++++-- v2/GeneratorVideo/StepBrowser.cs | 7 +++++- v2/GeneratorVideo/StepExecuteProgram.cs | 14 +++++++---- v2/GeneratorVideo/StepHide.cs | 5 ++++ v2/GeneratorVideo/StepText.cs | 20 ++++------------ v2/GeneratorVideo/StepWait.cs | 4 ++++ v2/GeneratorVideo/VideoData.cs | 16 ++++++++----- v2/GeneratorVideo/VideoJson.cs | 4 +++- 11 files changed, 81 insertions(+), 34 deletions(-) diff --git a/v2/GeneratorVideo/Program.cs b/v2/GeneratorVideo/Program.cs index 87746810f..15eb7303c 100644 --- a/v2/GeneratorVideo/Program.cs +++ b/v2/GeneratorVideo/Program.cs @@ -45,8 +45,8 @@ using var v = new VideoData(file); var res=await v.Analyze(); Console.WriteLine($"analysis successfull {res} , steps : {v.NrSteps()}"); - Console.WriteLine(await v.Execute()); - Console.ReadLine(); + Console.WriteLine(await v.ExecuteToDetermineDuration()); + //Console.ReadLine(); } catch (Exception ex) { diff --git a/v2/GeneratorVideo/StartProjectVSCode.cs b/v2/GeneratorVideo/StartProjectVSCode.cs index 8426a1446..ddf7b390b 100644 --- a/v2/GeneratorVideo/StartProjectVSCode.cs +++ b/v2/GeneratorVideo/StartProjectVSCode.cs @@ -9,7 +9,10 @@ internal record StartProjectVSCode(string text, string value) : newStep(text, va public override void Dispose() { } - + public override void InitDefaults() + { + this.SpeakTest = "I am launching now the project " + value; + } public override async Task Execute() { InputSimulator inputSimulator = new InputSimulator(); diff --git a/v2/GeneratorVideo/StartTourVSCode.cs b/v2/GeneratorVideo/StartTourVSCode.cs index 3a12bbaea..4cb2e7291 100644 --- a/v2/GeneratorVideo/StartTourVSCode.cs +++ b/v2/GeneratorVideo/StartTourVSCode.cs @@ -1,7 +1,10 @@ namespace GeneratorVideo; internal record StartTourVSCode(string text, string value) : newStep(text,value) { - + public override void InitDefaults() + { + this.SpeakTest = "I am now going to show you the more relevant codes "; + } public override async Task Execute() { ArgumentNullException.ThrowIfNullOrWhiteSpace(base.OriginalFileNameFromWhereTheStepIsComing); diff --git a/v2/GeneratorVideo/Step.cs b/v2/GeneratorVideo/Step.cs index 7d15c9ee5..a0542a952 100644 --- a/v2/GeneratorVideo/Step.cs +++ b/v2/GeneratorVideo/Step.cs @@ -1,9 +1,14 @@ -namespace GeneratorVideo; +using System.Media; +using Windows.Media.SpeechSynthesis; + +namespace GeneratorVideo; public class Step { public string typeStep { get; set; } = string.Empty; public string arg { get; set; } = string.Empty; + public long DurationSeconds { get; set; } = 0; + public string SpeakTest { get; set; }=string.Empty; } [System.Runtime.Versioning.SupportedOSPlatform("windows")] internal abstract record newStep(string typeScript, string arg):IParsable, IDisposable @@ -12,8 +17,30 @@ internal abstract record newStep(string typeScript, string arg):IParsable this.GetType().Name + " " + typeScript + " " + arg; + + public long DurationSeconds { get; set; } + public string SpeakTest { get; internal set; } = string.Empty; + internal async Task Talk(bool speak) + { + if (!speak) + { + return; + } + if(string.IsNullOrWhiteSpace(SpeakTest)) + return; + using SpeechSynthesizer synth = new(); + + var stream = await synth.SynthesizeTextToStreamAsync(SpeakTest); + + + using var audioStream = stream.AsStreamForRead(); + + var player = new SoundPlayer(audioStream); + player.PlaySync(); + + } public static newStep Parse(string s, IFormatProvider? provider) { if(TryParse(s,provider, out var value)) diff --git a/v2/GeneratorVideo/StepBrowser.cs b/v2/GeneratorVideo/StepBrowser.cs index 721d87bc3..612b43edd 100644 --- a/v2/GeneratorVideo/StepBrowser.cs +++ b/v2/GeneratorVideo/StepBrowser.cs @@ -7,7 +7,8 @@ namespace GeneratorVideo; [System.Runtime.Versioning.SupportedOSPlatform("windows")] internal record StepBrowser(string text, string value) : newStep(text,value) -{ +{ + //[DllImport("User32.dll")] //public static extern IntPtr GetDC(IntPtr hwnd); //[DllImport("User32.dll")] @@ -22,6 +23,10 @@ public override void Dispose() } } + public override void InitDefaults() + { + this.SpeakTest = "I am launching browser with "+ value ; + } public override async Task Execute() { diff --git a/v2/GeneratorVideo/StepExecuteProgram.cs b/v2/GeneratorVideo/StepExecuteProgram.cs index d4f3df30d..07c61d622 100644 --- a/v2/GeneratorVideo/StepExecuteProgram.cs +++ b/v2/GeneratorVideo/StepExecuteProgram.cs @@ -14,14 +14,15 @@ public override void Dispose() } } - public override Task Execute() + string program = "", args = ""; + public override void InitDefaults() { - string program = "", args = ""; + var whereExe = value.IndexOf(".exe"); if (whereExe > 0) { - program = value.Substring(0, whereExe+4); - args = value.Substring(whereExe + 1+4); + program = value.Substring(0, whereExe + 4); + args = value.Substring(whereExe + 1 + 4); } else { @@ -30,6 +31,11 @@ public override Task Execute() program = data[0]; args = string.Join(' ', data.Where((_, i) => i > 0).ToArray()); } + + this.SpeakTest = "I am starting " + program; + } + public override Task Execute() + { Console.WriteLine($"start program {program} with args {args}"); process=Process.Start(program, args); return Task.CompletedTask; diff --git a/v2/GeneratorVideo/StepHide.cs b/v2/GeneratorVideo/StepHide.cs index 5525e658b..c2830e0d2 100644 --- a/v2/GeneratorVideo/StepHide.cs +++ b/v2/GeneratorVideo/StepHide.cs @@ -6,6 +6,11 @@ public override void Dispose() { } + public override void InitDefaults() + { + this.SpeakTest = ""; + } + public override Task Execute() { return Task.CompletedTask; diff --git a/v2/GeneratorVideo/StepText.cs b/v2/GeneratorVideo/StepText.cs index 52ef32e40..49e1d7f90 100644 --- a/v2/GeneratorVideo/StepText.cs +++ b/v2/GeneratorVideo/StepText.cs @@ -5,26 +5,14 @@ namespace GeneratorVideo; internal record StepText(string text, string value) : newStep(text, value) { - public override void Dispose() + public override void InitDefaults() { + this.SpeakTest = value; } - private async Task Talk(bool speak) + public override void Dispose() { - if(!speak) - { - return; - } - using SpeechSynthesizer synth = new(); - - var stream = await synth.SynthesizeTextToStreamAsync(value); - - - using var audioStream = stream.AsStreamForRead(); - - var player = new SoundPlayer(audioStream); - player.PlaySync(); - } + public override async Task Execute() { await Task.Delay(1000); diff --git a/v2/GeneratorVideo/StepWait.cs b/v2/GeneratorVideo/StepWait.cs index 39849ba1f..2a81dbe57 100644 --- a/v2/GeneratorVideo/StepWait.cs +++ b/v2/GeneratorVideo/StepWait.cs @@ -9,4 +9,8 @@ public override async Task Execute() public override void Dispose() { } + public override void InitDefaults() + { + this.SpeakTest = ""; + } } diff --git a/v2/GeneratorVideo/VideoData.cs b/v2/GeneratorVideo/VideoData.cs index d9cb59f6f..2a1d99d1b 100644 --- a/v2/GeneratorVideo/VideoData.cs +++ b/v2/GeneratorVideo/VideoData.cs @@ -27,29 +27,32 @@ public async Task Analyze() } public int NrSteps() => vdata?.steps.Length ?? 0; - public async Task Execute() + public async Task ExecuteToDetermineDuration() { if (vdata == null) return false; var execSteps=vdata.realSteps.OrderBy(it=>it.Number).ToArray(); var nr = execSteps.Length; InputSimulator inputSimulator = new InputSimulator(); - + long Duration = 0; for (var iStep=0;iStep" + step.value); - //if (step.Number < 12) continue; + var now = DateTime.Now; // await step.Execute(); - if(iStep <= nr - 1) + var DurationSeconds = DateTime.Now.Subtract(now).TotalSeconds; + step.DurationSeconds= (long)DurationSeconds; + Duration += step.DurationSeconds; + if (iStep <= nr - 1) { - Console.WriteLine("========>next step" + execSteps[iStep + 1].Description); + Console.WriteLine("========>next step " + execSteps[iStep + 1].Description); } else { Console.WriteLine("no next step"); } - Console.ReadLine(); + //Console.ReadLine(); await Task.Delay(2000); } @@ -59,6 +62,7 @@ public async Task Execute() return false; } } + Console.WriteLine($"Duration Seconds={Duration}"); return true; } public void Dispose() diff --git a/v2/GeneratorVideo/VideoJson.cs b/v2/GeneratorVideo/VideoJson.cs index ac266ff1e..06a594e22 100644 --- a/v2/GeneratorVideo/VideoJson.cs +++ b/v2/GeneratorVideo/VideoJson.cs @@ -20,7 +20,9 @@ internal class VideoJson var step = data.steps[i]; var newStep= GeneratorVideo.newStep.Parse("step_"+ i + "_"+step.typeStep + GeneratorVideo.newStep.esc + step.arg, null); newStep.OriginalFileNameFromWhereTheStepIsComing = fileName; - + newStep.DurationSeconds = step.DurationSeconds; + newStep.SpeakTest = step.SpeakTest; + newStep.Number = (i+1); steps.Add(newStep); } data.realSteps= steps.ToArray();