Mycroft Community Forum

Silent utterance possible?

Hello, I use a combination of voice and screen outputs via the companion app for a recent project. Is it possible to utter something silently, i.e. the text is visible but Mycroft does not read it?

Hey try this with messagebus

https://mycroft-ai.gitbook.io/docs/mycroft-technologies/mycroft-core/message-types#recognizer_loop-utterance
and
https://mycroft-ai.gitbook.io/docs/mycroft-technologies/mycroft-core/message-types#speak

would you like to use the mycroft without sound?
you could simply switch it off via the configuration tts.

No, the audio needs to be on. I want to avoid that Mycroft reads links that I want to display to the user.

there is a text output option for gui / enclosure system that can be triggered via message bus. if you want, I’ll see if I can find something. with this you can only display texts and not pronounce them, but not globally across all skills.
https://mycroft-ai.gitbook.io/docs/skill-development/displaying-information/mycroft-gui

Thanks for your help, it would be great if you can point me to a code snippet or similar.

do you use a mycoft gui device or something else to display

I only use the Android Companion App to display and speak to the user. I think that one relies completly on the message bus.

something like that


i try to understand what you want to do exactly because there are many ways to reach your goal

Yes this is the app. It connects to the message bus via websocket and Google STT reads anything that the app receives via the websocket (as far as I understand).
What I am looking for is a way that the sent message is visible only without the STT part. I thought there is a markup for the message to indicate that the TTS should not trigger. Probably, in this case the solution involves changing the Android app directly (turn of the TTS for some messages).

you want to create a skill that sends a “link” to the android app and the user only has to click on it or do you want to change the app so that you can’t hear anything and only see?

The user should see the link (URL) only.
Hearing it is a bad user experience because it’s cryptic and quite long - Mycroft will annoy the user.
I do not know if I must change the skill or the app or both for this. Naturally, I would assume to change my skill (e.g. that I can mark messages as “write only” => they are inaudible).

You could look into emiting a custom message from the specific skill that would send the utterance as a data dict over the messagebus and capture its kind via type key or data key over a socket from the application

1 Like

Thanks for the comments. I implemented something now with minimal changes like this:

There is a new message type “write”.

MainActivity.kt

if (voxswitch.isChecked && !mycroftUtterance.silent) {
    ttsManager.addQueue(mycroftUtterance.utterance)
}

MessageParser.kt

if (obj.optString("type") == "write") {
    val ret = Utterance(obj.getJSONObject("data").getString("utterance"), UtteranceFrom.MYCROFT, silent=true)
    callback.call(ret)
}

Utterance.kt

data class Utterance(val utterance: String, val from: UtteranceFrom, val silent: Boolean = false)