dbeard
I have a question about the ARC robot skill "Bing Speech Recognition".
I am using the Bing Speech Recognition skill with wake-word enabled. The wake word works correctly and the skill plays the wake-word ding. After that, it starts listening and normally sends the recognized phrase to my script via the $BingSpeech variable.
I want to prevent the robot from hearing its own spoken replies, so I tried using this ControlCommand during or after the robot’s response:
controlCommand("Bing Speech Recognition", "PauseListening");
I also tested similar listener control commands such as StopListening.
After PauseListening or StopListening is called from a script, the Bing Speech Recognition skill no longer works correctly with the wake word. The wake word still appears to trigger (the ding plays), but the skill gets stuck at "sending data" and never completes recognition or runs the recognized-speech script.
Manual operation still works. If I manually press Start Recording, speak a phrase, and then press Stop Recording, recognition works and my script runs correctly. The issue only appears after using the listener control commands from a script.
For troubleshooting, I replaced my recognized-speech script with a simple print of $BingSpeech, and that works correctly. I also removed the PauseListening / StopListening control commands from my script, and wake-word recognition works again.
So it appears that calling PauseListening or StopListening from a script may leave the Bing Speech Recognition wake-word flow in a bad state.
My question: Is PauseListening intended to be safe to call from a script while using wake-word mode? If so, is there a recommended way to pause Bing Speech Recognition during the robot’s speech and then safely resume it afterward?
Environment:
- ARC on Windows (PC-connected)
- Robot Skill: Bing Speech Recognition
- Wake-word enabled
- Recognized text variable: $BingSpeech
- Script invoked from the Bing Speech Recognition recognized-speech script
Related Hardware (view all EZB hardware)
Related Robot Skill (view all robot skills)

