diff --git a/Runtime/Scripts/Client.cs b/Runtime/Scripts/Client.cs index 3c7f826..9b8990d 100644 --- a/Runtime/Scripts/Client.cs +++ b/Runtime/Scripts/Client.cs @@ -42,5 +42,18 @@ public static JSPromise> CreateLocalScreenTracks(ScreenShare return JSRef.Acquire>>(JSNative.CallMethod(JSNative.LiveKit, "createLocalScreenTracks")); } + public static AudioAnalyser CreateAudioAnalyser(Track track, AudioAnalyserOptions? options = null) + { + if (track == null) + { + throw new ArgumentNullException($"{nameof(CreateAudioAnalyser)} - {nameof(track)} should be a valid {nameof(Track)} instance"); + } + JSNative.PushObject(track.NativeHandle); + if (options.HasValue) + { + JSNative.PushStruct(JsonConvert.SerializeObject(options.Value, JSNative.JsonSettings)); + } + return JSRef.Acquire(JSNative.CallMethod(JSNative.LiveKit, "createAudioAnalyser")); + } } } \ No newline at end of file diff --git a/Runtime/Scripts/Room/Track/AudioAnalyser.cs b/Runtime/Scripts/Room/Track/AudioAnalyser.cs new file mode 100644 index 0000000..c8d5c56 --- /dev/null +++ b/Runtime/Scripts/Room/Track/AudioAnalyser.cs @@ -0,0 +1,26 @@ +using UnityEngine.Scripting; + +namespace LiveKit +{ + public interface IAudioAnalyser + { + float CalculateAvgAmplitude(); + void Cleanup(); + } + public sealed class AudioAnalyser : JSObject, IAudioAnalyser + { + [Preserve] + internal AudioAnalyser(JSHandle handle) : base(handle) + { + } + public float CalculateAvgAmplitude() + { + var ret = JSNative.CallMethod(NativeHandle, "calculateVolume"); + return (float)JSNative.GetNumber(ret); + } + public void Cleanup() + { + JSNative.CallMethod(NativeHandle, "cleanup"); + } + } +} \ No newline at end of file diff --git a/Runtime/Scripts/Room/Track/AudioAnalyser.cs.meta b/Runtime/Scripts/Room/Track/AudioAnalyser.cs.meta new file mode 100644 index 0000000..f25020e --- /dev/null +++ b/Runtime/Scripts/Room/Track/AudioAnalyser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 430d551191634f84d92b90cf3fc3fe9d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Scripts/Room/Track/Options.cs b/Runtime/Scripts/Room/Track/Options.cs index 6eba841..aed4015 100644 --- a/Runtime/Scripts/Room/Track/Options.cs +++ b/Runtime/Scripts/Room/Track/Options.cs @@ -204,6 +204,17 @@ public struct AudioCaptureOptions [JsonProperty("sampleSize")] public ConstrainULong? SampleSize; } + public struct AudioAnalyserOptions + { + [JsonProperty("cloneTrack")] + public bool? CloneTrack { get; set; } + + [JsonProperty("fftSize")] + public int? FftSize { get; set; } + + [JsonProperty("smoothingTimeConstant")] + public float? SmoothingTimeConstant { get; set; } + } public struct VideoResolution {