From eeef7a062a4caefef9db0a8ce7c639b513225205 Mon Sep 17 00:00:00 2001 From: Ericgi231 Date: Mon, 15 Sep 2025 20:57:00 -0500 Subject: [PATCH] Add async option to beep function for non-blocking audio feedback to fix #3789 --- src/main/scala/li/cil/oc/server/machine/Machine.scala | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/scala/li/cil/oc/server/machine/Machine.scala b/src/main/scala/li/cil/oc/server/machine/Machine.scala index 3106f5821..2e02110c0 100644 --- a/src/main/scala/li/cil/oc/server/machine/Machine.scala +++ b/src/main/scala/li/cil/oc/server/machine/Machine.scala @@ -443,7 +443,7 @@ class Machine(val host: MachineHost) extends AbstractManagedEnvironment with mac def isRunning(context: Context, args: Arguments): Array[AnyRef] = result(isRunning) - @Callback(doc = """function([frequency:string or number[, duration:number]]) -- Plays a tone, useful to alert users via audible feedback.""") + @Callback(doc = """function([frequency:string or number[, duration:number[, async:boolean]]]) -- Plays a tone, useful to alert users via audible feedback.""") def beep(context: Context, args: Arguments): Array[AnyRef] = { if (args.count == 1 && args.isString(0)) { beep(args.checkString(0)) @@ -454,7 +454,10 @@ class Machine(val host: MachineHost) extends AbstractManagedEnvironment with mac } val duration = args.optDouble(1, 0.1) val durationInMilliseconds = math.max(50, math.min(5000, (duration * 1000).toInt)) - context.pause(durationInMilliseconds / 1000.0) + val async = args.optBoolean(2, false) + if (!async) { + context.pause(durationInMilliseconds / 1000.0) + } beep(frequency.toShort, durationInMilliseconds.toShort) } null