Yes -
PauseListening/StopListeningcan interfere with the wake-word flow if they’re called from within the same Bing Speech Recognition workflow that is currently handling recognition.What’s likely happening
With wake-word enabled, Bing Speech Recognition is managing a state machine:
If your recognized-speech script calls
PauseListeningorStopListeningwhile that session is still active, the skill can end up in a partially paused state and the next wake-word cycle may get stuck at "sending data".Recommended approach
Instead of pausing the skill itself during robot speech, use a separate guard variable in ARC to ignore recognition while your robot is talking.
For example:
Then, before your robot speaks:
If you are using
Audio.say()instead of the wait version, you can monitor speech with the built-in variable:getVar("$IsSpeaking")for computer TTSgetVar("$EZBPlayingAudio")for EZ-B audioBetter pattern for wake-word robots
A common pattern is:
Example:
If you really want to pause listening
If you want to pause based on a button or external event, do it outside the recognized-speech callback, not from inside the recognition handler that is currently processing the phrase.
Also, if you need more advanced control than Bing’s built-in behavior, ARC lets you create a custom robot skill: https://synthiam.com/Support/Create-Robot-Skill/Overview
That can be useful if you want a dedicated "mute while speaking" state machine.
My recommendation
For your use case, I would avoid
PauseListeningandStopListeninginside the recognized-speech script and use a variable flag instead. That’s the safest way to prevent the robot from hearing itself without breaking wake-word mode.If you want, I can help you write the exact JavaScript script for your setup - are you using
Audio.sayEZB()orAudio.say()for the robot replies?I am a customer support GPT-powered AI and still learning. If you have doubts about my response, please use the support documentation to verify my answer.
Thank you, that explanation makes sense and matches what I am seeing.
I tested this further and confirmed that the wake word itself is working. The skill hears the wake word, plays the ding, and
$BingSpeechupdates correctly when I keep the recognized-speech script very simple.The problem appears when I call
PauseListeningorStopListeningfrom the script flow tied to the recognized speech. After that, the wake-word flow can get stuck at "sending data" and does not complete the recognition/script cycle correctly.Based on your explanation, I am going to avoid using
PauseListeningorStopListeningfrom inside the Bing recognized-speech callback. Instead, I will keep Bing running and use an ARC guard variable such as$ROE_Voice_IgnoreUntilMsor$RobotBusyto ignore any recognition that happens while the robot is speaking.For now, I will keep the Bing recognized-speech script very small, something like:
Then the router will decide whether to act on the phrase or ignore it based on a busy/ignore window.
That seems like the safest pattern for wake-word use. I appreciate the clarification that the listener control commands should be used outside the active recognition callback flow.
That sounds like a solid approach, and your testing confirms the behavior well.
Using a small Bing callback plus a separate router/guard variable is the right pattern for wake-word projects in ARC. It keeps the Bing skill stable and avoids interrupting its recognition state machine.
A couple of tips to make your pattern even more reliable:
Audio.say(), you can also watchgetVar("$IsSpeaking").Audio.sayEZB(), usegetVar("$EZBPlayingAudio").Example guard pattern:
And in the Bing callback:
If you want, I can help you turn your ROE_Voice_IgnoreUntilMs idea into a clean ARC JavaScript router script.
I am a customer support GPT-powered AI and still learning. If you have doubts about my response, please use the support documentation to verify my answer.
Thank you. That matches what I found in testing.
I removed all
PauseListening/StopListeningcalls from the router and changed the Bing recognized-speech script to only print$BingSpeechand start my separate voice router. That made the wake-word flow stable again.Instead of controlling the Bing skill, my router now uses a timestamp guard variable:
When a valid phrase is accepted, the router sets that to now plus about 15 seconds. If Bing hears the robot during that window, the router starts but immediately ignores the phrase.
I also publish a few diagnostics:
This seems to be working much better because Bing remains "ears only" and the router handles whether to act or ignore.
I will continue testing with this pattern. Thanks for confirming that avoiding
PauseListening/StopListeninginside the recognition callback is the safer approach.Have you experienced the robot hearing its own replies? I ask because ARC pauses and unpauses speech recognitions such as bing when it is speaking.
what command are you using for speaking? The
audio.sayezbcommands are the ones I believe that do that. So you shouldn’t need any code to handle it.Yes, I have experienced the robot hearing its own replies, but my setup is not using only
Audio.sayEZB().For ChatGPT replies, the OpenAI ChatGPT skill response script is using computer audio:
I also use several pre-recorded MP3 replies through a soundboard-style skill, for example:
So some replies are coming from
Audio.say()through the PC audio path, and some are MP3 files played through a soundboard control. They are not all going throughAudio.sayEZB()orAudio.sayEZBWait().That may explain why Bing can still hear the robot’s own voice in my setup. If ARC’s automatic pause/unpause behavior mainly applies to
Audio.sayEZB()speech, then my ChatGPTAudio.say()responses and soundboard MP3 responses may not be covered the same way.I originally tried to handle this by calling:
from my voice router, but doing that inside the Bing recognized-speech flow caused problems. After that, Bing could get stuck at "sending data" on later wake-word attempts.
The current workaround is that I no longer control Bing directly from the router. Bing stays running, and my router uses a short timestamp guard window. If Bing hears the robot during that window, the router ignores it instead of trying to pause Bing.
So the short answer is: yes, I have seen the robot hear itself, but my speech output includes
Audio.say(getVar("$OpenAIResponse"))and soundboard MP3 playback, not onlyAudio.sayEZB().Hi Synthiam team,
I’m trying to better understand how ARC handles speech recognition pause/unpause behavior between the OpenAI ChatGPT skill and the Bing Speech Recognition skill.
In my project, I’m using Bing Speech Recognition as the main "ears" for the robot, and the OpenAI ChatGPT skill for fallback/open-ended responses. During testing, it appears that when the OpenAI ChatGPT skill speaks a response, ARC/ChatGPT can pause Bing listening and then unpause it afterward. That behavior seems to work cleanly and does not appear to cause Bing to hang.
However, when I try to pause/unpause Bing Speech Recognition myself through
controlCommand()from a script, Bing sometimes appears to hang at the "sending data" step.So my question is:
Is the OpenAI ChatGPT skill using a different internal pause/unpause mechanism than the public
controlCommand()commands for Bing Speech Recognition?I’m not trying to work around ARC incorrectly. I’m trying to understand the recommended pattern so I can avoid destabilizing Bing recognition. If the correct approach is to let ARC/OpenAI manage Bing pause/unpause internally and avoid manually controlling Bing from scripts, that would be helpful to know.
My current goal is to prevent the robot from hearing its own MP3 or speech responses without causing Bing Speech Recognition to lock up.
Any guidance on the safest supported way to temporarily prevent Bing from processing robot speech would be appreciated.
Thank you.
I’m having it looked at and a support document created. Stay tuned.