[FREE] Voice Recognition extension without Google Dialogue

Oh sure. Such an application is not difficult to create using a Kodular:

  1. One button for saying keywords. All recognized words must be saved to the list. This list can be saved to a file so that it does not disappear when the application is restarted. Also provide a button to clear the list.
  2. Another button to start recognition and counting keywords in the text. Each time the student stops speaking, the application counts the matches of words from the list of keywords with the recognized text. Also increases the total counter (or counters per word). And so on until the teacher stops the recognition process. Counters are reset when starting a new recognition.
    It’s all!
1 Like

(Full disclosure: baaasic coding skills :smiley: )

So the keyword counter works which is awesome!

What am I missing so that the continuous listening could carry on even if the speaker pauses in their speech? Code snippet below.

Thanks in advance, you are such a kind soul!

Great start!
In order to continue recognition, it is enough to issue command ScSpeechRecognizer1.GetText again at the end of event ScSpeechRecognizer1.AfterGettingText processing. To prevent the process from continuing indefinitely, there must be a global boolean variable that allows the recognition to continue. The value of this variable must be changed using a button (either use a special passphrase or a time delay).
You can also add keywords to the list with a voice command.
Ideally, it is better to make an application in which there will be no buttons and screens at all, but only voice commands:
“Add to dictionary”
“Save the dictionary”
“Clean up the dictionary”
“Start counting”
“Finish the count”
The application can announce the counter value using speech synthesis.
Good luck!

3 Likes

I tried to compile my extension using Rush, after adding the necessary information to the manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.scorpio">
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<queries>
   <intent>
     <action
        android:name="android.speech.RecognitionService" />
   </intent>
 </queries>
  <application>
    <!-- <activity android:name=".MainActivity">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity> -->
  </application>
</manifest>

However, this information has disappeared from the end application manifest.
The queries tag is probably not supported by the Rush compiler.

Hi. First of all congrats for the extension, it is top!
I´ve the same problem with ContinuouslyRecognitionEnabled because when you add a ScSpeechRecognizer.GetText in th end of the …AfterGettingText, the sound captations needs 1 or 2 seconds to restart and it is enought to lose some words. Is there a work around for it or could you add an option to remove the gap? thanks it will be a awesome help.
Another question, I want to put credits for your work and the extension in my work. Can you tell me what name and link or anything else that you want me to put?

Many many thanks

these methods seem complicated :frowning:

I see the title of extension developer next to your name. I wonder if you can re-code this extension?

actually, I can but, why will it be needed, the aix made by @ScorpioNormal works, just issue is with manifest tags, maybe developers can find solution at : atomdeveloper.com/manifestgenerator.html

1 Like

Unfortunately, there is no solution for this, but if you set up a system by using your own clocks instead of listening all the time, you will prevent missing or leaking vocalization sounds from passing to the sound detector. I tried this and it worked, but this method causes the sound detector to be busy.

wrong translation sorry i need it

Simple but effective. Thanks for the answer, I think I’ll add a if listening do nothing, else start listening.
Do you think such a simple function in, let’s say 100ms intervals would make a big impact in performance or battery use?
Big thanks for the answer

A quinta, 7/10/2021, 10:32, Barış Asker via Kodular Community Email <[email protected]> escreveu:

Better just if not listening…

A quinta, 7/10/2021, 10:32, Barış Asker via Kodular Community Email <[email protected]> escreveu:

Going to import in my project :heart:

1 Like

No, I don’t think it will

Really all the magic of converting speech to text is done by a Speech Services by Google (program that runs in the background). Our apps only calls to her. It is in this service that the prompt sound appears. There is no opportunity to miss it. I can only mute the sound, but the signal time remains.

Thank you for appreciating my humble hobby) I think that a link to this forum will be enough.

I think this is why smartphone manufacturers do not use continuously recognition in their devices. The recognition process consumes a lot of energy and Internet traffic.

I think, and I could be wrong, that it should be in relation to traffic equal or smaller than having a music streaming program running, since it’s just uploading normal audio from the phone that normally isn’t even at a so ho quality. As for processing power, the real conversion. Is online, so I think under the wood, in the phone it should just be searching for sound spikes , when it starts and finishes to define the start and finish of the stream
I’ll try to find a way to benchmark it and then I post here, maybe its practical for more people.

A sexta, 8/10/2021, 15:21, ScorpioNormal via Kodular Community Email <[email protected]> escreveu:

Plus I intent to use the offline version more often

A quinta, 7/10/2021, 10:32, Barış Asker via Kodular Community Email <[email protected]> escreveu:

Unlike streaming music, the recognition system continuously records the speech into a file, which is then transmitted to the recognition server or recognition engine in offline case.

So, tested with timers fro 20ms, 50, 100, 200 and 500ms. The stop at the end its impossible to remove unfortunatly.
My solution was just just put it restarting as the first line of “.aftergettingtext”.
Now i was testing it offline. downloaded the offline tts language file, did a button and put that onclick, stopASR then changed prefereOffine to true and restarted get text.
It doesnt recognize anything.
Does it only work if set at the beginning of the program?