{"id":28194327,"url":"https://github.com/humansinput/rovervoice","last_synced_at":"2025-05-16T13:12:09.058Z","repository":{"id":128773729,"uuid":"245844977","full_name":"humansinput/rovervoice","owner":"humansinput","description":"Really banal, but portable TTS speech synthesis library written in C.","archived":false,"fork":false,"pushed_at":"2020-03-08T20:31:37.000Z","size":551,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-07T09:12:03.098Z","etag":null,"topics":["c","espeak","linux","mac","portable-library","speech","text-to-speech","tts","windows"],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/humansinput.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-03-08T16:05:12.000Z","updated_at":"2024-03-09T12:18:26.000Z","dependencies_parsed_at":"2023-04-03T21:21:34.200Z","dependency_job_id":null,"html_url":"https://github.com/humansinput/rovervoice","commit_stats":null,"previous_names":["humansinput/rovervoice"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humansinput%2Frovervoice","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humansinput%2Frovervoice/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humansinput%2Frovervoice/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humansinput%2Frovervoice/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/humansinput","download_url":"https://codeload.github.com/humansinput/rovervoice/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254535799,"owners_count":22087400,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","espeak","linux","mac","portable-library","speech","text-to-speech","tts","windows"],"created_at":"2025-05-16T13:11:53.091Z","updated_at":"2025-05-16T13:12:09.053Z","avatar_url":"https://github.com/humansinput.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RoverVoice\n\n*A really tiny, banal TTS engine*\n\n*Copyright (C) Tim K 2019-2020 \u003ctimprogrammer@rambler.ru\u003e*\n\nLicensed under 0BSD License.\n\n## Description (aka why did I even create a yet another TTS)\n\n**RoverVoice** is an extremely minimalistic and portable text-to-speech synthesis engine written in C99. Its core advantage is portability and the quite simple process of creating voices for it.\n\nRoverVoice also seems to be the only TTS (as of March 2020) to be licensed under 0BSD License.\n\nBut I made it for research purposes only, so don't expect it to be as advanced as espeak or Apple's VoiceOver.\n\n### Pros\n\n* Portable (written in C99, officially supports Windows, Mac, Linux and FreeBSD, other platforms with ``libcanberra`` or with Win32-like API might be supported too, but are untested)\n* (Quite) fast\n\n### Cons\n\n* Does not support non-Latin languages right now\n* Speaks broken English and (for now) sounds horrible\n* ...and, basically, it isn't that of a serious TTS engine, but rather just a fun research project\n\n## Building\n### Preparation steps\n#### Mac users\n\nmacOS 10.7 and up is supported both as a host or target (the reason for absence of Snow Leopard support is the usage of ``AVFoundation`` for audio playback). You'll need Xcode Command Line tools to be present on the system.\n\n#### Linux/FreeBSD users\n\nYou'll need ``libcanberra`` development headers to be present on your system.\n\n#### Windows users\n\nYou'll need MSYS2 to build this thing. VS is not supported, sorry. :-(\n\n### The building process\n\nJust run these commands:\n\n```\n$ git clone https://github.com/timkoi/rovervoice\n$ cd rovervoice\n$ sh build.sh\n```\n\nAs a result, you'll get:\n- ``libRoVoice.so`` (or ``.dll``, or ``.dylib``) - the library itself\n- ``RoVoice.h`` - the only header that you'll need to use RoverVoice\n- ``rospeak`` - a standalone espeak-like program for using RoverVoice from bash\n\nTo use RoverVoice in your project, just link it to the library and add the ``RoVoice.h`` header to your project. And yes, you'll have to find a voice somewhere, too.\n\n## API docs\n\nSo here are all the 3 (!!) functions that are available:\n\n```\nRoverVoice* RoverVoiceCreate(const char* vid);\nbool RoverVoiceTrySpeak(const RoverVoice* rvc, const char* what);\nvoid RoverVoiceRelease(RoverVoice* rvc);\n```\n\n- ``RoverVoiceCreate`` is responsible for initializing a specific voice. The name of the voice is specified as the argument. RoverVoice itself comes with one reference voice - the English voice, which can be loaded using ``RoverVoiceCreate(\"en\");`` Notice that the voice must either be located in the current working directory or in the directory specified by **ROVERVOICE_PATH** environment variable.\n- ``RoverVoiceTrySpeak`` is responsible for reading the specified text with the specified voice. All the unknown characters are skipped. This method returns ``true`` on success, ``false`` on failure.\n- ``RoverVoiceRelease`` deallocates the voice correctly. Use this instead of ``free``.\n\nExample:\n```\nRoverVoice* vc = RoverVoiceCreate(\"en\");\nif (!RoverVoiceTrySpeak(vc, \"This will be spoken, probably\"))\n\tfprintf(stderr, \"EPIC FAIL\\n\");\nelse\n\tfprintf(stderr, \"EPIC SUCCESS\\n\");\nRoverVoiceRelease(vc);\n```\n\n## Voice format\nRoverVoice voice is basically a folder full of prerecorded WAV files containing the pronunciation of each of the used character in the language. It also contains ``exceptions.rvc`` - a text file specified which character combinations shall be read differently.\n\nNow the name of each ``wav`` file must be in the format of ``\u003cletter in lowercase\u003e.wav``. But, if, let's say, you have a character combination that is read so differently that you cannot replace it with a pronunciation of one character. So, in that case, you can create either ``!.wav`` or ``_\u003ccapital latin letters from A to Z\u003e.wav\\n`` to implement these (``\\n`` is the newline character).\n\nThen, of course, for each exception, you must provide a reference in the ``exceptions.rvc`` in the format of ``\u003csyllable or character combination\u003e@\u003creplacement character\u003e``. Example:\n\n```\ngh@g\nch@!\n```\n\nThis will mean that when RoverVoice phoneme parser will encounter ``gh``, it will read it as if it encountered the letter ``g``, but if it encounters ``ch``, it will try to look for ``!.wav`` and play it instead.\n\nThe maximum duration of each ``.wav`` file is 135 ms.\n\n## License\n\n0BSD\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhumansinput%2Frovervoice","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhumansinput%2Frovervoice","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhumansinput%2Frovervoice/lists"}