Skip to content

Commit

Permalink
perf: Add SendBuffer binding
Browse files Browse the repository at this point in the history
  • Loading branch information
ebariche committed Jun 9, 2023
1 parent c01a392 commit 6a75970
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 5 deletions.
4 changes: 2 additions & 2 deletions src/Uno.UI/ts/Windows/Devices/Midi/MidiOutPort.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
namespace Windows.Devices.Midi {
export class MidiOutPort {
public static sendBuffer(encodedDeviceId: string, timestamp: number, ...args: number[]) {
public static sendBuffer(encodedDeviceId: string, timestamp: number, data: number[]) {
const midi = Uno.Devices.Midi.Internal.WasmMidiAccess.getMidi();
const deviceId = decodeURIComponent(encodedDeviceId);
const output = midi.outputs.get(deviceId);
output.send(args, timestamp);
output.send(data, timestamp);
}
}
}
4 changes: 3 additions & 1 deletion src/Uno.UWP/Devices/Midi/MidiOutPort.Interop.wasm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ internal partial class MidiOutPort
{
internal static partial class NativeMethods
{
[JSImport("globalThis.Windows.Devices.Midi.MidiOutPort.sendBuffer")]
internal static partial void SendBuffer(string id, double timestamp, byte[] data);
}
}
}
#endif
#endif
12 changes: 10 additions & 2 deletions src/Uno.UWP/Devices/Midi/MidiOutPort.wasm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,20 @@
using Windows.Devices.Enumeration;
using Windows.Foundation;
using Windows.Storage.Streams;
using static Uno.Foundation.WebAssemblyRuntime;

#if NET7_0_OR_GREATER
using NativeMethods = __Windows.Devices.Midi.MidiOutPort.NativeMethods;
#else
using static Uno.Foundation.WebAssemblyRuntime;
#endif

namespace Windows.Devices.Midi
{
public partial class MidiOutPort
{
#if !NET7_0_OR_GREATER
private const string JsType = "Windows.Devices.Midi.MidiOutPort";
#endif
private readonly string _wasmId;

private MidiOutPort(string deviceId, string wasmId)
Expand All @@ -40,9 +43,14 @@ public void Dispose()
public void SendBufferInternal(IBuffer midiBuffer, TimeSpan timestamp)
{
var data = midiBuffer.ToArray();

#if NET7_0_OR_GREATER
NativeMethods.SendBuffer(Uri.EscapeDataString(_wasmId), timestamp.TotalMilliseconds, data);
#else
var byteString = string.Join(",", data);
var command = $"{JsType}.sendBuffer(\"{Uri.EscapeDataString(_wasmId)}\",{timestamp.TotalMilliseconds},{byteString})";
var command = $"{JsType}.sendBuffer(\"{Uri.EscapeDataString(_wasmId)}\",{timestamp.TotalMilliseconds},[{byteString}])";
InvokeJS(command);
#endif
}

private static Task<IMidiOutPort> FromIdInternalAsync(DeviceIdentifier identifier)
Expand Down

0 comments on commit 6a75970

Please sign in to comment.