From c22e54bcd7fd3f27bced3fd403e65d23fd86d5d2 Mon Sep 17 00:00:00 2001 From: iddev5 Date: Sun, 17 Jul 2022 18:01:46 +0530 Subject: [PATCH] sysaudio: webaudio: Set internal buffer size to 512 It was 4096 before. Lower values means lower latency but higher values are needed for clear audio. It should be properly tested across multiple browsers to find out the correct default value, or create a formula to auto calculate it. It should always be a multiple of 2 in the range 256, 512, ..., 8192, 16384. --- sysaudio/src/webaudio.zig | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/sysaudio/src/webaudio.zig b/sysaudio/src/webaudio.zig index c0a364ae..99b57760 100644 --- a/sysaudio/src/webaudio.zig +++ b/sysaudio/src/webaudio.zig @@ -54,6 +54,7 @@ pub fn waitEvents(_: Audio) void {} const default_channel_count = 2; const default_sample_rate = 48000; +const default_buffer_size = 512; pub fn requestDevice(audio: Audio, config: DeviceDescriptor) Error!Device { // NOTE: WebAudio only supports F32 audio format, so config.format is unused @@ -71,7 +72,7 @@ pub fn requestDevice(audio: Audio, config: DeviceDescriptor) Error!Device { const input_channels = if (mode == .input) js.createNumber(@intToFloat(f64, channels)) else js.createUndefined(); const output_channels = if (mode == .output) js.createNumber(@intToFloat(f64, channels)) else js.createUndefined(); - const node = context.call("createScriptProcessor", &.{ js.createNumber(4096), input_channels, output_channels }).view(.object); + const node = context.call("createScriptProcessor", &.{ js.createNumber(default_buffer_size), input_channels, output_channels }).view(.object); defer node.deinit(); context.set("node", node.toValue()); @@ -88,9 +89,7 @@ pub fn requestDevice(audio: Audio, config: DeviceDescriptor) Error!Device { _ = node.call("connect", &.{destination.toValue()}); } - return Device{ - .context = context, - }; + return Device{ .context = context }; } fn audioProcessEvent(args: js.Object, _: usize) js.Value {