alphacep / vosk-api

Offline speech recognition API for Android, iOS, Raspberry Pi and servers with Python, Java, C# and Node
Apache License 2.0
7.69k stars 1.08k forks source link

demo/nodejs/test_microphone doesn't work on Windows due to an issue in mic package #1203

Open lexasss opened 1 year ago

lexasss commented 1 year ago

The test_microphone.js example does not work due to an issue in mic@2.1.1 package it uses. This package is a JS binding for SoX audio tool. On Windows, it calls sox.exe with the parameter -p that is a shortcut for -t sox -, i.e. sets the data format equal to sox. The sox format is always 32-bit, while vosk.Recognizer expects 16-bit data captured from a microphone. Configuring the data value size with -b parameter set to 16 (bitwidth: '16' when creating mic instance in the test_microphone.js) does not help, it is simply ignored.

The issue can be solved by modifying mic.js file from the mic package on line 50 and replacing '-p' with '-t', 'raw', '-'. A solution could be forking this package (as the author does not maintain it anymore) and correcting the set of parameters passed to sox.exe. Similar package, node-microphone, is providing same -p parameter when launching sox.exe on Windows, thus same issue could be expected.

nshmyrev commented 1 year ago

Yes, we need to move to node-portaudio or some other more reasonable package.

sebastientromp commented 1 year ago

Thanks, that helped me get unstuck :)

BrunoHenrique00 commented 1 year ago

Yeap, this solved the issue for me as well :). For sure need to change Microphone example in Node.js. I created a simple example without any external lib to deal with a microphone but using Sox anyway.

Will send a PR to change the example above!