Great tool, only marred by Microsoft Speech Recognition. I don't understand why MS cannot produce better speech recognition for Windows.
Keep up the great work.
Did you consider adding support for switching to other speech recognition libraries by abstracting access to those features? You can have adaption source code between your code and the speech recognition library. In which case your source code can be kept closed.
Thank you, and interesting suggestion. I suppose I could provide program access to speech recognition functions to openly support alternative engines. I'll give this some consideration for the future.
Sorry, but no. The problem is that the speech recognition is a major part of this app and is only freely provided by Microsoft Windows platform. There are other speech platforms but they typically require online processing and charge fees, which I won't support. It is built on the .net core platform for portability, but its reliance on these MS components limits it. There are some open source SR engine initiatives out there so perhaps in the future, but don't hold your breath - it might be a while.
If the time ever comes to pass, know i and others of my Linux community greatly appreciate the work!
As far as im aware more MS components have either alternatives or are cross platform such as .NET. So, I wouldn't be surprised if one day you found a (relatively) simple way to make it work or even go forward without so many windows dependancies.
But that's speculation and I'm not going to hold you to that in the slightest. Tho I am hopeful. Have a good day!
Can Foxvox handle more than two command on one Voice Commands?
The software will recongnise one of any two commands in a spoken command, given the correct command inside the phrase but if I add a third command to the Voice command then I will get Command not found on Group.
Yes, it does. You must group it correctly on the command depending on how you want it to work - as an alternative or additional phrase. This is explained best in the basic tutorial video; https://youtu.be/0Aqbf5IWd1w
I can see where in your vid that two voice keys work fine and it does with my examples but if I add another voice key to the Voice command making it a list three voice keys commands then I will get command not found on Group.
No matter how I arrange the list.
For example. Setting up for "Ready or Not" tactical shooter.
I would have as a Voice Command Group called:
"Element".
That would take me to the Voice Commands -> Voice Keys->
"Scan" (as a key command & key press) -> 4
"Slide" (as a key command & key pres) -> 3
(there is a sub-menu at scan that lead to Slide, Pie and Peek but just to keep things simple)
I can then say "Element Scan"
Or I can say "Element Scan, Slide"
Both will work (be recognised) but If I add the other Voice key that goes:
"Element Scan and Pie" or "Element Scan, Pie"
I will get message: "Command not found on Element".
No matter what order I switch the Voice Keys on Element Voice Group, if I have more than two voice keys listed on Voice Commands for a group I will get the "command not found on group, with no execution of the command.
So in other words, Can FoxVox support more than two Voice Keys per "Voice key Command"?
Yes, it does, but you need to understand the rules. First, key order doesn't matter - it's just for your convenience. Second, each key must be fulfilled by a word or phrase on the command in order for it to execute. BUT...you can put the same word on multiple keys and that doesn't mean you need to say it twice.
Example:
If you want to be able to say three things, "Element Scan Slide", "Element Scan Pie", "Element Scan Peek":
Create Voice group "Element"
Create Voice Command with two keys
Key #1: "Scan"
Key #2: "Slide", "Pie", "Peek"
This will require saying "Element" to get on the voice group, "Scan" to fulfill Key #1, and either "Slide", "Pie", or "Peek" to fulfill Key #2. If you add "Scan" to Key #2 also, then you can say "Element Scan ...(whatever else)" and it will be fulfilled as the word "Scan" fulfills both Key #1 and Key #2.
If this still doesn't help you, let me know the exact phrases you want to say to execute the command and I'll try to provide a solution.
Are the outputs really supposed to be the same for Scan 1, 2 & 3? If not, then they have to be on separate commands. If so, then I think maybe this is what you're after? This allows for any of these phrases to work:
Hello Foxster, getting a lot out of using this software with BMS. I'm having an issue however with some AI wingman instructions. When I instruct my wingman to "Fence In" the instructions he receives are "Close Up Formation". I paused the game and go to the FoxVox software and the command line was indeed "Fence In". I test phrase the "Fence In" and it shows 8 W's and a 1 which is correct per the wingman menu. But for some reason in game only 6 W's and a 1 are recognized which per the wingman menu is "Close Up Formation". I tried another phrase instructing the wingman to turn "Music On" but the in game instructions he receives is "Break Left" again which is 6 W's and a 4, not 8 W's and a 4. Cannot understand why the game is cutting out the last two W's. Any help would be much appreciated.
I'll look into it to see if there is a timing issue or something going on.
One thing to consider is it may be sending the keypresses too quickly causing one or two not to register. You can test that by setting a value for Key Delay under the library settings (cog wheel icon to the right of the library name in the upper left). Set it to a value of something like 10 or 20 ms and see if that helps.
It's an awesome peace of software you have developed. Just to clean up things. might it be possible to make a tutorial video. from installing, configure and to setup BMS from Start up, including the newest Ground Chief and may some tips and tricks for speech recognition?
Maybe its only me, when Im making my contact with ATC, its only recognizes precise phrase, For instance: Gunsan GROUND, REQUEST TAXI FOR DEPARTURER.
What I would like to say is.
" Gunsan „GROUND“, Goblin 2 1 good day , 2 ship F16 at the Wolf Pack Apron with Information Alpha, „REQUEST TAXI FOR DEPARTURE.
This extended phrase is not working for me throughout all stages in FoxVox. Ist still WIP. Or do I make something wrong? Also Do you have Discord Channel?
It can/does handle long phrases but there are some things to watch out for, particularly with a phrase as long as the one you show. First, watch out for pauses that trigger a stop in the speech processing (particularly at 'Good day'). Speech processing processes one phrase at a time so if it is split into 2, then each one processes independently. This leads into the second issue - FoxVox works by a command word followed by special key words. In the default library the phrase must start with "Ground" to activate the Ground command group, then include the word taxi (and not include "back" or "ramp"). From your example, you would have to add "Gunsan" to the ground command group to be successful or make "Ground" a wildcard by adding an asterisk "*" behind it (meaning it doesn't have to be the first word spoken and can come anywhere in the phrase). Making it a wildcard would have negative repercussions however as "Ground" is used in other key phrases for wingman, i.e. "Two, datalink ground target" or "Two, weapons free air to ground". These commands wouldn't be executed properly because the ATC Ground command group would be activated instead of the Wingman group due to the wildcard and its earlier position in the list. I may do a revision to prioritize keywords found at the beginning of the phrase over wildcards first, but currently that's not how it works.
So from this, you need to be sure that the processed phrase is found. I experimented with your wording a bit and found that adding both "Taxi*" and "Departure*" as wildcards to the ATC Ground command group seemed to work best. I also added "Departure" as an optional word on the Request Taxi command and as a blocked word to the Request Taxi Back to Ramp command to help prevent an accidental misfire. Doing this seemed to give the best results regardless of pauses being present or not. I just had to focus on making sure "Taxi" and/or "Departure" was understood properly. Also, remember when testing and troubleshooting, be sure to enable the enhanced log to see what is being tracked as you speak. I also think I can possibly make some enhancements with really long phrases that might help in the underlying engine...I'll experiment more for the next update.
I need to see about opening a channel on discord - good suggestion. There's not many people using FoxVox currently, but who knows, might be more in the future.
Hi Foxster. I saw this program you made and I wonder if it could also be used to i.e. write by using your voice? Oh and I tried to install it (even for gaming that would be good, since I have wrist problems, but it would be a lifesaver if it worked for writing/other programs as well) and it gave me an error message. On the program I can see that there is no new library opened, and if I try to create one, it gives the same error as when I opened it.
Below is a transcript of the error:
Object reference not set to an instance of an object.
Inner Exception: Empty
at System.Speech.Internal.ObjectTokens.RegistryDataKey..ctor(String fullPath, RegistryDataKey copyKey)
at System.Speech.Internal.ObjectTokens.ObjectTokenCategory..ctor(String keyId, RegistryDataKey key)
at System.Speech.Internal.ObjectTokens.ObjectTokenCategory.Create(String sCategoryId)
at System.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers()
at oQPjw3XBISnI3ZoZhWl2.JkHbDUJw5F(oQPjw3XBISnI3ZoZhWl2)
at zQd7WjreSE5yZvY3pMZ.yIXDhQr5Lpfgld9wpAR..ctor()
at FoxVox.MainWindow.QBvufRErA(Object , RoutedEventArgs )
at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
Hi there, glad to see your desire to be creative with the app. I'm not sure how well it will function for how you intend to use it, but certainly give it a try. As for the error you report, this is a strange one. The app is basically saying it is failing to find any qualified speech recognition modules on your system. What language is your Windows installed with? Can you check if there are any sub folders found in the following location:
Windows install path (default C:)\Windows\Speech\Engines\SR
For default English US for example there will be a folder call 'en-US'.
If you are finding at least one folder there, the issue may be due to a permissions error in the MS System.Speech module accessing the registry. In that case, installing the app with the installer and possibly running it as an administrator could potentially solve the issue. If there aren't any, then you don't have any recognition engines installed and you'll need to install one here:
Select the Start button, then select Settings > Time & Language > Speech
Please be aware:
Speech Recognition is available only for the following languages: English (United States, United Kingdom, Canada, India, and Australia), French, German, Japanese, Mandarin (Chinese Simplified and Chinese Traditional), and Spanish.
There are new languages supported using the MS Speech Platform 11 but FoxVox does not have those implemented currently.
I will add in some additional error handling to detect this issue more gracefully, but see if you can investigate what I suggested to try and solve it.
I looked into the folder inside Speech and it had a folder named TTS in which I found an en-US. I'll have to try the things you said and see if it works, will report my findings.
Hi Foxster. I tried running your app today with BMS and I am having trouble getting it to work for me. I open the FoxVox app and do some test phrases to make sure its working. I open the BMS launcher and do a test flight and give some various voice commands and I get no response in the cockpit. When i close BMS and look at the FoxVos app the voice commands I gave show up on the bottom of the app. Not sure what setting I am missing to get it to work. Any help is much appreciated. viperipc
Really strange, but glad it's working. I run neither as administrator and they work fine. Perhaps your BMS installed in a protected location like 'Program Files'?
Hello Foxster, first of all thank you for this app, I think this is a more intuitive alternative to VA. I'm trying BMS with it, and I have a weird bug that makes FoxVox to crash when I use the axis slider on my throttle to control the FOV/Zoom in BMS. I'm not sure how I can debug this. I can reproduce it tho.
In fact, no need for BMS, axis movement makes FoxVox UI sluggish and almost unresponsive. I'm using a Virpil CM3 Throttle and Constellation Alpha Stick. If I move the foxvox window while moving the axis, it does that. And randomely makes my usb device crash (I heard unplug/plug usb sound). And in the Even viewer I have an APPCRASH for FoxVox
Repro case : I open fox vox, move my axis all around for a few seconds, foxvox crash and my usb devices reboot. If I'm not opening FoxVox and do the same thing, nothing happens. Weird stuff.
This sounds like an issue with output overload which happens when every tiny movement of the analog stick causes the output to fire, which can quickly overwhelm the system. If you remove/disable the slider binding does everything else work OK? It would be good to narrow down the culprit. Also, just to check, does the system bog down or have any problem when you move the axis while the Key Recognition is disabled (keyboard button second to last in the toolbar)?
Hello, no, I found it's actually not the slider but all my Virpil Hotas Axis. I have another device with axis, a simgears ICP and and this one is not affected. And the key recognition is not enabled.
Interesting. The key recognition disabled rules out output overload. Are you running any virpil control software at the same time? Without key recognition running FoxVox is only passively monitoring input which shouldn't cause any lag.
Awesome tool! I've been away from BMS for a while and was hoping to find an easy to use voice activation program. The video you posted helped a lot and explained things very well. I added several new Game commands on top of your BMS 4.37.3 but when I go to check the outputs using notepad or Word I do not get anything. When I check the ones you created it works. Not sure what I an doing wrong. Best.
Welcome back to BMS...glad you like the app! One thing that comes to mind is make sure that in the settings (little cog wheel icon by library name) you allow any process (by not having any assigned) or include it in the allowed process list. I'm not sure this is the issue though, as you say the built in ones are working. Make sure the command window shows that the voice command is being activated/recognized, and make sure the outputs are defined properly. If you can detail a specific question, I'll be glad to help either here or in the BMS forum.
Thanks for the quick reply Foxster. I should have tried running the voice script in game before commenting. I kept testing the first few commands with notepad but the commands for those were tied to function keys which would not show up on notepad. Once I tried the other commands which were tied to numbers it tested fine. Thanks again for a great, easy to use voice editor. Now its time to get back in the Pit and blow some stuff up! Best, viperipc
Thanks Mistral. I must confess, these have been resolved already and are part of the next release, but it's been slow in coming due to the intricate and complex addition of supporting variables on inputs. This is part of the next phase to prepare for full dynamic integration with BMS (and potentially other apps). In the future, hopefully by BMS v4.38, FoxVox will automatically utilize callsigns, detect which seats are human vs AI, automatically set PTT to match UHF and VHF assigned buttons, and use direct callbacks rather than menu assignments for all comms. It will also auto-bind brakes, flight controls, and buttons used by the Virtual Crew Chief which are set in BMS. There's a lot of work going into this and all of it will make FoxVox more versatile in the end. In the meantime, thank you for pointing out these issues - please continue to do so, and thanks for your patience. Look for the next update releasing soon!
Hello. To simplify bindings, can the BMS_Falcon .key file be imported to the 'output library' ? I would like the names and the actions required to activate that function readily available. I suppose some parsing would be in order, but it would save hundreds of lines of input.
I'm looking into this further, but for now make sure that the Windows speech recognition is set to match the same language selected in FoxVox, and also make sure the Windows UI is set to the same language also.
I will be fixing/improving this area soon as other's have reported the same issue and it really shouldn't be as quirky as it is.
Hiya Foxster. Loving FoxVox so far. Try as I might though I just can't get any sounds to play. I've tried selecting wav files in the Windows directory or on my desktop, and have also tried running FoxVox as admin. Any suggestions?
Hmmm, shouldn't require admin rights or anything special. Are you setting it to play on key recognition or using an output with a play file in it? I'll run some tests before launching the next update (very soon & it's a good one).
Hi ... All on inputs. I've tried a couple of places. PTT Active, Create Alias voice keys, in settings next to Alias Complete, Alias Ready, etc, in the header for a Voice Command Group (e.g., Tower). Never hear anything unfortunately. .wav files are ok right?
Yes wav files are fine, as are other formats. What you're doing should work fine. If you're using headphones be sure other computer sounds aren't muted and are coming through...just to be sure it's not something simple overlooked. I've never had anyone else report this so far and it works fine for me. Very unusual.
Is there any reliance on Windows Media Player for this? As part of my post-install-decrapify-windows I usually remove WMP in favor of VLC using the Turn On/Off Windows Features UI.
This is a pretty great piece of kit, except that "push to talk" doesn't seem to work properly. I push it, but yet I can see in the log it saying that it's recognised what I'm saying but inhibited the command due to push-to-talk.
I'm trying to do it with a Winwing F-16 throttle, binding PTT to the VHF and UHF buttons.
Two sessions ago I went in and fiddled with it, it somehow decided to work. But just now, with the same settings, it's stopped working again. Halp?
I went and disabled PTT altogether than it went and worked okay, but I'd still prefer PTT just in case.
Hmmm. Are you binding both buttons to the same command in the PTT? If so, then both buttons would be required to be pressed together - at least how the program works currently. If you try using just one (either UHF or VHF) as a test, does it work consistently? If so I may need to add support on the PTT to allow for either AND/OR condition for multiple buttons. In its current state ALL defined PTT buttons must be engaged together at the same time - it's not an either or.
Aside from this, you could test if there's a joystick detection problem by testing with a keyboard key instead and seeing if it works consistently. You should see the PTT engage and disengage by the icon turning green whenever the button is pressed. Try testing with some simple scenarios and we'll go from there.
Yeah, it would be "both buttons at the same time" that's the problem! That would explain it!
I'll just test now... ...yup! There we go! Works just fine with only one of them pressed.
Well, there we go then. It would be a nice feature to have, to be able to have more than one PTT bind. Then I could pretend I'm a real fighter pilot man, talking to my element on one radio and AWACS/Tower/Ground on the other :D
Though possibly I could get away with no PTT at all too, I'm not sure.
I've considered adding more ptt options but haven't really needed it yet. I have element and other team comms bound to vhf and atc/ground commands bound to uhf. I'll consider more options for the future.
Oh! I'd forgotten that you can have a different PTT for a different group. That's not too bad.
It does force me to remember to use the one for one and the other for other things, rather than how they kind of seem to be interchangeable, but that's not so bad.
Wait, hang on.
I'm trying to get that set up now, and running into another issue: UHF isn't working, while VHF is. Weird!
For instance, I've set my ELEMENT PTT to VHF, which is "Winwing WINWING Orion Throttle Base II + TGRIP-F16 Btn 24". When I push it, I can see the little white controller icon on the ELEMENT group turn green.
I did exactly the same thing to set GROUND to UHF, which is Btn 26. When I push it, the white controller icon on GROUND stays white, and when I say "Ground, pin" the log indeed reports that it recognised the command and inhibited it due to PTT.
Weird. It did work when I changed GROUND to my C keyboard key, just to test, but not that other HOTAS key. I know the button itself works - after all, FoxVox itself picked it up when setting the PTT key!
Make sure that the button isn't registered in the block list (found in settings). Otherwise, FoxVox won't pick it up when it is pressed. Some other settings in the PTT could also affect it such as the 'Isolate' option which limits PTT to not work if any additional keys are pressed besides the bound PTT Keys.
Besides this, what you describe doesn't seem to be a FoxVox issue. As you said, it picked it up when you assigned it to the PTT. Make sure the hardware/drivers are passing through the button accurately and consistently on press each time - FoxVox doesn't do anything with the input besides monitoring the button states passed in by the OS. Verify it's not being affected by any controller macro logic or third party apps.
Hi again, Please let me know if this is an appropriate forum for asking questions about FOXVOX or if there is a better mechanism. Here goes:
- When I use FoxVox in VR with DCS, everything works superbly. However, when I am just testing with JUST FoxVox open, or with DCS in regular non-VR mode, I notice SOME commands take forever (i.e. 5-10 seconds) to actually execute even after they are recognized. Any ideas? Any way to improve this. Doesn't seem to be an issue FOR ME, in my main usage but it is odd.
I have seen other programs that seem bothered when the Framerate is TOO HIGH (what a problem to have!!) when trying to inject commands, so in VR, it is reduced and the timing seems to work better in those cases. This doesn't apply when just testing with FoxVox only, of course.
Your BMS library works great for BMS 4.37 VR, but I haven't really tried it in Non-VR mode, but I expect that this is what the majority of users are actually doing!
- I have been using FoxVox to issue various numbered commands. I notice that whether I program "ONE" or "1" FoxVox recognizes as the numeral. This is fine, EXCEPT when I get to double digits, if, for example, the voice command F 10 is recognized, it will actually EXECUTE the command under F 1. Similarly for F11, F12 etc. Seems that the trailing digits are ignored and anything from 10 up is recognized as "1". Haven't tested to see if "20" gets recognized as "2" or not. Any ideas?
The more I play with FoxVox the more impressed I am!
First, posting questions and comments here is perfectly fine, and I'll do what I can to answer.
With regards to the delay, this probably has to do with the microphone/sound detection changing between VR and non-VR/normal operation. Are you perhaps using a different microphone setup when you play VR vs standard? The delay is usually caused because the active microphone is picking up external sounds still even after speaking is completed. The speech engine remains listening without letting FoxVox process the speech until it finally times out. You can visually see this if the listening indicator icon remains green for some time after speaking. To fix this, try reducing the sensitivity of the microphone, keep it away from computer fan noise and any other sources of sound that it might pick up as background noise. You can also play with the Timeout setting in FoxVox by entering a low value (like 1) to try and force a timeout earlier.
For your question about numbered commands, I recommend you always use spelled out numbers for the voice command keys (i.e. "One", "Two", etc.) This will prevent "One" from conflicting with "Ten". If you run into a conflict such as "One" vs. "One Hundred", you will need to put a blocking word of "Hundred" onto the "One" key so that it can tell the difference. Alternatively you could place the "One Hundred" command above the "One" command so it will be evaluated first and will be skipped if "Hundred" is not contained in the spoken phrase.
Thanks for your positive comments about the app and I'm glad you like it! My hope is that it can be a useful tool for anyone needing free and customizable voice control :)
Yeah, the spelling out of the numbers was the first thing I tried. Here is a screenshot of what is happening. Spoken "F ONE" gets translated to F1 and the F1 command is executed. Spoken "F TEN" gets translated to F10 BUT the F1 command is executed!
If I use a non-numeric word (I use MAP because F10 also shows the map when a menu isn't up) and "F MAP" works perfectly to invoke the F10 command.
Hi, I probably missed it, but is there a way to do sort of the reverse of Push To Talk, that is, when I press the PTT I use for Multiplayer Comms, it pauses the listening so FoxVox doesn't have to parse and possibly execute an erroneous command while I am not talking to it? I know I can setup a Voice Command to do this, but there was no Push To (not) Talk option that could be configured for the Pause Listening built in command,
Thanks!!! Unfortunately my controllers are sending a lot of inputs from the resting state of various switches (as well as some spurious inputs that I don't quite understand) so I cannot assign my PTT correctly :( Not FOXVox's fault... Guess I will have to go with a voice command like you have programmed in your BMS library.
Any way to manually set a PTT button without using CAPTURE?
Sorry to use this means of communication. I didn't see any other contact methods for you.
In the settings menu go into the "Block Inputs" and add all those buttons that are flooding the detection. They will then be ignored by FoxVox. You can then set the PTT. Alternatively you can just delete them from the PTT after capturing them along with the button you want.
← Return to FoxVox
Comments
Log in with itch.io to leave a comment.
Great tool, only marred by Microsoft Speech Recognition. I don't understand why MS cannot produce better speech recognition for Windows.
Keep up the great work.
Did you consider adding support for switching to other speech recognition libraries by abstracting access to those features? You can have adaption source code between your code and the speech recognition library. In which case your source code can be kept closed.
Thank you, and interesting suggestion. I suppose I could provide program access to speech recognition functions to openly support alternative engines. I'll give this some consideration for the future.
This one may be interesting:
https://github.com/ggerganov/whisper.cpp?tab=readme-ov-file
I second the suggestion, MS speech seems like a limitation... But i am very biased.
Is it possible, to consider making a Linux release? I would pay a lot for that if you did.
Sorry, but no. The problem is that the speech recognition is a major part of this app and is only freely provided by Microsoft Windows platform. There are other speech platforms but they typically require online processing and charge fees, which I won't support. It is built on the .net core platform for portability, but its reliance on these MS components limits it. There are some open source SR engine initiatives out there so perhaps in the future, but don't hold your breath - it might be a while.
edit: There is the Kaldi SR engine which I can possibly work with in the future found here: https://github.com/kaldi-asr/kaldi
If the time ever comes to pass, know i and others of my Linux community greatly appreciate the work!
As far as im aware more MS components have either alternatives or are cross platform such as .NET. So, I wouldn't be surprised if one day you found a (relatively) simple way to make it work or even go forward without so many windows dependancies.
But that's speculation and I'm not going to hold you to that in the slightest. Tho I am hopeful. Have a good day!
(Only 85 days late lol)
Hello Foxster.
Can Foxvox handle more than two command on one Voice Commands?
The software will recongnise one of any two commands in a spoken command, given the correct command inside the phrase but if I add a third command to the Voice command then I will get Command not found on Group.
Thanks
Yes, it does. You must group it correctly on the command depending on how you want it to work - as an alternative or additional phrase. This is explained best in the basic tutorial video; https://youtu.be/0Aqbf5IWd1w
Hi Foxster.
I can see where in your vid that two voice keys work fine and it does with my examples but if I add another voice key to the Voice command making it a list three voice keys commands then I will get command not found on Group.
No matter how I arrange the list.
For example. Setting up for "Ready or Not" tactical shooter.
I would have as a Voice Command Group called:
"Element".
That would take me to the Voice Commands -> Voice Keys->
"Scan" (as a key command & key press) -> 4
"Slide" (as a key command & key pres) -> 3
(there is a sub-menu at scan that lead to Slide, Pie and Peek but just to keep things simple)
I can then say "Element Scan"
Or I can say "Element Scan, Slide"
Both will work (be recognised) but If I add the other Voice key that goes:
"Element Scan and Pie" or "Element Scan, Pie"
I will get message: "Command not found on Element".
No matter what order I switch the Voice Keys on Element Voice Group, if I have more than two voice keys listed on Voice Commands for a group I will get the "command not found on group, with no execution of the command.
So in other words, Can FoxVox support more than two Voice Keys per "Voice key Command"?
Sorry I wasn't clear on initial post.
Yes, it does, but you need to understand the rules. First, key order doesn't matter - it's just for your convenience. Second, each key must be fulfilled by a word or phrase on the command in order for it to execute. BUT...you can put the same word on multiple keys and that doesn't mean you need to say it twice.
Example:
If you want to be able to say three things, "Element Scan Slide", "Element Scan Pie", "Element Scan Peek":
Create Voice group "Element"
Create Voice Command with two keys
Key #1: "Scan"
Key #2: "Slide", "Pie", "Peek"
This will require saying "Element" to get on the voice group, "Scan" to fulfill Key #1, and either "Slide", "Pie", or "Peek" to fulfill Key #2. If you add "Scan" to Key #2 also, then you can say "Element Scan ...(whatever else)" and it will be fulfilled as the word "Scan" fulfills both Key #1 and Key #2.
If this still doesn't help you, let me know the exact phrases you want to say to execute the command and I'll try to provide a solution.
Hiya Foxster.
I have included a screen shot of what I was hoping to acheive.
I have included the expanded Scan Voice key example only as an illustration for you to see exactly what I have in mindand is not the working example.
If you look at the top of the list you will see Scan 1
Scan 2 and Scan 3. It works fine with that example but was hoping to be able to condense all those voice keys into one Scan Voice Key.
I would like to say a phrase with and just one of the key words Peek, Pie, Slide or Scan and just the appropriate Voice Key will be activated.
It works if there is just two voice keys in the Voice commands but not with more than two.
Are the outputs really supposed to be the same for Scan 1, 2 & 3? If not, then they have to be on separate commands. If so, then I think maybe this is what you're after? This allows for any of these phrases to work:
"Element Scan Peek"
"Element Scan Slide"
"Element Scan Pie"
I'm sorry if I'm misunderstanding you...
Hello Foxster, getting a lot out of using this software with BMS. I'm having an issue however with some AI wingman instructions. When I instruct my wingman to "Fence In" the instructions he receives are "Close Up Formation". I paused the game and go to the FoxVox software and the command line was indeed "Fence In". I test phrase the "Fence In" and it shows 8 W's and a 1 which is correct per the wingman menu. But for some reason in game only 6 W's and a 1 are recognized which per the wingman menu is "Close Up Formation". I tried another phrase instructing the wingman to turn "Music On" but the in game instructions he receives is "Break Left" again which is 6 W's and a 4, not 8 W's and a 4. Cannot understand why the game is cutting out the last two W's. Any help would be much appreciated.
I'll look into it to see if there is a timing issue or something going on.
One thing to consider is it may be sending the keypresses too quickly causing one or two not to register. You can test that by setting a value for Key Delay under the library settings (cog wheel icon to the right of the library name in the upper left). Set it to a value of something like 10 or 20 ms and see if that helps.
Hello. That was the trick. I put 10 ms in the Key Delay and it works perfectly now. Thanks a lot for the help.
Best,
It's an awesome peace of software you have developed. Just to clean up things. might it be possible to make a tutorial video. from installing, configure and to setup BMS from Start up, including the newest Ground Chief and may some tips and tricks for speech recognition?
Thanks, and yes, that's a good suggestion since things have become a bit more sophisticated than just voice recognition. On my todo list.
Thanks for the quick reply.
Maybe its only me, when Im making my contact with ATC, its only recognizes precise phrase, For instance: Gunsan GROUND, REQUEST TAXI FOR DEPARTURER.
What I would like to say is.
" Gunsan „GROUND“, Goblin 2 1 good day , 2 ship F16 at the Wolf Pack Apron with Information Alpha, „REQUEST TAXI FOR DEPARTURE.
This extended phrase is not working for me throughout all stages in FoxVox. Ist still WIP. Or do I make something wrong? Also Do you have Discord Channel?
It can/does handle long phrases but there are some things to watch out for, particularly with a phrase as long as the one you show. First, watch out for pauses that trigger a stop in the speech processing (particularly at 'Good day'). Speech processing processes one phrase at a time so if it is split into 2, then each one processes independently. This leads into the second issue - FoxVox works by a command word followed by special key words. In the default library the phrase must start with "Ground" to activate the Ground command group, then include the word taxi (and not include "back" or "ramp"). From your example, you would have to add "Gunsan" to the ground command group to be successful or make "Ground" a wildcard by adding an asterisk "*" behind it (meaning it doesn't have to be the first word spoken and can come anywhere in the phrase). Making it a wildcard would have negative repercussions however as "Ground" is used in other key phrases for wingman, i.e. "Two, datalink ground target" or "Two, weapons free air to ground". These commands wouldn't be executed properly because the ATC Ground command group would be activated instead of the Wingman group due to the wildcard and its earlier position in the list. I may do a revision to prioritize keywords found at the beginning of the phrase over wildcards first, but currently that's not how it works.
So from this, you need to be sure that the processed phrase is found. I experimented with your wording a bit and found that adding both "Taxi*" and "Departure*" as wildcards to the ATC Ground command group seemed to work best. I also added "Departure" as an optional word on the Request Taxi command and as a blocked word to the Request Taxi Back to Ramp command to help prevent an accidental misfire. Doing this seemed to give the best results regardless of pauses being present or not. I just had to focus on making sure "Taxi" and/or "Departure" was understood properly. Also, remember when testing and troubleshooting, be sure to enable the enhanced log to see what is being tracked as you speak. I also think I can possibly make some enhancements with really long phrases that might help in the underlying engine...I'll experiment more for the next update.
I need to see about opening a channel on discord - good suggestion. There's not many people using FoxVox currently, but who knows, might be more in the future.
Thanks again for your time to reply, I will try your suggestions and come back to you
Hi Foxster. I saw this program you made and I wonder if it could also be used to i.e. write by using your voice? Oh and I tried to install it (even for gaming that would be good, since I have wrist problems, but it would be a lifesaver if it worked for writing/other programs as well) and it gave me an error message. On the program I can see that there is no new library opened, and if I try to create one, it gives the same error as when I opened it.
Below is a transcript of the error:
Object reference not set to an instance of an object.
Inner Exception: Empty
at System.Speech.Internal.ObjectTokens.RegistryDataKey..ctor(String fullPath, RegistryDataKey copyKey)
at System.Speech.Internal.ObjectTokens.ObjectTokenCategory..ctor(String keyId, RegistryDataKey key)
at System.Speech.Internal.ObjectTokens.ObjectTokenCategory.Create(String sCategoryId)
at System.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers()
at oQPjw3XBISnI3ZoZhWl2.JkHbDUJw5F(oQPjw3XBISnI3ZoZhWl2)
at zQd7WjreSE5yZvY3pMZ.yIXDhQr5Lpfgld9wpAR..ctor()
at FoxVox.MainWindow.QBvufRErA(Object , RoutedEventArgs )
at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
Hi there, glad to see your desire to be creative with the app. I'm not sure how well it will function for how you intend to use it, but certainly give it a try. As for the error you report, this is a strange one. The app is basically saying it is failing to find any qualified speech recognition modules on your system. What language is your Windows installed with? Can you check if there are any sub folders found in the following location:
Windows install path (default C:)\Windows\Speech\Engines\SR
For default English US for example there will be a folder call 'en-US'.
If you are finding at least one folder there, the issue may be due to a permissions error in the MS System.Speech module accessing the registry. In that case, installing the app with the installer and possibly running it as an administrator could potentially solve the issue. If there aren't any, then you don't have any recognition engines installed and you'll need to install one here:
Select the Start button, then select Settings > Time & Language > Speech
Please be aware:
There are new languages supported using the MS Speech Platform 11 but FoxVox does not have those implemented currently.
I will add in some additional error handling to detect this issue more gracefully, but see if you can investigate what I suggested to try and solve it.
I looked into the folder inside Speech and it had a folder named TTS in which I found an en-US. I'll have to try the things you said and see if it works, will report my findings.
Hi Foxster. I tried running your app today with BMS and I am having trouble getting it to work for me. I open the FoxVox app and do some test phrases to make sure its working. I open the BMS launcher and do a test flight and give some various voice commands and I get no response in the cockpit. When i close BMS and look at the FoxVos app the voice commands I gave show up on the bottom of the app. Not sure what setting I am missing to get it to work. Any help is much appreciated. viperipc
When I open your app and the BMS game as an administrator it works!
Thanks.
Really strange, but glad it's working. I run neither as administrator and they work fine. Perhaps your BMS installed in a protected location like 'Program Files'?
Hello Foxster, first of all thank you for this app, I think this is a more intuitive alternative to VA. I'm trying BMS with it, and I have a weird bug that makes FoxVox to crash when I use the axis slider on my throttle to control the FOV/Zoom in BMS. I'm not sure how I can debug this. I can reproduce it tho.
Thanks for your help.
I'll look into it. Can you explain how you are settling it up so I can duplicate it?
In fact, no need for BMS, axis movement makes FoxVox UI sluggish and almost unresponsive. I'm using a Virpil CM3 Throttle and Constellation Alpha Stick. If I move the foxvox window while moving the axis, it does that. And randomely makes my usb device crash (I heard unplug/plug usb sound). And in the Even viewer I have an APPCRASH for FoxVox
Repro case : I open fox vox, move my axis all around for a few seconds, foxvox crash and my usb devices reboot. If I'm not opening FoxVox and do the same thing, nothing happens. Weird stuff.
This sounds like an issue with output overload which happens when every tiny movement of the analog stick causes the output to fire, which can quickly overwhelm the system. If you remove/disable the slider binding does everything else work OK? It would be good to narrow down the culprit. Also, just to check, does the system bog down or have any problem when you move the axis while the Key Recognition is disabled (keyboard button second to last in the toolbar)?
Hello, no, I found it's actually not the slider but all my Virpil Hotas Axis. I have another device with axis, a simgears ICP and and this one is not affected. And the key recognition is not enabled.
Interesting. The key recognition disabled rules out output overload. Are you running any virpil control software at the same time? Without key recognition running FoxVox is only passively monitoring input which shouldn't cause any lag.
Awesome tool! I've been away from BMS for a while and was hoping to find an easy to use voice activation program. The video you posted helped a lot and explained things very well. I added several new Game commands on top of your BMS 4.37.3 but when I go to check the outputs using notepad or Word I do not get anything. When I check the ones you created it works. Not sure what I an doing wrong. Best.
Welcome back to BMS...glad you like the app! One thing that comes to mind is make sure that in the settings (little cog wheel icon by library name) you allow any process (by not having any assigned) or include it in the allowed process list. I'm not sure this is the issue though, as you say the built in ones are working. Make sure the command window shows that the voice command is being activated/recognized, and make sure the outputs are defined properly. If you can detail a specific question, I'll be glad to help either here or in the BMS forum.
Regards, Foxster
Thanks for the quick reply Foxster. I should have tried running the voice script in game before commenting. I kept testing the first few commands with notepad but the commands for those were tied to function keys which would not show up on notepad. Once I tried the other commands which were tied to numbers it tested fine. Thanks again for a great, easy to use voice editor. Now its time to get back in the Pit and blow some stuff up! Best, viperipc
Hello again
Two problems, maybe not related:
Error message and related output to log when creating output library from scratch:
Specified cast is not valid.Inner Exception: Empty at FoxVox.MainWindow.FdCM9KumuB(Object , RoutedEventArgs ) at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
2) Unable to drag and drop from output library to voice commands, and vice-versa.
version 2300 x64 on win 11 system
Thanks Mistral. I must confess, these have been resolved already and are part of the next release, but it's been slow in coming due to the intricate and complex addition of supporting variables on inputs. This is part of the next phase to prepare for full dynamic integration with BMS (and potentially other apps). In the future, hopefully by BMS v4.38, FoxVox will automatically utilize callsigns, detect which seats are human vs AI, automatically set PTT to match UHF and VHF assigned buttons, and use direct callbacks rather than menu assignments for all comms. It will also auto-bind brakes, flight controls, and buttons used by the Virtual Crew Chief which are set in BMS. There's a lot of work going into this and all of it will make FoxVox more versatile in the end. In the meantime, thank you for pointing out these issues - please continue to do so, and thanks for your patience. Look for the next update releasing soon!
Hello. To simplify bindings, can the BMS_Falcon .key file be imported to the 'output library' ? I would like the names and the actions required to activate that function readily available. I suppose some parsing would be in order, but it would save hundreds of lines of input.
This is already underway...and where it's headed soon. The library will automatically integrate with BMS bindings, call signs, etc.
Hello i have a problem
Speech Error
Failed to start voice recognition for:
английский ( Соедененные штаты)
The language for the grammar does not match the language of the speech recognizer
I'm looking into this further, but for now make sure that the Windows speech recognition is set to match the same language selected in FoxVox, and also make sure the Windows UI is set to the same language also.
I will be fixing/improving this area soon as other's have reported the same issue and it really shouldn't be as quirky as it is.
I solve it by set windows on english, i don't like change language of my system for 1 programm. If you want reply me, text me on discord phaxnyo3t
Latest version FoxVox on Windows11 throws this error on my PC:
Initialization of 'System.Windows.Controls.Primitives.ToggleButton' threw an exception.
Inner Exception: The input string '0.5' was not in a correct format.
at System.Windows.Markup.XamlReader.RewrapException(Exception e, IXamlLineInfo lineInfo, Uri baseUri)
at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
at DO4OcwcHDOw79CnQunk.g0GZcm2JXs(Object, Uri, DO4OcwcHDOw79CnQunk)
at FoxVox.MainWindow.InitializeComponent()
at SUQWpkaNd2gDQnymfjC.g0GZcm2JXs(Object, SUQWpkaNd2gDQnymfjC)
at FoxVox.MainWindow..ctor(String )
at Ch0onTfp8gFyPyEnRR.yvPDn36XURMJjwusNM.OnStartup(StartupEventArgs )
at System.Windows.Application.<.ctor>b__1_0(Object unused)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
Try the new update and see if it fixes your issue.
That works!
Thank you.
Hiya Foxster. Loving FoxVox so far. Try as I might though I just can't get any sounds to play. I've tried selecting wav files in the Windows directory or on my desktop, and have also tried running FoxVox as admin. Any suggestions?
Hmmm, shouldn't require admin rights or anything special. Are you setting it to play on key recognition or using an output with a play file in it? I'll run some tests before launching the next update (very soon & it's a good one).
Hi ... All on inputs. I've tried a couple of places. PTT Active, Create Alias voice keys, in settings next to Alias Complete, Alias Ready, etc, in the header for a Voice Command Group (e.g., Tower). Never hear anything unfortunately.
.wav files are ok right?
Yes wav files are fine, as are other formats. What you're doing should work fine. If you're using headphones be sure other computer sounds aren't muted and are coming through...just to be sure it's not something simple overlooked. I've never had anyone else report this so far and it works fine for me. Very unusual.
Yeah it's quite strange. wav files play fine through VLC. I've tried reinstalling, creating a new library, but still no sounds playing.
Are you running on Win 10 or 11? I've tried adding a sound file to an output and it says it's playing but nothing coming out.
Is there any reliance on Windows Media Player for this? As part of my post-install-decrapify-windows I usually remove WMP in favor of VLC using the Turn On/Off Windows Features UI.
Wondering if I borked something.
Hi there Foxster.
This is a pretty great piece of kit, except that "push to talk" doesn't seem to work properly. I push it, but yet I can see in the log it saying that it's recognised what I'm saying but inhibited the command due to push-to-talk.
I'm trying to do it with a Winwing F-16 throttle, binding PTT to the VHF and UHF buttons.
Two sessions ago I went in and fiddled with it, it somehow decided to work. But just now, with the same settings, it's stopped working again. Halp?
I went and disabled PTT altogether than it went and worked okay, but I'd still prefer PTT just in case.
Hmmm. Are you binding both buttons to the same command in the PTT? If so, then both buttons would be required to be pressed together - at least how the program works currently. If you try using just one (either UHF or VHF) as a test, does it work consistently? If so I may need to add support on the PTT to allow for either AND/OR condition for multiple buttons. In its current state ALL defined PTT buttons must be engaged together at the same time - it's not an either or.
Aside from this, you could test if there's a joystick detection problem by testing with a keyboard key instead and seeing if it works consistently. You should see the PTT engage and disengage by the icon turning green whenever the button is pressed. Try testing with some simple scenarios and we'll go from there.
Let me know what you find.
OHHHHH!
Yeah, it would be "both buttons at the same time" that's the problem! That would explain it!
I'll just test now...
...yup! There we go! Works just fine with only one of them pressed.
Well, there we go then. It would be a nice feature to have, to be able to have more than one PTT bind. Then I could pretend I'm a real fighter pilot man, talking to my element on one radio and AWACS/Tower/Ground on the other :D
Though possibly I could get away with no PTT at all too, I'm not sure.
I've considered adding more ptt options but haven't really needed it yet. I have element and other team comms bound to vhf and atc/ground commands bound to uhf. I'll consider more options for the future.
Oh! I'd forgotten that you can have a different PTT for a different group. That's not too bad.
It does force me to remember to use the one for one and the other for other things, rather than how they kind of seem to be interchangeable, but that's not so bad.
Wait, hang on. I'm trying to get that set up now, and running into another issue: UHF isn't working, while VHF is. Weird! For instance, I've set my ELEMENT PTT to VHF, which is "Winwing WINWING Orion Throttle Base II + TGRIP-F16 Btn 24". When I push it, I can see the little white controller icon on the ELEMENT group turn green. I did exactly the same thing to set GROUND to UHF, which is Btn 26. When I push it, the white controller icon on GROUND stays white, and when I say "Ground, pin" the log indeed reports that it recognised the command and inhibited it due to PTT.
Weird. It did work when I changed GROUND to my C keyboard key, just to test, but not that other HOTAS key. I know the button itself works - after all, FoxVox itself picked it up when setting the PTT key!
Make sure that the button isn't registered in the block list (found in settings). Otherwise, FoxVox won't pick it up when it is pressed. Some other settings in the PTT could also affect it such as the 'Isolate' option which limits PTT to not work if any additional keys are pressed besides the bound PTT Keys.
Besides this, what you describe doesn't seem to be a FoxVox issue. As you said, it picked it up when you assigned it to the PTT. Make sure the hardware/drivers are passing through the button accurately and consistently on press each time - FoxVox doesn't do anything with the input besides monitoring the button states passed in by the OS. Verify it's not being affected by any controller macro logic or third party apps.
Hi again, Please let me know if this is an appropriate forum for asking questions about FOXVOX or if there is a better mechanism. Here goes:
- When I use FoxVox in VR with DCS, everything works superbly. However, when I am just testing with JUST FoxVox open, or with DCS in regular non-VR mode, I notice SOME commands take forever (i.e. 5-10 seconds) to actually execute even after they are recognized. Any ideas? Any way to improve this. Doesn't seem to be an issue FOR ME, in my main usage but it is odd.
I have seen other programs that seem bothered when the Framerate is TOO HIGH (what a problem to have!!) when trying to inject commands, so in VR, it is reduced and the timing seems to work better in those cases. This doesn't apply when just testing with FoxVox only, of course.
Your BMS library works great for BMS 4.37 VR, but I haven't really tried it in Non-VR mode, but I expect that this is what the majority of users are actually doing!
- I have been using FoxVox to issue various numbered commands. I notice that whether I program "ONE" or "1" FoxVox recognizes as the numeral. This is fine, EXCEPT when I get to double digits, if, for example, the voice command F 10 is recognized, it will actually EXECUTE the command under F 1. Similarly for F11, F12 etc. Seems that the trailing digits are ignored and anything from 10 up is recognized as "1". Haven't tested to see if "20" gets recognized as "2" or not. Any ideas?
The more I play with FoxVox the more impressed I am!
Hi @Wreckluse,
First, posting questions and comments here is perfectly fine, and I'll do what I can to answer.
With regards to the delay, this probably has to do with the microphone/sound detection changing between VR and non-VR/normal operation. Are you perhaps using a different microphone setup when you play VR vs standard? The delay is usually caused because the active microphone is picking up external sounds still even after speaking is completed. The speech engine remains listening without letting FoxVox process the speech until it finally times out. You can visually see this if the listening indicator icon remains green for some time after speaking. To fix this, try reducing the sensitivity of the microphone, keep it away from computer fan noise and any other sources of sound that it might pick up as background noise. You can also play with the Timeout setting in FoxVox by entering a low value (like 1) to try and force a timeout earlier.
For your question about numbered commands, I recommend you always use spelled out numbers for the voice command keys (i.e. "One", "Two", etc.) This will prevent "One" from conflicting with "Ten". If you run into a conflict such as "One" vs. "One Hundred", you will need to put a blocking word of "Hundred" onto the "One" key so that it can tell the difference. Alternatively you could place the "One Hundred" command above the "One" command so it will be evaluated first and will be skipped if "Hundred" is not contained in the spoken phrase.
Thanks for your positive comments about the app and I'm glad you like it! My hope is that it can be a useful tool for anyone needing free and customizable voice control :)
Yeah, the spelling out of the numbers was the first thing I tried. Here is a screenshot of what is happening. Spoken "F ONE" gets translated to F1 and the F1 command is executed. Spoken "F TEN" gets translated to F10 BUT the F1 command is executed!
If I use a non-numeric word (I use MAP because F10 also shows the map when a menu isn't up) and "F MAP" works perfectly to invoke the F10 command.
You have uncovered a rather unusual little nuance in the recognition here. I will post an update today that will address it.
Heh! Leave it to me to break stuff! Glad it helped to squash a bug.
Ok, let's see if it's resolved now. I provided a little more info in the changelog you should review. Give it a go and let me know the results.
Hi, I probably missed it, but is there a way to do sort of the reverse of Push To Talk, that is, when I press the PTT I use for Multiplayer Comms, it pauses the listening so FoxVox doesn't have to parse and possibly execute an erroneous command while I am not talking to it? I know I can setup a Voice Command to do this, but there was no Push To (not) Talk option that could be configured for the Pause Listening built in command,
Yes, just enable the 'Inverse' option when you define the PTT and it will change to push-to-mute.
Thanks!!! Unfortunately my controllers are sending a lot of inputs from the resting state of various switches (as well as some spurious inputs that I don't quite understand) so I cannot assign my PTT correctly :( Not FOXVox's fault... Guess I will have to go with a voice command like you have programmed in your BMS library.
Any way to manually set a PTT button without using CAPTURE?
Sorry to use this means of communication. I didn't see any other contact methods for you.
In the settings menu go into the "Block Inputs" and add all those buttons that are flooding the detection. They will then be ignored by FoxVox. You can then set the PTT. Alternatively you can just delete them from the PTT after capturing them along with the button you want.
You rock!! (and seem to have thought of EVERYTHING). Much appreciated!!!