From f7646a7f5531fdf3fa4cf52de894b863973677a3 Mon Sep 17 00:00:00 2001 From: Jared Goodwin Date: Fri, 17 May 2019 17:30:08 -0700 Subject: [PATCH] Code cleanup. Modified selection behavior on data grid. --- .../Capture/AudioCapturer.cs | 62 +++++++++++++++++++ .../Capture/CursorIconWatcher.cs | 5 +- Remotely_ScreenCast.Win/Program.cs | 38 +----------- .../Remotely_ScreenCast.Win.csproj | 1 + Remotely_Server/CurrentVersion.txt | 2 +- Remotely_Server/wwwroot/scripts/DataGrid.js | 6 ++ .../wwwroot/scripts/DataGrid.js.map | 2 +- Remotely_Server/wwwroot/scripts/DataGrid.ts | 6 ++ Remotely_Server/wwwroot/scripts/Sound.js | 6 -- Remotely_Server/wwwroot/scripts/Sound.js.map | 2 +- Remotely_Server/wwwroot/scripts/Sound.ts | 7 --- 11 files changed, 83 insertions(+), 54 deletions(-) create mode 100644 Remotely_ScreenCast.Win/Capture/AudioCapturer.cs diff --git a/Remotely_ScreenCast.Win/Capture/AudioCapturer.cs b/Remotely_ScreenCast.Win/Capture/AudioCapturer.cs new file mode 100644 index 00000000..bcf4afdb --- /dev/null +++ b/Remotely_ScreenCast.Win/Capture/AudioCapturer.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NAudio.Wave; +using Remotely_ScreenCast.Core; + +namespace Remotely_ScreenCast.Win.Capture +{ + public class AudioCapturer + { + public AudioCapturer(Conductor conductor) + { + Conductor = conductor; + } + private WasapiLoopbackCapture Capturer { get; set; } + private WaveFormat TargetFormat { get; set; } + private Conductor Conductor { get; set; } + + public void Start() + { + try + { + Capturer = new WasapiLoopbackCapture(); + TargetFormat = new WaveFormat(16000, 8, 1); + Capturer.DataAvailable += async (aud, args) => + { + try + { + if (args.BytesRecorded > 0) + { + using (var ms1 = new MemoryStream()) + { + using (var wfw = new WaveFileWriter(ms1, Capturer.WaveFormat)) + { + wfw.Write(args.Buffer, 0, args.BytesRecorded); + } + // Resample to 16-bit so Firefox will play it. + using (var ms2 = new MemoryStream(ms1.ToArray())) + using (var wfr = new WaveFileReader(ms2)) + using (var ms3 = new MemoryStream()) + { + using (var resampler = new MediaFoundationResampler(wfr, TargetFormat)) + { + WaveFileWriter.WriteWavFileToStream(ms3, resampler); + } + await Conductor.CasterSocket.SendAudioSample(ms3.ToArray(), Conductor.Viewers.Keys.ToList()); + } + } + + } + } + catch { } + }; + Capturer.StartRecording(); + } + catch { } + } + } +} diff --git a/Remotely_ScreenCast.Win/Capture/CursorIconWatcher.cs b/Remotely_ScreenCast.Win/Capture/CursorIconWatcher.cs index 28a70429..1234d7f4 100644 --- a/Remotely_ScreenCast.Win/Capture/CursorIconWatcher.cs +++ b/Remotely_ScreenCast.Win/Capture/CursorIconWatcher.cs @@ -65,9 +65,8 @@ namespace Remotely_ScreenCast.Win.Capture } else { - return new CursorInfo(new byte[0], Point.Empty, "none"); + return new CursorInfo(new byte[0], Point.Empty, "default"); } - } catch { @@ -116,7 +115,7 @@ namespace Remotely_ScreenCast.Win.Capture else if (PreviousCursorHandle != "0") { PreviousCursorHandle = "0"; - OnChange?.Invoke(this, new CursorInfo(new byte[0], Point.Empty, "none")); + OnChange?.Invoke(this, new CursorInfo(new byte[0], Point.Empty, "default")); } } catch diff --git a/Remotely_ScreenCast.Win/Program.cs b/Remotely_ScreenCast.Win/Program.cs index 00a2748a..1622de20 100644 --- a/Remotely_ScreenCast.Win/Program.cs +++ b/Remotely_ScreenCast.Win/Program.cs @@ -29,7 +29,7 @@ namespace Remotely_ScreenCast.Win { public static Conductor Conductor { get; private set; } public static CursorIconWatcher CursorIconWatcher { get; private set; } - public static WasapiLoopbackCapture AudioCapturer { get; private set; } + public static AudioCapturer AudioCapturer { get; private set; } public static void Main(string[] args) { @@ -41,6 +41,7 @@ namespace Remotely_ScreenCast.Win Conductor.Connect().Wait(); Conductor.SetMessageHandlers(new WinInput()); Conductor.ScreenCastInitiated += ScreenCastInitiated; + AudioCapturer = new AudioCapturer(Conductor); CursorIconWatcher = new CursorIconWatcher(Conductor); CursorIconWatcher.OnChange += CursorIconWatcher_OnChange; Conductor.CasterSocket.SendDeviceInfo(Conductor.ServiceID, Environment.MachineName).Wait(); @@ -93,42 +94,9 @@ namespace Remotely_ScreenCast.Win } await Conductor.CasterSocket.SendCursorChange(CursorIconWatcher.GetCurrentCursor(), new List() { screenCastRequest.ViewerID }); ScreenCaster.BeginScreenCasting(screenCastRequest.ViewerID, screenCastRequest.RequesterName, capturer, Conductor); - BeginAudioCapture(); + AudioCapturer.Start(); } - private static void BeginAudioCapture() - { - - AudioCapturer = new WasapiLoopbackCapture(); - AudioCapturer.DataAvailable += async (aud, args) => - { - if (args.BytesRecorded > 0) - { - using (var ms1 = new MemoryStream()) - { - using (var wfw = new WaveFileWriter(ms1, AudioCapturer.WaveFormat)) - { - wfw.Write(args.Buffer, 0, args.BytesRecorded); - } - // Resample to 16-bit so Firefox will play it. - using (var ms2 = new MemoryStream(ms1.ToArray())) - using (var wfr = new WaveFileReader(ms2)) - using (var ms3 = new MemoryStream()) - { - using (var resampler = new MediaFoundationResampler(wfr, new WaveFormat(AudioCapturer.WaveFormat.SampleRate, 16, AudioCapturer.WaveFormat.Channels))) - { - WaveFileWriter.WriteWavFileToStream(ms3, resampler); - } - await Conductor.CasterSocket.SendAudioSample(ms3.ToArray(), Conductor.Viewers.Keys.ToList()); - } - } - - } - }; - AudioCapturer.StartRecording(); - } - - public static async void CursorIconWatcher_OnChange(object sender, CursorInfo cursor) { if (Conductor?.CasterSocket != null) diff --git a/Remotely_ScreenCast.Win/Remotely_ScreenCast.Win.csproj b/Remotely_ScreenCast.Win/Remotely_ScreenCast.Win.csproj index 87eb917c..33015052 100644 --- a/Remotely_ScreenCast.Win/Remotely_ScreenCast.Win.csproj +++ b/Remotely_ScreenCast.Win/Remotely_ScreenCast.Win.csproj @@ -154,6 +154,7 @@ + diff --git a/Remotely_Server/CurrentVersion.txt b/Remotely_Server/CurrentVersion.txt index ae68d920..76124fc7 100644 --- a/Remotely_Server/CurrentVersion.txt +++ b/Remotely_Server/CurrentVersion.txt @@ -1 +1 @@ -2019.05.17.1222 +2019.05.17.1718 diff --git a/Remotely_Server/wwwroot/scripts/DataGrid.js b/Remotely_Server/wwwroot/scripts/DataGrid.js index 118d3402..0ac053ba 100644 --- a/Remotely_Server/wwwroot/scripts/DataGrid.js +++ b/Remotely_Server/wwwroot/scripts/DataGrid.js @@ -24,6 +24,12 @@ export function AddOrUpdateDevice(device) { recordRow.id = device.ID; tableBody.appendChild(recordRow); recordRow.addEventListener("click", (e) => { + if (!e.ctrlKey && !e.shiftKey) { + var selectedID = e.currentTarget.id; + DeviceGrid.querySelectorAll(`.record-row.row-selected:not([id='${selectedID}'])`).forEach(elem => { + elem.classList.remove("row-selected"); + }); + } e.currentTarget.classList.toggle("row-selected"); UpdateDeviceCounts(); }); diff --git a/Remotely_Server/wwwroot/scripts/DataGrid.js.map b/Remotely_Server/wwwroot/scripts/DataGrid.js.map index 21ee1a51..49ff6f43 100644 --- a/Remotely_Server/wwwroot/scripts/DataGrid.js.map +++ b/Remotely_Server/wwwroot/scripts/DataGrid.js.map @@ -1 +1 @@ -{"version":3,"file":"DataGrid.js","sourceRoot":"","sources":["DataGrid.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"DataGrid.js","sourceRoot":"","sources":["DataGrid.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Remotely_Server/wwwroot/scripts/DataGrid.ts b/Remotely_Server/wwwroot/scripts/DataGrid.ts index 172981ea..73bf26f5 100644 --- a/Remotely_Server/wwwroot/scripts/DataGrid.ts +++ b/Remotely_Server/wwwroot/scripts/DataGrid.ts @@ -28,6 +28,12 @@ export function AddOrUpdateDevice(device: Device) { recordRow.id = device.ID; tableBody.appendChild(recordRow); recordRow.addEventListener("click", (e) => { + if (!e.ctrlKey && !e.shiftKey) { + var selectedID = (e.currentTarget as HTMLElement).id; + DeviceGrid.querySelectorAll(`.record-row.row-selected:not([id='${selectedID}'])`).forEach(elem => { + elem.classList.remove("row-selected"); + }); + } (e.currentTarget as HTMLElement).classList.toggle("row-selected"); UpdateDeviceCounts(); }); diff --git a/Remotely_Server/wwwroot/scripts/Sound.js b/Remotely_Server/wwwroot/scripts/Sound.js index 7731382e..3b5ca3e2 100644 --- a/Remotely_Server/wwwroot/scripts/Sound.js +++ b/Remotely_Server/wwwroot/scripts/Sound.js @@ -17,12 +17,6 @@ export const Sound = new class { bufferSource.start(); }; fr.readAsArrayBuffer(new Blob([buffer], { 'type': 'audio/wav' })); - //var blob = new Blob([buffer], { 'type': 'audio/wav' }); - //var src = URL.createObjectURL(blob); - //var audioElement = new Audio(src); - //var sourceNode = this.Context.createMediaElementSource(audioElement); - //sourceNode.connect(this.Context.destination); - //audioElement.play(); } ; }; diff --git a/Remotely_Server/wwwroot/scripts/Sound.js.map b/Remotely_Server/wwwroot/scripts/Sound.js.map index 7d2e6328..522a9501 100644 --- a/Remotely_Server/wwwroot/scripts/Sound.js.map +++ b/Remotely_Server/wwwroot/scripts/Sound.js.map @@ -1 +1 @@ -{"version":3,"file":"Sound.js","sourceRoot":"","sources":["Sound.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI;IACrB;QAOA,kBAAa,GAA4B,IAAI,KAAK,EAAoB,CAAC;QACvE,gBAAW,GAAuC,IAAI,KAAK,EAA+B,CAAC;QAPvF,IAAI,CAAC,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,IAAI,CAAC,eAAe,GAAG,IAAI,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAClF,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1D,CAAC;IAQD,IAAI,CAAC,MAAkB;QAEnB,IAAI,EAAE,GAAG,IAAI,UAAU,EAAE,CAAC;QAC1B,EAAE,CAAC,MAAM,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE;YACrB,IAAI,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,MAAqB,CAAC,CAAC;YAC/E,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;YACrD,YAAY,CAAC,MAAM,GAAG,WAAW,CAAC;YAClC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC/C,YAAY,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC,CAAA;QAED,EAAE,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QAElE,yDAAyD;QACzD,sCAAsC;QACtC,oCAAoC;QACpC,uEAAuE;QACvE,+CAA+C;QAC/C,sBAAsB;IAC1B,CAAC;IAAA,CAAC;CACL,CAAA"} \ No newline at end of file +{"version":3,"file":"Sound.js","sourceRoot":"","sources":["Sound.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI;IACrB;QAOA,kBAAa,GAA4B,IAAI,KAAK,EAAoB,CAAC;QACvE,gBAAW,GAAuC,IAAI,KAAK,EAA+B,CAAC;QAPvF,IAAI,CAAC,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,IAAI,CAAC,eAAe,GAAG,IAAI,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAClF,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1D,CAAC;IAQD,IAAI,CAAC,MAAkB;QAEnB,IAAI,EAAE,GAAG,IAAI,UAAU,EAAE,CAAC;QAC1B,EAAE,CAAC,MAAM,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE;YACrB,IAAI,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,MAAqB,CAAC,CAAC;YAC/E,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;YACrD,YAAY,CAAC,MAAM,GAAG,WAAW,CAAC;YAClC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC/C,YAAY,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC,CAAA;QAED,EAAE,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IACtE,CAAC;IAAA,CAAC;CACL,CAAA"} \ No newline at end of file diff --git a/Remotely_Server/wwwroot/scripts/Sound.ts b/Remotely_Server/wwwroot/scripts/Sound.ts index bc11a7ff..a6147843 100644 --- a/Remotely_Server/wwwroot/scripts/Sound.ts +++ b/Remotely_Server/wwwroot/scripts/Sound.ts @@ -26,12 +26,5 @@ export const Sound = new class { } fr.readAsArrayBuffer(new Blob([buffer], { 'type': 'audio/wav' })); - - //var blob = new Blob([buffer], { 'type': 'audio/wav' }); - //var src = URL.createObjectURL(blob); - //var audioElement = new Audio(src); - //var sourceNode = this.Context.createMediaElementSource(audioElement); - //sourceNode.connect(this.Context.destination); - //audioElement.play(); }; } \ No newline at end of file