Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error in tones.beep #12620

Closed
CyrilleB79 opened this issue Jul 7, 2021 · 16 comments
Closed

Error in tones.beep #12620

CyrilleB79 opened this issue Jul 7, 2021 · 16 comments
Assignees
Milestone

Comments

@CyrilleB79
Copy link
Collaborator

Steps to reproduce:

Make NVDA generate a beep via with tones.beep.

For example with Speech History from @jscholes:

  • Use NVDA normally (with speech)
  • Press F12 to copy the last spoken text to the clipboard. This script copies the last spoken text and then calls the following beep command to indicate that the copy has occurred:
    tones.beep(1500, 120)

Actual behavior:

Rarely, the beep is not heard and the following can be seen in the log:

IO - inputCore.executeGesture (09:58:52.937) - winInputHook (11384):
Input: kb(desktop):f12
IO - tones.beep (09:58:52.961) - MainThread (11120):
Beep at pitch 1500, for 120 ms, left volume 50, right volume 50
ERROR - scriptHandler.executeScript (09:58:52.967) - MainThread (11120):
error executing script: <bound method GlobalPlugin.script_copyLast of <globalPlugins.speechHistory.GlobalPlugin object at 0x068FDA70>> with gesture 'f12'
Traceback (most recent call last):
  File "scriptHandler.pyc", line 208, in executeScript
  File "C:\Users\CB232690\AppData\Roaming\nvda\addons\speechHistory\globalPlugins\speechHistory.py", line 57, in script_copyLast
    tones.beep(1500, 120)
  File "tones.pyc", line 59, in beep
  File "nvwave.pyc", line 491, in stop
  File "nvwave.pyc", line 453, in _idleUnbuffered
  File "nvwave.pyc", line 408, in sync
  File "nvwave.pyc", line 111, in _winmm_errcheck
OSError: [Errno 5] Le handle du périphérique spécifié n’est pas valide.

The occurence of this issue is very rare (maybe 1/100 or less). But trying to execute the F12 command many times does not help reproducing this issue.

Expected behavior:

The beep is played and no error in the log.

System configuration

NVDA installed/portable/running from source:

installed

NVDA version:

2021.1rc2

Windows version:

Windows 10 20H2 (64-bit) build 19042.1052

Name and version of other software in use when reproducing the issue:

Speech History add-on from @jscholes
Version modified by myself for 2021.1 compatibility:

  • base version: 2020.2
  • Manifest updated for 2021.1
  • Import of the speech module updated according to 2021.1 code reorganization

Note: even if the issue is described in an add-on, moreover, unofficial, the issue just comes from a simple tones.beep command executed in a script. Thus, I do not think that the issue comes from the add-on.
If I ever encounter this issue in another context, I will indicate it in this issue.

Other information about your system:

Other questions

Does the issue still occur after restarting your computer?

Yes

Have you tried any other versions of NVDA? If so, please report their behaviors.

I think to recall that this issue was already present in 2020.4.
I cannot be sure and cannot confirm however given that the frequence of the issue is very low.

If add-ons are disabled, is your problem still occurring?

The current STR involves an add-on. However a test could be done without add-on, issuing the tones.beep command in the console or playing with the beeps issued by NVDA's core such as for indent or progress bars.
I did not test however given that the issue is to rare.

Does the issue still occur after you run the COM Registration Fixing Tool in NVDA's tools menu?

I did not yet try.
I will run it just now and update this issue if/when the issue occurs again.

@lukaszgo1
Copy link
Contributor

Just FYI this has been reported to me privately by @jakubl7545

@lukaszgo1
Copy link
Contributor

I'm getting more and more reports of this from users of my WinWizard add-on which generates beeps when hiding a window,. Since these beeps are generated before a window is hidden an exception at this stage means that window isn't hidden and users blame my add-on rather than NVDA since they do not read the log routinely. @feerrenrut Given your recent work on nvwaveis this something you would be able to look into? Annoyingly I'm unable to reproduce this on any machine I own so my investigation options are pretty limited. @CyrilleB79 Have you investigated this further / can add something to the discussion?

@CyrilleB79
Copy link
Collaborator Author

@CyrilleB79 Have you investigated this further / can add something to the discussion?

