From e02c8c19abbf3245c1c7a85f350b6c25df364b27 Mon Sep 17 00:00:00 2001 From: Kyle Grierson Date: Tue, 15 Jun 2021 12:20:45 +0100 Subject: [PATCH 1/2] Add Volume --- .../Pages/Example.razor | 26 +++++++++++++++++++ src/Howler.Blazor/Components/HowlGlobal.cs | 7 ++++- src/Howler.Blazor/Components/IHowlGlobal.cs | 1 + src/Howler.Blazor/wwwroot/JsInteropHowl.js | 5 +++- 4 files changed, 37 insertions(+), 2 deletions(-) diff --git a/examples/Howler.Blazor-WASM-AudioPlayer/Pages/Example.razor b/examples/Howler.Blazor-WASM-AudioPlayer/Pages/Example.razor index 3d05fbe..1d3ace9 100644 --- a/examples/Howler.Blazor-WASM-AudioPlayer/Pages/Example.razor +++ b/examples/Howler.Blazor-WASM-AudioPlayer/Pages/Example.razor @@ -47,12 +47,25 @@ Speed Down + + + + + Volume Up + + + + + + Volume Down +
TotalTime : @TotalTime
State : @State
Playback Rate : @Rate
+
Volume: @Volume
Supported Codes : @SupportedCodes
ErrorMessage : @ErrorMessage
@@ -62,6 +75,7 @@ private const double MinRate = 0.25; protected TimeSpan TotalTime; protected double Rate = 1.0; + private double Volume = 0.5; protected string State = "-"; protected string SupportedCodes; public string ErrorMessage = ""; @@ -245,4 +259,16 @@ await Howl.Pause(id); } } + private async Task VolumeUp() + { + Volume += 0.1; + await HowlGlobal.Volume(Volume); + } + + private async Task VolumeDown() + { + Volume -= 0.1; + await HowlGlobal.Volume(Volume); + } + } \ No newline at end of file diff --git a/src/Howler.Blazor/Components/HowlGlobal.cs b/src/Howler.Blazor/Components/HowlGlobal.cs index 040814c..7cbfa0e 100644 --- a/src/Howler.Blazor/Components/HowlGlobal.cs +++ b/src/Howler.Blazor/Components/HowlGlobal.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading.Tasks; using Microsoft.JSInterop; @@ -30,5 +30,10 @@ public ValueTask IsCodecSupported(string? extension) { return _runtime.InvokeAsync("howler.isCodecSupported", extension); } + + public ValueTask Volume(double volume) + { + return _runtime.InvokeVoidAsync("howler.volume", volume); + } } } \ No newline at end of file diff --git a/src/Howler.Blazor/Components/IHowlGlobal.cs b/src/Howler.Blazor/Components/IHowlGlobal.cs index 4f10a80..9860db9 100644 --- a/src/Howler.Blazor/Components/IHowlGlobal.cs +++ b/src/Howler.Blazor/Components/IHowlGlobal.cs @@ -17,5 +17,6 @@ public interface IHowlGlobal ValueTask GetCodecs(); ValueTask IsCodecSupported(string? extension); + ValueTask Volume(double volume); } } \ No newline at end of file diff --git a/src/Howler.Blazor/wwwroot/JsInteropHowl.js b/src/Howler.Blazor/wwwroot/JsInteropHowl.js index 3d097f3..69dfba5 100644 --- a/src/Howler.Blazor/wwwroot/JsInteropHowl.js +++ b/src/Howler.Blazor/wwwroot/JsInteropHowl.js @@ -160,7 +160,10 @@ window.howler = { }, isCodecSupported: function (extension) { return extension ? Howler._codecs[extension.replace(/^x-/, '')] : false; - } + }, + volume: function (volume) { + Howler.volume(volume); + }, }; function getHowl(id) { From 471ade929574804aba29a1f2d09dd702ed3e0a87 Mon Sep 17 00:00:00 2001 From: Kyle Grierson Date: Tue, 15 Jun 2021 14:04:36 +0100 Subject: [PATCH 2/2] Include in Howl --- .../Pages/Example.razor | 18 ++++++++++++++---- src/Howler.Blazor/Components/Howl.cs | 7 ++++++- src/Howler.Blazor/Components/IHowl.cs | 2 ++ src/Howler.Blazor/wwwroot/JsInteropHowl.js | 8 ++++++++ 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/examples/Howler.Blazor-WASM-AudioPlayer/Pages/Example.razor b/examples/Howler.Blazor-WASM-AudioPlayer/Pages/Example.razor index 1d3ace9..81d6f21 100644 --- a/examples/Howler.Blazor-WASM-AudioPlayer/Pages/Example.razor +++ b/examples/Howler.Blazor-WASM-AudioPlayer/Pages/Example.razor @@ -182,12 +182,13 @@ { ErrorMessage = string.Empty; Rate = 1.0; + Volume = 0.5; var options = new HowlOptions { Sources = new[] { "https://lookandstore.blob.core.windows.net/863da396-6e44-4b3b-8db1-e447d87b121f/instrumental_mp3_637141046337946343_99lfo/instrumental_mp3?sv=2018-03-28&sr=b&sig=96LJ7bycF3lrtiWbVP5tK6%2BOOIJKfq7eYPO%2FjOT72ns%3D&se=2022-10-04T18%3A23%3A53Z&sp=rl" }, Formats = new[] { "mp3" }, - Volume = 0.5 + Volume = Volume }; SoundIds.Add(await Howl.Play(options)); @@ -197,12 +198,13 @@ { ErrorMessage = string.Empty; Rate = 1.0; + Volume = 0.25; var options = new HowlOptions { Sources = new[] { "https://lookandstore.blob.core.windows.net/863da396-6e44-4b3b-8db1-e447d87b121f/instrumental_mp3_637141046337946343_99lfo/instrumental_mp3?sv=2018-03-28&sr=b&sig=96LJ7bycF3lrtiWbVP5tK6%2BOOIJKfq7eYPO%2FjOT72ns%3D&se=2022-10-04T18%3A23%3A53Z&sp=rl" }, Formats = new[] { "mp3" }, - Volume = 0.25 + Volume = Volume }; SoundIds.Add(await Howl.Play(options)); @@ -262,13 +264,21 @@ private async Task VolumeUp() { Volume += 0.1; - await HowlGlobal.Volume(Volume); + // await HowlGlobal.Volume(Volume); + foreach (int id in SoundIds) + { + await Howl.Volume(Volume, id); + } } private async Task VolumeDown() { Volume -= 0.1; - await HowlGlobal.Volume(Volume); + // await HowlGlobal.Volume(Volume); + foreach (int id in SoundIds) + { + await Howl.Volume(Volume, id); + } } } \ No newline at end of file diff --git a/src/Howler.Blazor/Components/Howl.cs b/src/Howler.Blazor/Components/Howl.cs index e274d31..23b745d 100644 --- a/src/Howler.Blazor/Components/Howl.cs +++ b/src/Howler.Blazor/Components/Howl.cs @@ -50,7 +50,7 @@ public ValueTask Play(byte[] audio, string mimetype) var options = new HowlOptions { - Sources = new[] { html5AudioUrl } + Sources = new[] {html5AudioUrl} }; return _runtime.InvokeAsync("howl.play", _dotNetObjectReference, options); @@ -105,6 +105,11 @@ public ValueTask IsPlaying(int soundId) return _runtime.InvokeAsync("howl.getIsPlaying", soundId); } + public ValueTask Volume(double volume, int soundId) + { + return _runtime.InvokeAsync("howl.volume", volume, soundId); + } + public async ValueTask GetRate(int soundId) { return await _runtime.InvokeAsync("howl.getRate", soundId); diff --git a/src/Howler.Blazor/Components/IHowl.cs b/src/Howler.Blazor/Components/IHowl.cs index 5a5f4d7..1756860 100644 --- a/src/Howler.Blazor/Components/IHowl.cs +++ b/src/Howler.Blazor/Components/IHowl.cs @@ -48,6 +48,8 @@ public interface IHowl : IHowlEvents ValueTask GetTotalTime(int soundId); ValueTask IsPlaying(int soundId); + ValueTask Volume(double volume, int soundId); + #endregion } } \ No newline at end of file diff --git a/src/Howler.Blazor/wwwroot/JsInteropHowl.js b/src/Howler.Blazor/wwwroot/JsInteropHowl.js index 69dfba5..4cf23e3 100644 --- a/src/Howler.Blazor/wwwroot/JsInteropHowl.js +++ b/src/Howler.Blazor/wwwroot/JsInteropHowl.js @@ -133,6 +133,14 @@ window.howl = { return 0; }, + volume: function (volume, id) { + const howl = getHowl(id); + if (howl) { + return howl.volume(volume, id); + } + + return 0; + }, destroy: function () { Object.keys(howlInstances).forEach(key => { try {