{ "info": { "author": "Full Name", "author_email": "email@example.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Operating System :: Unix", "Programming Language :: Python", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Utilities" ], "description": "========\nOverview\n========\n\n\n\nControl your computer by voice!\n\nFeatures\n========\n\n\n- Define your own personal commands in your home directory (outside the Voca source tree).\n- Different commands are available for each app, in addition to globally available commands.\n- When editing a command file, your new commands are immediately available as soon as you save. No need to fiddle with reloading.\n- If there's a fatal error in a command file, don't worry -- Voca simply uses a backup from the last time that file worked.\n- Your commands are executed asynchronously, so you never need to wait for one to finish before executing the next.\n- Get immediate visual feedback during an utterance -- Voca's *eager mode* can start acting on your commands as soon as the first word in your utterance. Switch to *strict mode* and Voca will wait until the end of your utterance.\n- Voca uses a modern parser, so your grammar can be arbitrarily complex.\n- Use any speech engine you like -- Voca takes its input as newline-separated json on stdin.\n- Voca generates detailed structured logs you can use for debugging or analyzing your command history.\n- Voca provides adapters for current Caster and Dragonfly commands, so you can keep using commands you like -- just install Voca alongside Caster. More plugins and adapters for other systems can be added.\n- Voca has a pluggable architecture. Install independent plugins for controlling your apps, without needing to fork the main repository.\n- Voca uses Python 3.7+, so all the newest Python features are available.\n- Voca is continuously tested in CI, and maintains test coverage checks.\n- Free and open source, licensed GPLv3.\n\nLimitations\n===========\n\n\n- Nobody has used it at all, so I don't know if it's useful.\n- Voca does not provide a speech engine; it requires input from an existing one like Dragon, Kaldi, or DeepSpeech.\n- Multiple platforms are planned, and the basic outline is there, but tests are not currently passing on OSX or Windows. Linux is working.\n- The documentation is minimal.\n- The Caster commands for specific programming languages aren't yet implemented.\n- There are several ways to define commands, but a single obvious way would be better.\n\n\nInstallation\n============\n\nSome of Voca's dependencies are not yet available on PyPI, so it can't be installed directly with pip. In bash, run these commands:\n\n::\n\n # Clone the repository.\n git clone git@github.com:python-voca/voca.git\n # Change working directory to inside the repository.\n cd voca\n # Create a virtual environment with Python 3.7.\n virtualenv -p python3.7 venv\n # Install the dependencies into the virtual environment.\n venv/bin/pip install -r dev-requirements.txt -r requirements.txt\n # Install Voca into the virtual environment.\n venv/bin/pip install --no-deps -e .\n # Activate the virtual environment to add its packages onto your PATH.\n source venv/bin/activate\n\n\n\nUsage\n=====\n\n- Start the server with Docker by running ``./run-kaldi-server.sh`` or use another, such as the online servers at http://voxhub.io/silvius. (Voca is not affiliated with Silvius, but is compatible.)\n- Detect which audio device you're using as the microphone by running ``voca --mic`` with different ``--device`` numbers until one of them shows output.\n- Send audio to the server and receive transcripts on stdout by running ``voca --listen -d 2``, replacing ``2`` with your microphone's device number from the previous step. Try saying something and check that you get json output. Cancel this process with ``control-c``.\n- Check that the manager is working by sending it a transcript. The ``-i`` option says which command module you want to load.\n\n ::\n\n voca manage -i voca.plugins.basic < | voca manage -i voca.plugins.basic\n\n\n Speak into your microphone ``say charlie``. It should type the letter ``c`` on your screen. Cancel this process with ``control-c``.\n\n\n- See the location of your config directory in ``voca --help``, and add new commands in any ``.py`` file at ``{config_dir}/user_modules/*.py``. Run ``voca manage -i user_modules.my_module`` (replacing ``my_module`` with the name of your file, excluding the ``.py`` suffix.)\n\n- Try using the Caster commands.\n\n ::\n\n pip install --no-deps castervoice # Exclude Caster dependencies like wxpython.\n voca listen -d | VOCA_PATCH_CASTER=1 voca manage\n\n\nFor example, in Visual Studio Code, say ``new file``. It should open new file in the editor by automatically pressing ``control-n``.\n\n- Structured logs are stored in ``{config_dir}/logs/``. Examine them with ``eliot-tree --color=always -l0 {filepath} | less -SR``. They'll show how your commands flowed through the program, and will display the full grammar that was active during each command.\n\n\nDocumentation\n=============\n\nPrerequisites:\n\n\n- A speech engine, e.g. kaldi/silvius server via included docker script or on its website\n- Microphone\n- Python 3\n\n\n\nDevelopment\n===========\n\n- git clone this repo and cd inside\n- To start the kaldi server and workers in docker, plus a client listening to your mic, run ``./run-kaldi-server.sh``\n- ``./pycli init`` will create a virtualenv and install the package into it\n- ``./venv/bin/voca manage`` to start the manager process which accepts commands on stdin. The manager will start its workers.\n\n\nTo run the all tests run::\n\n tox\n\nNote, to combine the coverage data from all the tox environments run:\n\n.. list-table::\n :widths: 10 90\n :stub-columns: 1\n\n - - Windows\n - ::\n\n set PYTEST_ADDOPTS=--cov-append\n tox\n\n - - Other\n - ::\n\n PYTEST_ADDOPTS=--cov-append tox\n\n\nChangelog\n=========\n\n0.1.0 (2019-04-30)\n------------------\n\n* First release on PyPI.\n\n\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/python-voca/voca", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "voca", "package_url": "https://pypi.org/project/voca/", "platform": "", "project_url": "https://pypi.org/project/voca/", "project_urls": { "Homepage": "https://github.com/python-voca/voca" }, "release_url": "https://pypi.org/project/voca/0.1.10/", "requires_dist": [ "ws4py", "pyaudio", "click", "trio", "toml", "importlib-resources", "six", "sympy", "pyautogui", "pynput", "dragonfly2", "atpublic", "eliot-tree" ], "requires_python": ">=3.6", "summary": "Control your computer by voice!", "version": "0.1.10" }, "last_serial": 5230606, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "d127679f70c8ed9e13e8e00d26321c7e", "sha256": "7284e933aa64aae11fbd676749066e3594a10123d4f0bca4a0afb9cf3b403da1" }, "downloads": -1, "filename": "voca-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d127679f70c8ed9e13e8e00d26321c7e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 33961, "upload_time": "2019-04-30T06:44:24", "url": "https://files.pythonhosted.org/packages/03/e7/f56292bd107a8f89bb435788c97cdb420cda71e99003b36a428c9b418cba/voca-0.1.0-py2.py3-none-any.whl" } ], "0.1.10": [ { "comment_text": "", "digests": { "md5": "e18d7b82ef4a66a8f957ca7dbef06d30", "sha256": "b013a7aaa6d91fa58ca04b10e42bf4b188445b4c675456393078dc5097c20f03" }, "downloads": -1, "filename": "voca-0.1.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e18d7b82ef4a66a8f957ca7dbef06d30", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 52352, "upload_time": "2019-05-06T04:20:15", "url": "https://files.pythonhosted.org/packages/c0/df/da07b6a4ee85c5054c3347aa3a71e5c0db729f9a876abad07b5b4d4db61e/voca-0.1.10-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c11d89ca3b8a57b4093485ccb287e635", "sha256": "281816450031c190e7f561b565c39e48b5d9e190e91e38d3420505a16b7f1c45" }, "downloads": -1, "filename": "voca-0.1.10.tar.gz", "has_sig": false, "md5_digest": "c11d89ca3b8a57b4093485ccb287e635", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 62581, "upload_time": "2019-05-06T04:20:17", "url": "https://files.pythonhosted.org/packages/22/b2/d17cc4f2a5366701927ce01b04d9444bfc94ecb452f36df99df10ec6101b/voca-0.1.10.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "f8c6cad6433152d46bab28cf37b808ab", "sha256": "29ac073c2d052ece527b340653de2daf3c2962b9d727c323a1130f12dcbbc091" }, "downloads": -1, "filename": "voca-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f8c6cad6433152d46bab28cf37b808ab", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.7", "size": 45388, "upload_time": "2019-04-30T19:49:57", "url": "https://files.pythonhosted.org/packages/b0/8d/6255de82c0581956f0fff60e48cfbe776238cdc6fc34724c8fb3d4cad75d/voca-0.1.2-py2.py3-none-any.whl" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "2f2194e2276967725f10c18455d642af", "sha256": "11f0d8fd58cd9985220fe63c2f7c99bb94ff664979a685b43358139bddc7f381" }, "downloads": -1, "filename": "voca-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2f2194e2276967725f10c18455d642af", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 45358, "upload_time": "2019-04-30T22:46:30", "url": "https://files.pythonhosted.org/packages/98/e5/6fbf762518296514965575ba1098cb941f4906157f655fc0c9fe3f01bb2a/voca-0.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5e701f9a91b9c95b691cdc57f662a1e0", "sha256": "3c9f05bd3654e300329017a2d88dcf0e3af97e73fb85a6e2db900bbfc64ab5ac" }, "downloads": -1, "filename": "voca-0.1.3.tar.gz", "has_sig": false, "md5_digest": "5e701f9a91b9c95b691cdc57f662a1e0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 52860, "upload_time": "2019-04-30T22:46:32", "url": "https://files.pythonhosted.org/packages/75/5e/628b2eb41dfda9527a3371190f27bb2e987d0ab51a18a85f852d022eb28d/voca-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "6c88052bbd02c6b93817dc81c3980bd6", "sha256": "90d0742f8abe74b333156648246830217393fdad1d89aee51e4167b3d473cc7d" }, "downloads": -1, "filename": "voca-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6c88052bbd02c6b93817dc81c3980bd6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 45353, "upload_time": "2019-04-30T22:47:54", "url": "https://files.pythonhosted.org/packages/aa/fe/1c354c08172158c7c2394efdd4b09632a3822a3248bd6de7b061e45bd995/voca-0.1.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1bc16b428d45800fac186b2f5cdadb1c", "sha256": "60d743c345611649101779dc0dc8d69a09eefcff1276ed8fe58bd1e858f70d67" }, "downloads": -1, "filename": "voca-0.1.4.tar.gz", "has_sig": false, "md5_digest": "1bc16b428d45800fac186b2f5cdadb1c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 52847, "upload_time": "2019-04-30T22:47:56", "url": "https://files.pythonhosted.org/packages/64/d5/63995e88e7da4decdc2a948af6892446a5150d57a25ad62caf441a1985be/voca-0.1.4.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "de3d6d2a1b89915838bb2abb78c38c1d", "sha256": "447c261585119aa10c47e2c222dde84ed6b527a7c76a6bb2f9e5f8e400c3b2e1" }, "downloads": -1, "filename": "voca-0.1.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "de3d6d2a1b89915838bb2abb78c38c1d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 54663, "upload_time": "2019-05-05T22:25:42", "url": "https://files.pythonhosted.org/packages/e9/e1/44de9818344c3d30e5b03781b1fdf8930c5dd409c87c8a341183cc8880b1/voca-0.1.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e3cc90973ebf2354132554b0bd09f21d", "sha256": "1919ee88aa94b5141962b78c018d9a6b8de73cf8c8649eb596478b6044246832" }, "downloads": -1, "filename": "voca-0.1.6.tar.gz", "has_sig": false, "md5_digest": "e3cc90973ebf2354132554b0bd09f21d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 6741351, "upload_time": "2019-05-05T22:25:51", "url": "https://files.pythonhosted.org/packages/d4/7a/c68379583346fa2ca3f6dbfcd73a969402c9b432d55e4deb81d824100b13/voca-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "900943b180b337c69e16223906935109", "sha256": "033ad37eb73d758af3d0f54aabe2e2155ccfcefee0a9a26e6789c176bfde8d18" }, "downloads": -1, "filename": "voca-0.1.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "900943b180b337c69e16223906935109", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 52336, "upload_time": "2019-05-05T23:09:44", "url": "https://files.pythonhosted.org/packages/fe/dc/2d5c8540f38205cb5b8591e65786c94866fafea92953299a8f30e8a4e812/voca-0.1.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5ff05da5b618a6d03c8eb5022ebc0a19", "sha256": "af76b3a2c34fb4ce3ea0bddf8bd92c0afaa040ad63cce79fe543b8e4fd3fcc5f" }, "downloads": -1, "filename": "voca-0.1.7.tar.gz", "has_sig": false, "md5_digest": "5ff05da5b618a6d03c8eb5022ebc0a19", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 62580, "upload_time": "2019-05-05T23:09:46", "url": "https://files.pythonhosted.org/packages/0f/f4/ca0fe9f5d7bfb101a9bf16d2a0bf3efd095a5d33cd32efe4de6cf69c3dd7/voca-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "06f5c2be36f55ae8872cc1ba0b240902", "sha256": "c3baebeade0923aeb4023ca781b6672d05ff6a63faef6cbdbd0641bf01cbcc47" }, "downloads": -1, "filename": "voca-0.1.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "06f5c2be36f55ae8872cc1ba0b240902", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 52335, "upload_time": "2019-05-05T23:31:03", "url": "https://files.pythonhosted.org/packages/f6/dd/8a19bf9d7b125a2e217d4defb5402547e538f121079bb54fe31507177687/voca-0.1.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d42f07823691a0c670d8306329d3dc3e", "sha256": "df9b872b8d7ba53bdc8b609dc2fe2d963df2e8f9c00a4a91360c1f1f0a70a685" }, "downloads": -1, "filename": "voca-0.1.8.tar.gz", "has_sig": false, "md5_digest": "d42f07823691a0c670d8306329d3dc3e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 62579, "upload_time": "2019-05-05T23:31:05", "url": "https://files.pythonhosted.org/packages/25/1b/9d937117c31d04a85e6e44bb9c99d4b7cf0365b255eb210c1c21eaf8e681/voca-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "2e9a194776eeb5bccf066eacbbedac18", "sha256": "fe2d91a11feb270f342169bcada8428eaaec265dfbb7866f2d4c5714735346d0" }, "downloads": -1, "filename": "voca-0.1.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2e9a194776eeb5bccf066eacbbedac18", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 52336, "upload_time": "2019-05-06T02:21:11", "url": "https://files.pythonhosted.org/packages/d0/a7/53e2daa3592b5e9126a1e4005f92a7e78eca3ec7eb5b93860c97511f0a1c/voca-0.1.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eb6b337914ab9f7d51afaaea2b7fefb7", "sha256": "2b5e1ad26c468a570b7aff19856bf3b97fecd1d7f4ed4075aa5bb94f3fe71eb2" }, "downloads": -1, "filename": "voca-0.1.9.tar.gz", "has_sig": false, "md5_digest": "eb6b337914ab9f7d51afaaea2b7fefb7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 62573, "upload_time": "2019-05-06T02:21:12", "url": "https://files.pythonhosted.org/packages/ac/89/420a58dc2c122716fea4544a8f26696b119dc359764d4d6da6dd42c83290/voca-0.1.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e18d7b82ef4a66a8f957ca7dbef06d30", "sha256": "b013a7aaa6d91fa58ca04b10e42bf4b188445b4c675456393078dc5097c20f03" }, "downloads": -1, "filename": "voca-0.1.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e18d7b82ef4a66a8f957ca7dbef06d30", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 52352, "upload_time": "2019-05-06T04:20:15", "url": "https://files.pythonhosted.org/packages/c0/df/da07b6a4ee85c5054c3347aa3a71e5c0db729f9a876abad07b5b4d4db61e/voca-0.1.10-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c11d89ca3b8a57b4093485ccb287e635", "sha256": "281816450031c190e7f561b565c39e48b5d9e190e91e38d3420505a16b7f1c45" }, "downloads": -1, "filename": "voca-0.1.10.tar.gz", "has_sig": false, "md5_digest": "c11d89ca3b8a57b4093485ccb287e635", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 62581, "upload_time": "2019-05-06T04:20:17", "url": "https://files.pythonhosted.org/packages/22/b2/d17cc4f2a5366701927ce01b04d9444bfc94ecb452f36df99df10ec6101b/voca-0.1.10.tar.gz" } ] }