No unfortunately. The issue is quite rare and I have not found any way to reproduce it reliably. I am not using your WinWizard add-on. And from what I remember, the issue was occurring with Speech History.
I will pay more attention to it in the next days and add comments here if needed.

@CyrilleB79
Copy link
Collaborator Author

I just had the error this morning again in Windows Magnifier add-on on the beep informing of the activation of layered gestures (the same as Instant Translate's one).
This machine has just migrated from Windows 10 1809 to Windows 10 20H2 (64-bit) build 19042.685. May more recent versions of Windows be the cause of the issue?

@CyrilleB79
Copy link
Collaborator Author

It seems I am able to reproduce the issue more reliably. Here is an STR:

  • Plug an USB headset; mine is "Casque pour téléphone (Plantronics C320-M)"
  • (Re)start NVDA with add-ons disabled
  • In the mouse settings panel activate the "Play audio coordinates when mouse moves" checkbox and validate
  • Unplug the USB headset
  • Plug the USB headset
  • Move the mouse.

System:

  • NVDA 2021.2beta1 installed
  • Windows 10 20H2 (64-bit) build 19042.685

@lukaszgo1 are you able to reproduce with this STR too?

@feerrenrut
Copy link
Contributor

OSError: [Errno 5] Le handle du périphérique spécifié n’est pas valide.

Translates to something like:

"The device handle is invalid"

From the error it seems like an exception is escaping from tones.beep (or WavePlayer, depending on where the responsibility lies). An exception while trying to play/stop audio as a device is being changed doesn't seems reasonable.

It might help if you can get a debug log with NVWave debugging category (advanced settings panel) enabled. Hopefully we'll get a few more data points to work out what state it is in before the exception is raised.

Most calls to winmm use _safe_winmm_call. EG self._safe_winmm_call(winmm.waveOutRestart, "Restart") but line 408 of nvwave.py does not:

winmm.waveOutUnprepareHeader(self._waveout, LPWAVEHDR(self._prev_whdr), sizeof(WAVEHDR))

In some situations, _safe_winmm_call is not used, quite intentionally and a comment is given, eg in def _close:

# don't use '_safe_winmm_call' here, on error it would re-enter _close infinitely

_safe_winmm_call doesn't allow for arbitrary parameters. I would just wrap the call line 408 with a try except and on error log and close self._waveout

@CyrilleB79
Copy link
Collaborator Author

CyrilleB79 commented Aug 26, 2021

Here is the log with the nvwave category activated:

Log

IO - speech.speech.speak (13:23:16.443) - MainThread (16204):
  Speaking ['Position de début du fragment de journal marquée, appuyez à nouveau pour copier dans le presse-papiers']
  DEBUG - nvwave.WavePlayer._isPreferredDeviceOpen (13:23:18.760) - Dummy-4 (15468):
  preferred device: Mappeur de sons Microsoft current device name: Mappeur de sons Microsoft (id: -1)
  IO - tones.beep (13:23:28.037) - MainThread (16204):
  Beep at pitch 739.8285714285714, for 40 ms, left volume 26, right volume 58
  DEBUG - nvwave.WavePlayer._handleWinmmError (13:23:28.037) - MainThread (16204):
  Winmm Error: Pause outputDeviceName: Mappeur de sons Microsoft with id: -1
  Stack trace:
    File "nvda.pyw", line 362, in 
    File "core.pyc", line 746, in main
    File "wx\core.pyc", line 2237, in MainLoop
    File "gui\__init__.pyc", line 830, in Notify
    File "core.pyc", line 709, in run
    File "mouseHandler.pyc", line 257, in pumpAll
    File "mouseHandler.pyc", line 210, in executeMouseMoveEvent
    File "mouseHandler.pyc", line 95, in playAudioCoordinates
    File "tones.pyc", line 59, in beep
    File "nvwave.pyc", line 483, in stop
    File "nvwave.pyc", line 544, in _safe_winmm_call
    File "nvwave.pyc", line 529, in _handleWinmmError
  DEBUG - nvwave.WavePlayer._close (13:23:28.037) - MainThread (16204):
  Calling winmm.waveOutClose
  DEBUG - nvwave.WavePlayer._handleWinmmError (13:23:28.053) - MainThread (16204):
  Winmm Error: Reset outputDeviceName: Mappeur de sons Microsoft with id: -1
  Stack trace:
    File "nvda.pyw", line 362, in 
    File "core.pyc", line 746, in main
    File "wx\core.pyc", line 2237, in MainLoop
    File "gui\__init__.pyc", line 830, in Notify
    File "core.pyc", line 709, in run
    File "mouseHandler.pyc", line 257, in pumpAll
    File "mouseHandler.pyc", line 210, in executeMouseMoveEvent
    File "mouseHandler.pyc", line 95, in playAudioCoordinates
    File "tones.pyc", line 59, in beep
    File "nvwave.pyc", line 484, in stop
    File "nvwave.pyc", line 544, in _safe_winmm_call
    File "nvwave.pyc", line 529, in _handleWinmmError
  DEBUG - nvwave.WavePlayer._close (13:23:28.053) - MainThread (16204):
  Calling winmm.waveOutClose
  DEBUG - nvwave.WavePlayer.open (13:23:28.053) - MainThread (16204):
  Calling winmm.waveOutOpen. outputDeviceName: Mappeur de sons Microsoft outputDeviceID: -1
  DEBUG - nvwave.WavePlayer._handleWinmmError (13:23:28.086) - MainThread (16204):
  Winmm Error: Pause outputDeviceName: Mappeur de sons Microsoft with id: -1
  Stack trace:
    File "nvda.pyw", line 362, in 
    File "core.pyc", line 746, in main
    File "wx\core.pyc", line 2237, in MainLoop
    File "gui\__init__.pyc", line 830, in Notify
    File "core.pyc", line 709, in run
    File "mouseHandler.pyc", line 257, in pumpAll
    File "mouseHandler.pyc", line 223, in executeMouseMoveEvent
    File "eventHandler.pyc", line 284, in executeEvent
    File "eventHandler.pyc", line 98, in __init__
    File "eventHandler.pyc", line 107, in next
    File "NVDAObjects\__init__.pyc", line 1119, in event_mouseMove
    File "speech\speech.pyc", line 146, in cancelSpeech
    File "speech\manager.pyc", line 749, in cancel
    File "synthDrivers\oneCore.pyc", line 222, in cancel
    File "nvwave.pyc", line 483, in stop
    File "nvwave.pyc", line 544, in _safe_winmm_call
    File "nvwave.pyc", line 529, in _handleWinmmError
  DEBUG - nvwave.WavePlayer._close (13:23:28.086) - MainThread (16204):
  Calling winmm.waveOutClose
  DEBUG - nvwave.WavePlayer._handleWinmmError (13:23:28.086) - MainThread (16204):
  Winmm Error: Reset outputDeviceName: Mappeur de sons Microsoft with id: -1
  Stack trace:
    File "nvda.pyw", line 362, in 
    File "core.pyc", line 746, in main
    File "wx\core.pyc", line 2237, in MainLoop
    File "gui\__init__.pyc", line 830, in Notify
    File "core.pyc", line 709, in run
    File "mouseHandler.pyc", line 257, in pumpAll
    File "mouseHandler.pyc", line 223, in executeMouseMoveEvent
    File "eventHandler.pyc", line 284, in executeEvent
    File "eventHandler.pyc", line 98, in __init__
    File "eventHandler.pyc", line 107, in next
    File "NVDAObjects\__init__.pyc", line 1119, in event_mouseMove
    File "speech\speech.pyc", line 146, in cancelSpeech
    File "speech\manager.pyc", line 749, in cancel
    File "synthDrivers\oneCore.pyc", line 222, in cancel
    File "nvwave.pyc", line 484, in stop
    File "nvwave.pyc", line 544, in _safe_winmm_call
    File "nvwave.pyc", line 529, in _handleWinmmError
  DEBUG - nvwave.WavePlayer._close (13:23:28.086) - MainThread (16204):
  Calling winmm.waveOutClose
  IO - speech.speech.speak (13:23:28.086) - MainThread (16204):
  Speaking ['Calling winmm.waveOutClose\r\n']
  DEBUG - nvwave.WavePlayer.open (13:23:28.086) - MainThread (16204):
  Calling winmm.waveOutOpen. outputDeviceName: Mappeur de sons Microsoft outputDeviceID: -1
  IO - tones.beep (13:23:28.125) - MainThread (16204):
  Beep at pitch 731.6571428571428, for 40 ms, left volume 26, right volume 58
  DEBUG - nvwave.WavePlayer._isPreferredDeviceOpen (13:23:28.125) - MainThread (16204):
  preferred device: Mappeur de sons Microsoft current device name: Mappeur de sons Microsoft (id: -1)
  IO - tones.beep (13:23:28.144) - MainThread (16204):
  Beep at pitch 731.0285714285715, for 40 ms, left volume 26, right volume 58
  DEBUG - nvwave.WavePlayer._isPreferredDeviceOpen (13:23:28.154) - MainThread (16204):
  preferred device: Mappeur de sons Microsoft current device name: Mappeur de sons Microsoft (id: -1)
  DEBUG - nvwave.WavePlayer._isPreferredDeviceOpen (13:23:29.015) - Dummy-5 (15192):
  preferred device: Mappeur de sons Microsoft current device name: Mappeur de sons Microsoft (id: -1)
  DEBUG - nvwave.WavePlayer._isPreferredDeviceOpen (13:23:29.607) - MainThread (16204):
  preferred device: Mappeur de sons Microsoft current device name: Mappeur de sons Microsoft (id: -1)
  IO - inputCore.InputManager.executeGesture (13:23:31.473) - winInputHook (16484):
  Input: kb(desktop):shift+NVDA+control+f1

@feerrenrut
Copy link
Contributor

Just a note, if you want to do a collapsible code section on GitHub you have to use code and pre tags. Here is a gist I made to make it faster: https://gist.github.com/feerrenrut/0dfb8aafe8cf7f7ff04bc63e50939d72

I have updated the comment.

@feerrenrut
Copy link
Contributor

@CyrilleB79 I don't see the OSError: [Errno 5] in this log. The errors in here look they are being handled correctly. They are only nvwave detecting that the audio device is no longer available and falling back to another audio device. The stack is only included to make debugging easier.

@CyrilleB79
Copy link
Collaborator Author

Sorry for the first log, it seems that the error does not occur after the first time I unplug/plug the headset, just after the second time and subsequent ones.
Here is the log fragment corresponding to the following steps (second unplug/plug):

  • unplug USB headset
  • plug USB headset
  • move the mouse
log2

IO - speech.speech.speak (09:24:06.892) - MainThread (15760):
Speaking ['Position de début du fragment de journal marquée, appuyez à nouveau pour copier dans le presse-papiers']
DEBUG - nvwave.WavePlayer._isPreferredDeviceOpen (09:24:09.311) - Dummy-5 (10444):
preferred device: Microsoft Sound Mapper current device name: Microsoft Sound Mapper (id: -1)
IO - tones.beep (09:24:15.263) - MainThread (15760):
Beep at pitch 714.140625, for 40 ms, left volume 84, right volume 0
DEBUG - nvwave.WavePlayer._handleWinmmError (09:24:15.263) - MainThread (15760):
Winmm Error: Pause outputDeviceName: Microsoft Sound Mapper with id: -1
Stack trace:
  File "nvda.pyw", line 362, in 
  File "core.pyc", line 746, in main
  File "wx\core.pyc", line 2237, in MainLoop
  File "gui\__init__.pyc", line 830, in Notify
  File "core.pyc", line 709, in run
  File "mouseHandler.pyc", line 257, in pumpAll
  File "mouseHandler.pyc", line 210, in executeMouseMoveEvent
  File "mouseHandler.pyc", line 95, in playAudioCoordinates
  File "tones.pyc", line 59, in beep
  File "nvwave.pyc", line 483, in stop
  File "nvwave.pyc", line 544, in _safe_winmm_call
  File "nvwave.pyc", line 529, in _handleWinmmError
DEBUG - nvwave.WavePlayer._close (09:24:15.263) - MainThread (15760):
Calling winmm.waveOutClose
DEBUG - nvwave.WavePlayer._handleWinmmError (09:24:15.263) - MainThread (15760):
Winmm Error: Reset outputDeviceName: Microsoft Sound Mapper with id: -1
Stack trace:
  File "nvda.pyw", line 362, in 
  File "core.pyc", line 746, in main
  File "wx\core.pyc", line 2237, in MainLoop
  File "gui\__init__.pyc", line 830, in Notify
  File "core.pyc", line 709, in run
  File "mouseHandler.pyc", line 257, in pumpAll
  File "mouseHandler.pyc", line 210, in executeMouseMoveEvent
  File "mouseHandler.pyc", line 95, in playAudioCoordinates
  File "tones.pyc", line 59, in beep
  File "nvwave.pyc", line 484, in stop
  File "nvwave.pyc", line 544, in _safe_winmm_call
  File "nvwave.pyc", line 529, in _handleWinmmError
DEBUG - nvwave.WavePlayer._close (09:24:15.263) - MainThread (15760):
Calling winmm.waveOutClose
DEBUG - nvwave.WavePlayer._handleWinmmError (09:24:15.263) - MainThread (15760):
Winmm Error: Pause outputDeviceName: Microsoft Sound Mapper with id: -1
Stack trace:
  File "nvda.pyw", line 362, in 
  File "core.pyc", line 746, in main
  File "wx\core.pyc", line 2237, in MainLoop
  File "gui\__init__.pyc", line 830, in Notify
  File "core.pyc", line 713, in run
  File "logHandler.pyc", line 204, in exception
  File "logHandler.pyc", line 160, in _log
  File "logging\__init__.pyc", line 1514, in _log
  File "logging\__init__.pyc", line 1524, in handle
  File "logging\__init__.pyc", line 1586, in callHandlers
  File "logHandler.pyc", line 279, in handle
  File "nvwave.pyc", line 616, in playWaveFile
  File "nvwave.pyc", line 483, in stop
  File "nvwave.pyc", line 544, in _safe_winmm_call
  File "nvwave.pyc", line 529, in _handleWinmmError
DEBUG - nvwave.WavePlayer._close (09:24:15.263) - MainThread (15760):
Calling winmm.waveOutClose
DEBUG - nvwave.WavePlayer._handleWinmmError (09:24:15.263) - MainThread (15760):
Winmm Error: Reset outputDeviceName: Microsoft Sound Mapper with id: -1
Stack trace:
  File "nvda.pyw", line 362, in 
  File "core.pyc", line 746, in main
  File "wx\core.pyc", line 2237, in MainLoop
  File "gui\__init__.pyc", line 830, in Notify
  File "core.pyc", line 713, in run
  File "logHandler.pyc", line 204, in exception
  File "logHandler.pyc", line 160, in _log
  File "logging\__init__.pyc", line 1514, in _log
  File "logging\__init__.pyc", line 1524, in handle
  File "logging\__init__.pyc", line 1586, in callHandlers
  File "logHandler.pyc", line 279, in handle
  File "nvwave.pyc", line 616, in playWaveFile
  File "nvwave.pyc", line 484, in stop
  File "nvwave.pyc", line 544, in _safe_winmm_call
  File "nvwave.pyc", line 529, in _handleWinmmError
DEBUG - nvwave.WavePlayer._close (09:24:15.263) - MainThread (15760):
Calling winmm.waveOutClose
DEBUG - nvwave.WavePlayer.open (09:24:15.263) - MainThread (15760):
Calling winmm.waveOutOpen. outputDeviceName: Microsoft Sound Mapper outputDeviceID: -1
ERROR - core.CorePump.run (09:24:15.263) - MainThread (15760):
errors in this core pump cycle
Traceback (most recent call last):
  File "core.pyc", line 709, in run
  File "mouseHandler.pyc", line 257, in pumpAll
  File "mouseHandler.pyc", line 210, in executeMouseMoveEvent
  File "mouseHandler.pyc", line 95, in playAudioCoordinates
  File "tones.pyc", line 59, in beep
  File "nvwave.pyc", line 491, in stop
  File "nvwave.pyc", line 453, in _idleUnbuffered
  File "nvwave.pyc", line 408, in sync
  File "nvwave.pyc", line 111, in _winmm_errcheck
OSError: [Errno 5] Le handle du périphérique spécifié n’est pas valide.
DEBUG - nvwave.WavePlayer._isPreferredDeviceOpen (09:24:15.696) - nvwave.playWaveFile(error.wav) (16068):
preferred device: Microsoft Sound Mapper current device name: Microsoft Sound Mapper (id: -1)
DEBUG - nvwave.WavePlayer._isPreferredDeviceOpen (09:24:17.594) - MainThread (15760):
preferred device: Microsoft Sound Mapper current device name: Microsoft Sound Mapper (id: -1)
IO - inputCore.InputManager.executeGesture (09:24:19.769) - winInputHook (15088):
Input: kb(desktop):shift+NVDA+control+f1

PS: Thanks for the advice and the correction regarding the collapsible code section.

@feerrenrut
Copy link
Contributor

Thanks @CyrilleB79. One thing to note, several of the messages are actually LogHandlers "Beep on error" feature failing. Telling LogHandler not to try to beep in this situation would make the log easier to read.

Overall, I think the approach in #12620 (comment) is the best thing to try at this stage. Are you interested in submitting a PR for this?

@CyrilleB79
Copy link
Collaborator Author

Thanks @CyrilleB79. One thing to note, several of the messages are actually LogHandlers "Beep on error" feature failing. Telling LogHandler not to try to beep in this situation would make the log easier to read.

What messages are you referring to?

Overall, I think the approach in #12620 (comment) is the best thing to try at this stage. Are you interested in submitting a PR for this?

Today, I do not understand clearly the details on how audio is managed (nvwave.py); as well as your previous comment. And I do not have so much time to dig into this. Thus I'd better let you or someone else tackle this issue.

@feerrenrut
Copy link
Contributor

Thus I'd better let you or someone else tackle this issue.

Ok, thanks for letting us know.

What messages are you referring to?

Log messages like this, note the line File "logHandler.pyc", line 204, in exception:

DEBUG - nvwave.WavePlayer._handleWinmmError (09:24:15.263) - MainThread (15760):
Winmm Error: Pause outputDeviceName: Microsoft Sound Mapper with id: -1
Stack trace:
  File "nvda.pyw", line 362, in 
  File "core.pyc", line 746, in main
  File "wx\core.pyc", line 2237, in MainLoop
  File "gui\__init__.pyc", line 830, in Notify
  File "core.pyc", line 713, in run
  File "logHandler.pyc", line 204, in exception
  File "logHandler.pyc", line 160, in _log
  File "logging\__init__.pyc", line 1514, in _log
  File "logging\__init__.pyc", line 1524, in handle
  File "logging\__init__.pyc", line 1586, in callHandlers
  File "logHandler.pyc", line 279, in handle
  File "nvwave.pyc", line 616, in playWaveFile
  File "nvwave.pyc", line 483, in stop
  File "nvwave.pyc", line 544, in _safe_winmm_call
  File "nvwave.pyc", line 529, in _handleWinmmError

@CyrilleB79
Copy link
Collaborator Author

Thanks @CyrilleB79. One thing to note, several of the messages are actually LogHandlers "Beep on error" feature failing. Telling LogHandler not to try to beep in this situation would make the log easier to read.

What messages are you referring to?

Log messages like this, note the line File "logHandler.pyc", line 204, in exception:

DEBUG - nvwave.WavePlayer._handleWinmmError (09:24:15.263) - MainThread (15760):
Winmm Error: Pause outputDeviceName: Microsoft Sound Mapper with id: -1
Stack trace:
  File "nvda.pyw", line 362, in 
  File "core.pyc", line 746, in main
  File "wx\core.pyc", line 2237, in MainLoop
  File "gui\__init__.pyc", line 830, in Notify
  File "core.pyc", line 713, in run
  File "logHandler.pyc", line 204, in exception
  File "logHandler.pyc", line 160, in _log
  File "logging\__init__.pyc", line 1514, in _log
  File "logging\__init__.pyc", line 1524, in handle
  File "logging\__init__.pyc", line 1586, in callHandlers
  File "logHandler.pyc", line 279, in handle
  File "nvwave.pyc", line 616, in playWaveFile
  File "nvwave.pyc", line 483, in stop
  File "nvwave.pyc", line 544, in _safe_winmm_call
  File "nvwave.pyc", line 529, in _handleWinmmError

Just to clarify: these messages are logged only when the nvwave category in advanced setting panel is checked.

@feerrenrut
Copy link
Contributor

feerrenrut commented Sep 1, 2021

Yes, but they are a bit misleading and circular: a log message because the logger can't beep when logging an error about the beep system.

@CyrilleB79
Copy link
Collaborator Author

OK this makes sense.

@feerrenrut feerrenrut self-assigned this Sep 2, 2021
@nvaccessAuto nvaccessAuto added this to the 2021.3 milestone Sep 20, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants