├── .dockerignore ├── .env.development ├── .gitignore ├── .projectile ├── CHANGELOG ├── Dockerfile ├── LICENSE ├── Makefile ├── README.md ├── VERSION ├── _config.yml ├── app.py ├── babel.config.js ├── bin ├── dict2phonemes.py ├── docker │ ├── farcompilestrings │ ├── jsgf-gen │ ├── ngramcount │ ├── ngrammake │ ├── ngramprint │ ├── ngramsymbols │ └── phonetisaurus-g2p ├── generate-slots.py ├── get-frequent-words.py ├── get-ipa-examples.sh ├── get-phoneme-examples.py ├── guess-espeak.py ├── install-models.sh ├── install-profiles.sh ├── kaldi │ ├── decode-gmm-wav.sh │ ├── decode-wav-nnet3.sh │ ├── train-lm-gmm.sh │ └── train-lm-nnet3.sh ├── lookup-words.py ├── mock-commands │ ├── handle.py │ ├── handle.sh │ ├── listen.sh │ ├── sleep.sh │ ├── speech2text.sh │ ├── text2intent.sh │ ├── text2speech.sh │ ├── train-intent.sh │ └── train-stt.sh ├── pico2wave ├── print-phonemes.py ├── rhasspy ├── rhasspy-cli └── rhasspy-cli-ro ├── build-from-source.sh ├── config.json ├── create-venv.sh ├── debian ├── DEBIAN │ └── control └── bin │ └── rhasspy-server ├── debianize.sh ├── docker ├── rhasspy └── run.sh ├── docs ├── _config.yml ├── about.md ├── audio-input.md ├── audio-output.md ├── command-listener.md ├── development.md ├── hardware.md ├── img │ ├── bear-gun.png │ ├── bear-gun.svg │ ├── favicon.ico │ ├── favicon.png │ ├── hardware.png │ ├── hass-io-audio.png │ ├── hass-io-store.png │ ├── intent.png │ ├── intent.svg │ ├── license.png │ ├── microphone.png │ ├── microphone.svg │ ├── mike-head.png │ ├── nodered-websocket.png │ ├── rhasspy-discourse-logo.png │ ├── rhasspy-discourse-logo.svg │ ├── rhasspy-discourse-square-logo-nocircle.png │ ├── rhasspy-discourse-square-logo.png │ ├── rhasspy-overview.png │ ├── rhasspy-overview.uml.txt │ ├── rhasspy-raven-square.svg │ ├── rhasspy-raven.svg │ ├── rhasspy.png │ ├── rhasspy.svg │ ├── services.svg │ ├── smiley-face.png │ ├── smiley_face.svg │ ├── speaker.png │ ├── speaker.svg │ ├── terminal.svg │ ├── terminal_bliss.svg │ ├── training.png │ ├── training.svg │ ├── wakeup.png │ ├── wakeup.svg │ ├── web-advanced.png │ ├── web-log.png │ ├── web-sentences.png │ ├── web-settings.png │ ├── web-slots.png │ ├── web-speech.png │ ├── web-top.png │ ├── web-words-2.png │ └── web-words.png ├── index.md ├── installation.md ├── intent-handling.md ├── intent-recognition.md ├── license.md ├── profiles.md ├── reference.md ├── requirements.txt ├── speech-to-text.md ├── text-to-speech.md ├── training.md ├── tutorials.md ├── usage.md └── wake-word.md ├── download-dependencies.sh ├── etc ├── homeassistant │ └── config │ │ ├── automations.yaml │ │ ├── configuration.yaml │ │ ├── customize.yaml │ │ ├── groups.yaml │ │ └── scripts.yaml ├── linux_atlas_aarch64.mk ├── rhasspy.service ├── shflags ├── test │ ├── de │ │ ├── test.json │ │ └── test.wav │ ├── el │ │ ├── test.json │ │ └── test.wav │ ├── en │ │ ├── test.json │ │ └── test.wav │ ├── es │ │ ├── test.json │ │ └── test.wav │ ├── fr │ │ ├── test.json │ │ └── test.wav │ ├── hi │ │ └── test.json │ ├── it │ │ ├── test.json │ │ └── test.wav │ ├── nl │ │ ├── test.json │ │ └── test.wav │ ├── pt │ │ ├── test.json │ │ └── test.wav │ ├── ru │ │ ├── test.json │ │ └── test.wav │ ├── sv │ │ ├── test.json │ │ └── test.wav │ ├── turn_on_living_room_lamp.wav │ ├── vi │ │ ├── test.json │ │ └── test.wav │ ├── what_time_is_it.wav │ └── zh │ │ └── test.json └── wav │ ├── beep_error.wav │ ├── beep_hi.wav │ └── beep_lo.wav ├── examples ├── client-server │ ├── client │ │ └── profiles │ │ │ └── en │ │ │ └── profile.json │ ├── docker-compose.yml │ ├── home-assistant │ │ └── config │ │ │ ├── automations.yaml │ │ │ ├── configuration.yaml │ │ │ ├── customize.yaml │ │ │ ├── groups.yaml │ │ │ ├── home-assistant.log │ │ │ ├── scripts.yaml │ │ │ └── ui-lovelace.yaml │ └── server │ │ └── profiles │ │ └── en │ │ └── profile.json ├── copy-audio │ ├── docker-compose.yml │ ├── rhasspy │ │ └── profiles │ │ │ └── en │ │ │ ├── copy-audio.sh │ │ │ └── profile.json │ └── run-venv.sh ├── mqtt-hermes │ ├── rhasspy │ │ └── profiles │ │ │ └── en │ │ │ └── profile.json │ ├── run-venv.sh │ ├── send-wav.sh │ ├── wav │ │ ├── output001.wav │ │ ├── output002.wav │ │ ├── output003.wav │ │ ├── output004.wav │ │ ├── output005.wav │ │ ├── output006.wav │ │ ├── output007.wav │ │ ├── output008.wav │ │ ├── output009.wav │ │ ├── output010.wav │ │ ├── output011.wav │ │ ├── output012.wav │ │ ├── output013.wav │ │ ├── output014.wav │ │ ├── output015.wav │ │ ├── output016.wav │ │ ├── output017.wav │ │ ├── output018.wav │ │ ├── output019.wav │ │ ├── output020.wav │ │ ├── output021.wav │ │ ├── output022.wav │ │ ├── output023.wav │ │ ├── output024.wav │ │ ├── output025.wav │ │ ├── output026.wav │ │ ├── output027.wav │ │ ├── output028.wav │ │ ├── output029.wav │ │ ├── output030.wav │ │ ├── output031.wav │ │ ├── output032.wav │ │ ├── output033.wav │ │ ├── output034.wav │ │ ├── output035.wav │ │ ├── output036.wav │ │ ├── output037.wav │ │ ├── output038.wav │ │ ├── output039.wav │ │ ├── output040.wav │ │ ├── output041.wav │ │ ├── output042.wav │ │ ├── output043.wav │ │ ├── output044.wav │ │ ├── output045.wav │ │ ├── output046.wav │ │ ├── output047.wav │ │ ├── output048.wav │ │ ├── output049.wav │ │ ├── output050.wav │ │ ├── output051.wav │ │ ├── output052.wav │ │ ├── output053.wav │ │ ├── output054.wav │ │ ├── output055.wav │ │ ├── output056.wav │ │ ├── output057.wav │ │ ├── output058.wav │ │ ├── output059.wav │ │ ├── output060.wav │ │ ├── output061.wav │ │ ├── output062.wav │ │ ├── output063.wav │ │ ├── output064.wav │ │ ├── output065.wav │ │ ├── output066.wav │ │ ├── output067.wav │ │ ├── output068.wav │ │ ├── output069.wav │ │ ├── output070.wav │ │ ├── output071.wav │ │ ├── output072.wav │ │ ├── output073.wav │ │ ├── output074.wav │ │ ├── output075.wav │ │ ├── output076.wav │ │ ├── output077.wav │ │ ├── output078.wav │ │ ├── output079.wav │ │ ├── output080.wav │ │ ├── output081.wav │ │ ├── output082.wav │ │ ├── output083.wav │ │ ├── output084.wav │ │ ├── output085.wav │ │ ├── output086.wav │ │ ├── output087.wav │ │ ├── output088.wav │ │ ├── output089.wav │ │ ├── output090.wav │ │ ├── output091.wav │ │ ├── output092.wav │ │ ├── output093.wav │ │ ├── output094.wav │ │ ├── output095.wav │ │ ├── output096.wav │ │ ├── output097.wav │ │ ├── output098.wav │ │ ├── output099.wav │ │ ├── output100.wav │ │ ├── output101.wav │ │ ├── output102.wav │ │ ├── output103.wav │ │ ├── output104.wav │ │ ├── output105.wav │ │ ├── output106.wav │ │ ├── output107.wav │ │ ├── output108.wav │ │ ├── output109.wav │ │ ├── output110.wav │ │ ├── output111.wav │ │ ├── output112.wav │ │ ├── output113.wav │ │ ├── output114.wav │ │ ├── output115.wav │ │ ├── output116.wav │ │ ├── output117.wav │ │ ├── output118.wav │ │ ├── output119.wav │ │ ├── output120.wav │ │ ├── output121.wav │ │ ├── send-wavs.sh │ │ └── what_time_is_it.wav │ └── what_time_is_it.wav ├── nodered │ ├── README.md │ ├── rgb-flow.js │ ├── run-nodered.sh │ └── time-light-flow.js ├── timer │ ├── README.md │ ├── flow.js │ ├── flow.png │ ├── sentences.ini │ └── timer-sentences.svg ├── typical-intent │ ├── docker-compose.yml │ ├── home-assistant │ │ └── config │ │ │ ├── automations.yaml │ │ │ ├── configuration.yaml │ │ │ ├── customize.yaml │ │ │ ├── groups.yaml │ │ │ ├── scripts.yaml │ │ │ └── ui-lovelace.yaml │ └── rhasspy │ │ └── profiles │ │ └── en │ │ └── profile.json └── typical │ ├── README.md │ ├── docker-compose.yml │ ├── home-assistant │ └── config │ │ ├── automations.yaml │ │ ├── configuration.yaml │ │ ├── customize.yaml │ │ ├── groups.yaml │ │ ├── scripts.yaml │ │ └── ui-lovelace.yaml │ ├── rhasspy │ └── profiles │ │ └── en │ │ ├── okay_rhasspy.pmdl │ │ └── profile.json │ ├── run-hass.sh │ └── run-venv.sh ├── make-g2p.sh ├── mkdocs.yml ├── mypy.ini ├── package.json ├── porcupine.py ├── profiles ├── ca │ ├── custom_words.txt │ ├── espeak_phonemes.txt │ ├── frequent_words.txt │ ├── phoneme_examples.txt │ ├── profile.json │ ├── sentences.ini │ ├── slot_programs │ │ └── rhasspy │ │ │ └── number │ ├── slots │ │ └── rhasspy │ │ │ ├── days │ │ │ └── months │ └── stop_words.txt ├── de │ ├── custom_words.txt │ ├── dictionary.txt │ ├── espeak_phonemes.txt │ ├── frequent_words.html │ ├── frequent_words.phones │ ├── frequent_words.txt │ ├── kaldi │ │ ├── custom_words.txt │ │ ├── espeak_phonemes.txt │ │ └── phoneme_examples.txt │ ├── language_model.txt │ ├── phoneme_examples.txt │ ├── profile.json │ ├── sentences.ini │ ├── slot_programs │ │ └── rhasspy │ │ │ └── number │ ├── slots │ │ └── rhasspy │ │ │ ├── days │ │ │ └── months │ └── stop_words.txt ├── defaults.json ├── el │ ├── custom_words.txt │ ├── espeak_phonemes.txt │ ├── frequent_words.txt │ ├── phoneme_examples.txt │ ├── profile.json │ ├── sentences.ini │ ├── slot_programs │ │ └── rhasspy │ │ │ └── number │ ├── slots │ │ └── rhasspy │ │ │ ├── days │ │ │ └── months │ └── stop_words.txt ├── en │ ├── custom_words.txt │ ├── espeak_phonemes.txt │ ├── frequent_words.html │ ├── frequent_words.txt │ ├── ipa_phonemes.txt │ ├── kaldi │ │ ├── custom_words.txt │ │ ├── espeak_phonemes.txt │ │ └── phoneme_examples.txt │ ├── okay_rhasspy.pmdl │ ├── phoneme_examples.txt │ ├── profile.json │ ├── sentences.ini │ ├── slot_programs │ │ └── rhasspy │ │ │ └── number │ ├── slots │ │ └── rhasspy │ │ │ ├── days │ │ │ └── months │ └── stop_words.txt ├── es │ ├── custom_words.txt │ ├── espeak_phonemes.txt │ ├── frequent_words.html │ ├── frequent_words.txt │ ├── phoneme_examples.txt │ ├── profile.json │ ├── sentences.ini │ ├── slot_programs │ │ └── rhasspy │ │ │ └── number │ ├── slots │ │ └── rhasspy │ │ │ ├── days │ │ │ └── months │ └── stop_words.txt ├── fr │ ├── custom_words.txt │ ├── dictionary.txt │ ├── espeak_phonemes.txt │ ├── frequent_words.html │ ├── frequent_words.txt │ ├── kaldi │ │ ├── custom_words.txt │ │ ├── espeak_phonemes.txt │ │ └── phoneme_examples.txt │ ├── language_model.txt │ ├── phoneme_examples.txt │ ├── profile.json │ ├── sentences.ini │ ├── slot_programs │ │ └── rhasspy │ │ │ └── number │ ├── slots │ │ └── rhasspy │ │ │ ├── days │ │ │ └── months │ └── stop_words.txt ├── hi │ ├── custom_words.txt │ ├── espeak_phonemes.txt │ ├── frequent_words.txt │ ├── phoneme_examples.txt │ ├── profile.json │ ├── sentences.ini │ ├── slot_programs │ │ └── rhasspy │ │ │ └── number │ ├── slots │ │ └── rhasspy │ │ │ ├── days │ │ │ └── months │ └── stop_words.txt ├── it │ ├── custom_words.txt │ ├── dictionary.txt │ ├── espeak_phonemes.txt │ ├── frequent_words.html │ ├── frequent_words.txt │ ├── language_model.txt │ ├── phoneme_examples.txt │ ├── profile.json │ ├── sentences.ini │ ├── slot_programs │ │ └── rhasspy │ │ │ └── number │ ├── slots │ │ └── rhasspy │ │ │ ├── days │ │ │ └── months │ └── stop_words.txt ├── nl │ ├── custom_words.txt │ ├── dictionary.txt │ ├── espeak_phonemes.txt │ ├── frequent_words.html │ ├── frequent_words.txt │ ├── kaldi │ │ ├── custom_words.txt │ │ ├── espeak_phonemes.txt │ │ └── phoneme_examples.txt │ ├── language_model.txt │ ├── phoneme_examples.txt │ ├── profile.json │ ├── sentences.ini │ ├── slot_programs │ │ └── rhasspy │ │ │ └── number │ ├── slots │ │ └── rhasspy │ │ │ ├── days │ │ │ └── months │ └── stop_words.txt ├── pt │ ├── custom_words.txt │ ├── espeak_phonemes.txt │ ├── frequent_words.txt │ ├── phoneme_examples.txt │ ├── profile.json │ ├── sentences.ini │ ├── slot_programs │ │ └── rhasspy │ │ │ └── number │ ├── slots │ │ └── rhasspy │ │ │ ├── days │ │ │ └── months │ └── stop_words.txt ├── ru │ ├── custom_words.txt │ ├── dictionary.txt │ ├── espeak_phonemes.txt │ ├── frequent_words.html │ ├── frequent_words.txt │ ├── language_model.txt │ ├── phoneme_examples.txt │ ├── profile.json │ ├── sentences.ini │ ├── slot_programs │ │ └── rhasspy │ │ │ └── number │ ├── slots │ │ └── rhasspy │ │ │ ├── days │ │ │ └── months │ └── stop_words.txt ├── sv │ ├── custom_words.txt │ ├── espeak_phonemes.txt │ ├── frequent_words.phones │ ├── frequent_words.txt │ ├── phoneme_examples.txt │ ├── profile.json │ ├── sentences.ini │ ├── slot_programs │ │ └── rhasspy │ │ │ └── number │ ├── slots │ │ └── rhasspy │ │ │ ├── days │ │ │ └── months │ └── stop_words.txt ├── vi │ ├── custom_words.txt │ ├── dictionary.txt │ ├── espeak_phonemes.txt │ ├── frequent_words.txt │ ├── language_model.txt │ ├── phoneme_examples.txt │ ├── profile.json │ ├── sentences.ini │ ├── slot_programs │ │ └── rhasspy │ │ │ └── number │ ├── slots │ │ └── rhasspy │ │ │ ├── days │ │ │ └── months │ └── stop_words.txt └── zh │ ├── custom_words.txt │ ├── espeak_phonemes.txt │ ├── frequent_words.txt │ ├── phoneme_examples.txt │ ├── profile.json │ ├── sentences.ini │ ├── slot_programs │ └── rhasspy │ │ └── number │ ├── slots │ └── rhasspy │ │ ├── days │ │ └── months │ └── stop_words.txt ├── public ├── css │ ├── bootstrap-grid.css │ ├── bootstrap-grid.css.map │ ├── bootstrap-grid.min.css │ ├── bootstrap-grid.min.css.map │ ├── bootstrap-reboot.css │ ├── bootstrap-reboot.css.map │ ├── bootstrap-reboot.min.css │ ├── bootstrap-reboot.min.css.map │ ├── bootstrap.css │ ├── bootstrap.css.map │ ├── bootstrap.min.css │ ├── bootstrap.min.css.map │ ├── fa-brands.css │ ├── fa-brands.min.css │ ├── fa-regular.css │ ├── fa-regular.min.css │ ├── fa-solid.css │ ├── fa-solid.min.css │ ├── fontawesome-all.css │ ├── fontawesome-all.min.css │ ├── fontawesome.css │ ├── fontawesome.min.css │ ├── jquery.jsonview.css │ ├── jquery.jsonview.min.css │ └── main.css ├── img │ ├── favicon.png │ ├── logo.png │ ├── microphone.png │ ├── microphone.svg │ └── rhasspy.svg ├── index.html ├── js │ ├── axios.js │ ├── axios.map │ ├── axios.min.js │ ├── axios.min.map │ ├── bootstrap.bundle.js │ ├── bootstrap.bundle.js.map │ ├── bootstrap.bundle.min.js │ ├── bootstrap.bundle.min.js.map │ ├── bootstrap.js │ ├── bootstrap.js.map │ ├── bootstrap.min.js │ ├── bootstrap.min.js.map │ ├── jquery-3.3.1.slim.min.js │ ├── jquery.jsonview.js │ ├── jquery.jsonview.min.js │ ├── popper.min.js │ ├── recorder.js │ ├── vue-axios.es5.js │ ├── vue-axios.min.js │ ├── vue.js │ └── workbench.xmi ├── swagger.yaml └── webfonts │ ├── fa-brands-400.eot │ ├── fa-brands-400.svg │ ├── fa-brands-400.ttf │ ├── fa-brands-400.woff │ ├── fa-brands-400.woff2 │ ├── fa-regular-400.eot │ ├── fa-regular-400.svg │ ├── fa-regular-400.ttf │ ├── fa-regular-400.woff │ ├── fa-regular-400.woff2 │ ├── fa-solid-900.eot │ ├── fa-solid-900.svg │ ├── fa-solid-900.ttf │ ├── fa-solid-900.woff │ └── fa-solid-900.woff2 ├── pylintrc ├── requirements.txt ├── requirements_all.txt ├── requirements_min.txt ├── rhasspy.spec ├── rhasspy ├── __init__.py ├── __main__.py ├── actor.py ├── audio_player.py ├── audio_recorder.py ├── command_listener.py ├── core.py ├── dialogue.py ├── events.py ├── intent.py ├── intent_handler.py ├── intent_train.py ├── lexconvert.py ├── mqtt.py ├── profile_schema.json ├── profiles.py ├── pronounce.py ├── py.typed ├── stt.py ├── stt_train.py ├── train │ ├── __init__.py │ ├── ini_jsgf.py │ ├── jsgf2fst │ │ ├── DependencyListener.py │ │ ├── FSTListener.py │ │ ├── JsgfListener.py │ │ ├── __init__.py │ │ └── fstaccept.py │ └── vocab_dict.py ├── tts.py ├── tune.py ├── utils.py └── wake.py ├── run-docker-alsa.sh ├── run-docker-pulseaudio.sh ├── run-tests.sh ├── run-venv.sh ├── setup.cfg ├── src ├── App.vue ├── assets │ ├── ProfileDefaults.js │ └── logo.png ├── components │ ├── AdvancedSettings.vue │ ├── LookupPronounce.vue │ ├── Problems.vue │ ├── ProfileSettings.vue │ ├── ProfileSettings.vue.rej │ ├── RhasspyLog.vue │ ├── Slots.vue │ ├── TrainLanguageModel.vue │ ├── TranscribeSpeech.vue │ └── profile │ │ ├── AudioPlaying.vue │ │ ├── AudioRecording.vue │ │ ├── IntentHandling.vue │ │ ├── IntentRecognition.vue │ │ ├── Overview.vue │ │ ├── Rhasspy.vue │ │ ├── SpeechRecognition.vue │ │ ├── TextToSpeech.vue │ │ ├── VoiceDetection.vue │ │ └── WakeWord.vue ├── main.js ├── package-lock.json ├── services │ ├── Api.js │ ├── LanguageModelService.js │ ├── ProfileService.js │ ├── PronounceService.js │ ├── RhasspyService.js │ ├── StateService.js │ └── TranscribeService.js └── workbench.xmi ├── test.py ├── tools ├── Dockerfile └── Makefile └── yarn.lock /.env.development: -------------------------------------------------------------------------------- 1 | VUE_APP_BASE_URL=http://localhost:12101 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Caches and virtual environment 2 | __pycache__/ 3 | .mypy_cache/ 4 | .venv/ 5 | .ipynb_checkpoints/ 6 | download/ 7 | build/ 8 | 9 | # QEMU 10 | etc/qemu-arm-static 11 | etc/qemu-aarch64-static 12 | 13 | # npm 14 | node_modules/ 15 | 16 | # Web interface 17 | dist/ 18 | 19 | # Profiles 20 | .downloaded 21 | acoustic_model/ 22 | base_dictionary.txt 23 | base_language_model.txt 24 | g2p.fst 25 | profiles/*/model/ 26 | profiles/*/*.umdl 27 | profiles/*/flair/ 28 | profiles/*/*.pb 29 | profiles/*/*.pb.params 30 | profiles/*/snowboy/ 31 | profiles/*/precise/ 32 | profiles/*/porcupine/ 33 | .doit.db 34 | vocab.txt 35 | 36 | adapt_config.json 37 | tagged_sentences.md 38 | unknown_words.txt 39 | frequent_words.html 40 | intent_examples.json 41 | sentences.txt 42 | 43 | en-kaldi/ 44 | en-zamia/ 45 | 46 | grammars/ 47 | sentences/ 48 | record/ 49 | 50 | # Tools 51 | tools/dist/ 52 | tools/etc/ 53 | opt/ 54 | 55 | # Third party 56 | etc/*.tar.gz 57 | etc/*.tar.xz 58 | etc/*.deb 59 | 60 | # Examples 61 | .storage/ 62 | deps/ 63 | tts/ 64 | *.log 65 | .HA_VERSION 66 | 67 | # Tests 68 | etc/test/pt/Google/ 69 | etc/test/pt/PT* 70 | etc/test/pt/original/ 71 | etc/test/vi/2* 72 | 73 | # Misc 74 | workbench.xmi 75 | 76 | # Debian 77 | site/ 78 | debian/rhasspy-server* -------------------------------------------------------------------------------- /.projectile: -------------------------------------------------------------------------------- 1 | - /.venv/ 2 | - /dist/ 3 | - /node_modules/ 4 | - /src/node_modules/ 5 | - /.mypy_cache/ 6 | - /test/ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Michael Hansen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /VERSION: -------------------------------------------------------------------------------- 1 | 2.4.20 -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - 3 | scope: 4 | path: "" 5 | values: 6 | render_with_liquid: false 7 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/app' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /bin/docker/farcompilestrings: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | test -t 1 && use_tty='-t' 3 | docker run --rm -i ${use_tty} \ 4 | -u $(id -u):$(id -g) \ 5 | -v "$HOME:$HOME" \ 6 | -w "$(pwd)" \ 7 | --entrypoint farcompilestrings \ 8 | synesthesiam/opengrm:1.3.4 \ 9 | "$@" 10 | -------------------------------------------------------------------------------- /bin/docker/jsgf-gen: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | test -t 1 && use_tty='-t' 3 | docker run --rm -i ${use_tty} \ 4 | -u $(id -u):$(id -g) \ 5 | -v "$HOME:$HOME" \ 6 | -w "$(pwd)" \ 7 | --entrypoint jsgf-gen \ 8 | synesthesiam/jsgf-gen:1.0 \ 9 | "$@" 10 | -------------------------------------------------------------------------------- /bin/docker/ngramcount: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | test -t 1 && use_tty='-t' 3 | docker run --rm -i ${use_tty} \ 4 | -u $(id -u):$(id -g) \ 5 | -v "$HOME:$HOME" \ 6 | -w "$(pwd)" \ 7 | --entrypoint ngramcount \ 8 | synesthesiam/opengrm:1.3.4 \ 9 | "$@" 10 | -------------------------------------------------------------------------------- /bin/docker/ngrammake: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | test -t 1 && use_tty='-t' 3 | docker run --rm -i ${use_tty} \ 4 | -u $(id -u):$(id -g) \ 5 | -v "$HOME:$HOME" \ 6 | -w "$(pwd)" \ 7 | --entrypoint ngrammake \ 8 | synesthesiam/opengrm:1.3.4 \ 9 | "$@" 10 | -------------------------------------------------------------------------------- /bin/docker/ngramprint: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | test -t 1 && use_tty='-t' 3 | docker run --rm -i ${use_tty} \ 4 | -u $(id -u):$(id -g) \ 5 | -v "$HOME:$HOME" \ 6 | -w "$(pwd)" \ 7 | --entrypoint ngramprint \ 8 | synesthesiam/opengrm:1.3.4 \ 9 | "$@" 10 | -------------------------------------------------------------------------------- /bin/docker/ngramsymbols: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | test -t 1 && use_tty='-t' 3 | docker run --rm -i ${use_tty} \ 4 | -u $(id -u):$(id -g) \ 5 | -v "$HOME:$HOME" \ 6 | -w "$(pwd)" \ 7 | --entrypoint ngramsymbols \ 8 | synesthesiam/opengrm:1.3.4 \ 9 | "$@" 10 | -------------------------------------------------------------------------------- /bin/docker/phonetisaurus-g2p: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | test -t 1 && use_tty='-t' 3 | docker run --rm -i ${use_tty} \ 4 | -u $(id -u):$(id -g) \ 5 | -v "$HOME:$HOME" \ 6 | -w "$(pwd)" \ 7 | --entrypoint phonetisaurus-g2p \ 8 | synesthesiam/phonetisaurus:2013 \ 9 | "$@" 10 | -------------------------------------------------------------------------------- /bin/generate-slots.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import argparse 3 | import calendar 4 | import json 5 | import locale 6 | from pathlib import Path 7 | 8 | def main(): 9 | parser = argparse.ArgumentParser("generate-slots") 10 | parser.add_argument("profiles_dir") 11 | args = parser.parse_args() 12 | 13 | for profile_dir in Path(args.profiles_dir).glob("*"): 14 | if not profile_dir.is_dir(): 15 | continue 16 | 17 | with open(profile_dir / "profile.json", "r") as profile_file: 18 | profile = json.load(profile_file) 19 | locale_name = profile["locale"] + ".UTF-8" 20 | locale.setlocale(locale.LC_ALL, locale_name) 21 | print(locale_name) 22 | 23 | slots_dir = profile_dir / "slots" / "rhasspy" 24 | slots_dir.mkdir(parents=True, exist_ok=True) 25 | 26 | # Day names 27 | (slots_dir / "days").write_text('\n'.join(calendar.day_name)) 28 | 29 | # Month names 30 | (slots_dir / "months").write_text('\n'.join(filter(None, calendar.month_name))) 31 | 32 | 33 | # ----------------------------------------------------------------------------- 34 | 35 | if __name__ == "__main__": 36 | main() 37 | -------------------------------------------------------------------------------- /bin/get-ipa-examples.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | if [[ -z "$1" ]]; then 3 | echo "Usage: get-ipa-examples.sh phoneme_examples.txt" 4 | exit 1 5 | fi 6 | 7 | paste -d' ' \ 8 | <(cut -d' ' -f1-2 "$1") \ 9 | <(cut -d' ' -f2 "$1" | \ 10 | xargs -n1 rhasspy/lexconvert.py --phones unicode-ipa {}) 11 | -------------------------------------------------------------------------------- /bin/install-models.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | for lang in "$@"; do 3 | python3 -m spacy download $lang 4 | done 5 | -------------------------------------------------------------------------------- /bin/install-profiles.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | for lang in "$@"; do 3 | wget -qO - https://github.com/synesthesiam/rhasspy-profiles/releases/download/v1.0-$lang/$lang.tar.gz | tar xzf - 4 | done 5 | -------------------------------------------------------------------------------- /bin/lookup-words.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import sys 3 | import os 4 | import re 5 | import subprocess 6 | from collections import defaultdict 7 | 8 | # This script downloads frequently used words in the supported languages. 9 | 10 | 11 | def main(): 12 | words = set() 13 | for line in sys.stdin: 14 | line = line.strip().upper() 15 | words.add(line) 16 | 17 | # path to CMU dictionary 18 | dict_path = sys.argv[1] 19 | 20 | with open(dict_path, "r") as dict_file: 21 | for line in dict_file: 22 | line = line.strip() 23 | if not line: 24 | continue 25 | 26 | parts = re.split(r"[ ]+", line) 27 | word = parts[0].upper() 28 | if word in words: 29 | espeak_phones = ( 30 | subprocess.check_output(["espeak", "-x", "-q", word]) 31 | .decode() 32 | .strip() 33 | ) 34 | print(word, espeak_phones, " ".join(parts[1:])) 35 | words.remove(word) 36 | 37 | 38 | # ----------------------------------------------------------------------------- 39 | 40 | if __name__ == "__main__": 41 | main() 42 | -------------------------------------------------------------------------------- /bin/mock-commands/handle.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import sys 4 | import json 5 | import random 6 | import datetime 7 | 8 | 9 | def speech(text): 10 | global o 11 | o["speech"] = {"text": text} 12 | 13 | 14 | # get json from stdin and load into python dict 15 | o = json.loads(sys.stdin.read()) 16 | 17 | intent = o["intent"]["name"] 18 | 19 | if intent == "GetTime": 20 | now = datetime.datetime.now() 21 | speech("It's %s %d %s." % (now.strftime('%H'), now.minute, now.strftime('%p'))) 22 | 23 | elif intent == "Hello": 24 | replies = ['Hi!', 'Hello!', 'Hey there!', 'Greetings.'] 25 | speech(random.choice(replies)) 26 | 27 | # convert dict to json and print to stdout 28 | print(json.dumps(o)) 29 | -------------------------------------------------------------------------------- /bin/mock-commands/handle.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Available environment variables 4 | # ------------------------------- 5 | # Base directory of Rhasspy: ${RHASSPY_BASE_DIR} 6 | # Name of current profile: ${RHASSPY_PROFILE} 7 | # Profile directory: ${RHASSPY_PROFILE_DIR} 8 | 9 | # Output should be JSON 10 | cat 11 | -------------------------------------------------------------------------------- /bin/mock-commands/listen.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Available environment variables 4 | # ------------------------------- 5 | # Base directory of Rhasspy: ${RHASSPY_BASE_DIR} 6 | # Name of current profile: ${RHASSPY_PROFILE} 7 | # Profile directory: ${RHASSPY_PROFILE_DIR} 8 | wav_file="${RHASSPY_BASE_DIR}/etc/test/turn_on_living_room_lamp.wav" 9 | 10 | # Output should be WAV data 11 | cat "$wav_file" 12 | -------------------------------------------------------------------------------- /bin/mock-commands/sleep.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Available environment variables 4 | # ------------------------------- 5 | # Base directory of Rhasspy: ${RHASSPY_BASE_DIR} 6 | # Name of current profile: ${RHASSPY_PROFILE} 7 | # Profile directory: ${RHASSPY_PROFILE_DIR} 8 | 9 | # Pretend to wait for wake word, but just sleep for 5 seconds 10 | sleep 5 11 | 12 | # Output should be text 13 | echo 'okay rhasspy' 14 | -------------------------------------------------------------------------------- /bin/mock-commands/speech2text.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # WAV data is avaiable via STDIN 4 | wav_file=$(mktemp) 5 | trap "rm -f $wav_file" EXIT 6 | cat | sox -t wav - -r 16000 -e signed-integer -b 16 -c 1 -t wav - > "$wav_file" 7 | 8 | # Available environment variables 9 | # ------------------------------- 10 | # Base directory of Rhasspy: ${RHASSPY_BASE_DIR} 11 | # Name of current profile: ${RHASSPY_PROFILE} 12 | # Profile directory: ${RHASSPY_PROFILE_DIR} 13 | base_dir="${RHASSPY_BASE_DIR}" 14 | profile_name="${RHASSPY_PROFILE}" 15 | profile_dir="${RHASSPY_PROFILE_DIR}" 16 | 17 | # Assume acoustic model is in the base profile directory. 18 | # Use dictionary and language model from user profile directory. 19 | pocketsphinx_continuous \ 20 | -infile "$wav_file" \ 21 | -hmm "${base_dir}/profiles/${profile_name}/acoustic_model" \ 22 | -dict "${profile_dir}/dictionary.txt" \ 23 | -lm "${profile_dir}/language_model.txt" \ 24 | -logfn /dev/null \ 25 | "$@" # Arguments here are passed in from intent.command.arguments 26 | 27 | # Output should be text (stdout) 28 | -------------------------------------------------------------------------------- /bin/mock-commands/text2intent.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Input text is avaiable via STDIN 4 | read -r text 5 | 6 | intent_name="ChangeLightState" 7 | slot_name="living room lamp" 8 | slot_state="on" 9 | 10 | # Available environment variables 11 | # ------------------------------- 12 | # Base directory of Rhasspy: ${RHASSPY_BASE_DIR} 13 | # Name of current profile: ${RHASSPY_PROFILE} 14 | # Profile directory: ${RHASSPY_PROFILE_DIR} 15 | 16 | # Output should be JSON 17 | echo "{ 18 | \"intent\": { \"name\": \"$intent_name\", \"confidence\": 1.0 }, 19 | \"entities\": [ 20 | { \"entity\": \"name\", \"value\": \"$slot_name\" }, 21 | { \"entity\": \"state\", \"value\": \"$slot_state\" } 22 | ], 23 | \"text\": \"$text\" 24 | }" 25 | -------------------------------------------------------------------------------- /bin/mock-commands/text2speech.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # sentence is avaiable via STDIN 4 | read -r text 5 | 6 | # Available environment variables 7 | # ------------------------------- 8 | # Base directory of Rhasspy: ${RHASSPY_BASE_DIR} 9 | # Name of current profile: ${RHASSPY_PROFILE} 10 | # Profile directory: ${RHASSPY_PROFILE_DIR} 11 | 12 | # Output should be WAV data (stdout) 13 | espeak --stdout "$text" 14 | -------------------------------------------------------------------------------- /bin/pico2wave: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import os 3 | import sys 4 | import argparse 5 | import subprocess 6 | 7 | # Pretend to be pico2wave, but use eSpeak instead 8 | 9 | def main(): 10 | parser = argparse.ArgumentParser() 11 | parser.add_argument('message', type=str) 12 | parser.add_argument('-w', '--wave', type=str, required=True) 13 | parser.add_argument('-l', '--lang', type=str, default='en-US') 14 | args = parser.parse_args() 15 | 16 | cmd = ['espeak', 17 | '-v', args.lang, 18 | '-w', args.wave, 19 | args.message] 20 | 21 | subprocess.check_call(cmd) 22 | 23 | if __name__ == '__main__': 24 | main() 25 | -------------------------------------------------------------------------------- /bin/print-phonemes.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import sys 3 | import re 4 | 5 | 6 | def main(): 7 | if len(sys.argv) < 2: 8 | print("Usage: print-phonemes.py dictionary.txt") 9 | sys.exit(1) 10 | 11 | phonemes = set() 12 | with open(sys.argv[1], "r") as dict_file: 13 | for line in dict_file: 14 | line = line.strip() 15 | if not line: 16 | continue 17 | 18 | parts = re.split(r"[ ]+", line) 19 | phonemes.update(parts[1:]) 20 | 21 | for phoneme in sorted(phonemes): 22 | print(phoneme) 23 | 24 | 25 | if __name__ == "__main__": 26 | main() 27 | -------------------------------------------------------------------------------- /bin/rhasspy: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | 4 | # Directory of *this* script 5 | this_dir="$( cd "$( dirname "$0" )" && pwd )" 6 | 7 | venv="${this_dir}/../.venv" 8 | if [[ ! -d "${venv}" ]]; then 9 | echo "Missing virtual environment at ${venv}" 10 | echo "Did you run create-venv.sh?" 11 | exit 1 12 | fi 13 | 14 | source "${venv}/bin/activate" 15 | 16 | # Force .venv/lib to be used 17 | export LD_LIBRARY_PATH="${venv}/lib:${LD_LIBRARY_PATH}" 18 | 19 | # Use local Kaldi 20 | if [[ -d "${this_dir}/opt/kaldi" ]]; then 21 | export KALDI_PREFIX="${this_dir}/opt" 22 | fi 23 | 24 | # Path to sphinxtrain tools 25 | if [[ -d "/usr/lib/sphinxtrain" ]]; then 26 | export PATH="/usr/lib/sphinxtrain:${PATH}" 27 | fi 28 | 29 | cd "${this_dir}/.." && python3 -m rhasspy "$@" 30 | -------------------------------------------------------------------------------- /bin/rhasspy-cli: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | docker run -i \ 4 | -u "$(id -u):$(id -g)" \ 5 | -v "${HOME}":"${HOME}" \ 6 | -w "$(pwd)" \ 7 | --device /dev/snd:/dev/snd \ 8 | --entrypoint /usr/share/rhasspy/bin/rhasspy \ 9 | synesthesiam/rhasspy-server:latest \ 10 | "$@" 11 | -------------------------------------------------------------------------------- /bin/rhasspy-cli-ro: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | docker run -i \ 4 | -v "${HOME}":"${HOME}:ro" \ 5 | -w "$(pwd)" \ 6 | --device /dev/snd:/dev/snd \ 7 | --entrypoint /usr/share/rhasspy/bin/rhasspy \ 8 | synesthesiam/rhasspy-server:latest \ 9 | "$@" 10 | -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Rhasspy Assistant", 3 | "slug": "rhasspy", 4 | "version": "1.1", 5 | "description": "Offline voice assistant for Home Assistant", 6 | "startup": "application", 7 | "boot": "auto", 8 | "options": { 9 | "run_dir": "/data/rhasspy", 10 | "default_profile": "en" 11 | }, 12 | "audio": true, 13 | "ports": { 14 | "12101/tcp": 12101 15 | }, 16 | "schema": { 17 | "run_dir": "str", 18 | "default_profile": "str" 19 | }, 20 | "homeassistant_api": true, 21 | "webui": "http://[HOST]:[PORT:12101]/" 22 | } 23 | -------------------------------------------------------------------------------- /debian/DEBIAN/control: -------------------------------------------------------------------------------- 1 | Package: rhasspy-server 2 | Version: 2.4.10 3 | Section: utils 4 | Priority: optional 5 | Depends: sox,alsa-utils,espeak,libstdc++6,jq,xz-utils,unzip,curl,sphinxbase-utils,sphinxtrain,flite,libatlas-base-dev,gfortran 6 | Architecture: ${architecture} 7 | Maintainer: Michael Hansen 8 | Description: Offline voice assistant 9 | -------------------------------------------------------------------------------- /debian/bin/rhasspy-server: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [[ -z "${RHASSPY_BASE_DIR}" ]]; then 4 | export RHASSPY_BASE_DIR="/usr/lib/rhasspy" 5 | fi 6 | 7 | if [[ -z "${KALDI_PREFIX}" ]]; then 8 | export KALDI_PREFIX="${RHASSPY_BASE_DIR}" 9 | fi 10 | 11 | cd "${RHASSPY_BASE_DIR}" && rhasspy/rhasspy "$@" 12 | -------------------------------------------------------------------------------- /docker/rhasspy: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Directory of *this* script 4 | DIR="$( cd "$( dirname "$0" )" && pwd )" 5 | 6 | RHASSPY_APP=/usr/share/rhasspy 7 | RHASSPY_RUN=$RHASSPY_APP 8 | 9 | if [[ -f "$CONFIG_PATH" ]]; then 10 | RHASSPY_RUN="$(jq --raw-output '.run_dir' $CONFIG_PATH)" 11 | export RHASSPY_PROFILE="$(jq --raw-output '.default_profile' $CONFIG_PATH)" 12 | fi 13 | 14 | PYTHONPATH="$DIR" python3 -m rhasspy "$@" 15 | 16 | -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman 2 | -------------------------------------------------------------------------------- /docs/img/bear-gun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/bear-gun.png -------------------------------------------------------------------------------- /docs/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/favicon.ico -------------------------------------------------------------------------------- /docs/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/favicon.png -------------------------------------------------------------------------------- /docs/img/hardware.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/hardware.png -------------------------------------------------------------------------------- /docs/img/hass-io-audio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/hass-io-audio.png -------------------------------------------------------------------------------- /docs/img/hass-io-store.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/hass-io-store.png -------------------------------------------------------------------------------- /docs/img/intent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/intent.png -------------------------------------------------------------------------------- /docs/img/license.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/license.png -------------------------------------------------------------------------------- /docs/img/microphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/microphone.png -------------------------------------------------------------------------------- /docs/img/mike-head.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/mike-head.png -------------------------------------------------------------------------------- /docs/img/nodered-websocket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/nodered-websocket.png -------------------------------------------------------------------------------- /docs/img/rhasspy-discourse-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/rhasspy-discourse-logo.png -------------------------------------------------------------------------------- /docs/img/rhasspy-discourse-square-logo-nocircle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/rhasspy-discourse-square-logo-nocircle.png -------------------------------------------------------------------------------- /docs/img/rhasspy-discourse-square-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/rhasspy-discourse-square-logo.png -------------------------------------------------------------------------------- /docs/img/rhasspy-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/rhasspy-overview.png -------------------------------------------------------------------------------- /docs/img/rhasspy-overview.uml.txt: -------------------------------------------------------------------------------- 1 | @startuml 2 | skinparam roundcorner 10 3 | skinparam EntityBorderColor black 4 | 5 | skinparam sequence { 6 | ActorBorderColor black 7 | ActorBackgroundColor white 8 | ParticipantFontColor white 9 | ParticipantBorderColor black 10 | } 11 | 12 | actor User as U 13 | participant "Rhasspy" as R #MediumSeaGreen 14 | participant "Home Assistant" as HA #RoyalBlue 15 | 16 | autonumber 17 | 18 | == Wake Up == 19 | U -> R: "okay, Rhasspy" 20 | R -> U: *beep* 21 | 22 | == Voice Command == 23 | U -> R: "is the garage door open?" 24 | R -> U: *beep* 25 | 26 | == Recognition == 27 | R -> R: speech to text 28 | R -> R: intent recognition 29 | 30 | == Handling == 31 | R -> HA: rhasspy_GetGarageState 32 | HA -> HA: automation triggered 33 | HA -> HA: text to speech 34 | HA -> U: "the garage door is open" 35 | 36 | @enduml 37 | -------------------------------------------------------------------------------- /docs/img/rhasspy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/rhasspy.png -------------------------------------------------------------------------------- /docs/img/smiley-face.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/smiley-face.png -------------------------------------------------------------------------------- /docs/img/speaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/speaker.png -------------------------------------------------------------------------------- /docs/img/training.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/training.png -------------------------------------------------------------------------------- /docs/img/wakeup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/wakeup.png -------------------------------------------------------------------------------- /docs/img/web-advanced.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/web-advanced.png -------------------------------------------------------------------------------- /docs/img/web-log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/web-log.png -------------------------------------------------------------------------------- /docs/img/web-sentences.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/web-sentences.png -------------------------------------------------------------------------------- /docs/img/web-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/web-settings.png -------------------------------------------------------------------------------- /docs/img/web-slots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/web-slots.png -------------------------------------------------------------------------------- /docs/img/web-speech.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/web-speech.png -------------------------------------------------------------------------------- /docs/img/web-top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/web-top.png -------------------------------------------------------------------------------- /docs/img/web-words-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/web-words-2.png -------------------------------------------------------------------------------- /docs/img/web-words.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/docs/img/web-words.png -------------------------------------------------------------------------------- /docs/license.md: -------------------------------------------------------------------------------- 1 | # License 2 | 3 | Rhasspy itself is licensed under the MIT license, so feel free to do what you 4 | want with the code. 5 | 6 | Please see the individual licenses for the [supporting tools](about.md#supporting-tools) as well. 7 | 8 | ![Computer monitor riding an elephant in front of a rainbow](img/license.png) 9 | 10 | ## MIT License 11 | 12 | Copyright 2019 Michael Hansen 13 | 14 | Permission is hereby granted, free of charge, to any person obtaining a copy of 15 | this software and associated documentation files (the "Software"), to deal in 16 | the Software without restriction, including without limitation the rights to 17 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 18 | the Software, and to permit persons to whom the Software is furnished to do so, 19 | subject to the following conditions: 20 | 21 | The above copyright notice and this permission notice shall be included in all 22 | copies or substantial portions of the Software. 23 | 24 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 25 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 26 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 27 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 28 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 29 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 30 | -------------------------------------------------------------------------------- /docs/requirements.txt: -------------------------------------------------------------------------------- 1 | mkdocs >= 1.0.4 2 | -------------------------------------------------------------------------------- /etc/homeassistant/config/customize.yaml: -------------------------------------------------------------------------------- 1 | switch.living_room_lamp: 2 | friendly_name: "Living Room Lamp" 3 | icon: mdi:lamp 4 | 5 | light.bedroom_light: 6 | friendly_name: "Bedroom Light" 7 | icon: mdi:lightbulb 8 | 9 | switch.garage_light: 10 | friendly_name: "Garage Light" 11 | icon: mdi:lightbulb 12 | 13 | binary_sensor.garage_door: 14 | friendly_name: "Garage Door" 15 | device_class: garage_door 16 | icon: mdi:garage 17 | 18 | sensor.temperature: 19 | friendly_name: "Temperature" 20 | icon: mdi:thermometer 21 | -------------------------------------------------------------------------------- /etc/homeassistant/config/groups.yaml: -------------------------------------------------------------------------------- 1 | default_view: 2 | view: true 3 | entities: 4 | - group.inside 5 | - group.garage 6 | - group.outside 7 | 8 | garage: 9 | name: Garage 10 | entities: 11 | - switch.garage_light 12 | - binary_sensor.garage_door 13 | 14 | inside: 15 | name: Inside 16 | entities: 17 | - switch.living_room_lamp 18 | - light.bedroom_light 19 | 20 | outside: 21 | name: Outside 22 | entities: 23 | - sensor.temperature 24 | -------------------------------------------------------------------------------- /etc/homeassistant/config/scripts.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/etc/homeassistant/config/scripts.yaml -------------------------------------------------------------------------------- /etc/linux_atlas_aarch64.mk: -------------------------------------------------------------------------------- 1 | # ATLAS specific Linux ARM configuration 2 | 3 | ifndef DOUBLE_PRECISION 4 | $(error DOUBLE_PRECISION not defined.) 5 | endif 6 | ifndef OPENFSTINC 7 | $(error OPENFSTINC not defined.) 8 | endif 9 | ifndef OPENFSTLIBS 10 | $(error OPENFSTLIBS not defined.) 11 | endif 12 | ifndef ATLASINC 13 | $(error ATLASINC not defined.) 14 | endif 15 | ifndef ATLASLIBS 16 | $(error ATLASLIBS not defined.) 17 | endif 18 | 19 | CXXFLAGS = -std=c++11 -I.. -isystem $(OPENFSTINC) -O1 $(EXTRA_CXXFLAGS) \ 20 | -Wall -Wno-sign-compare -Wno-unused-local-typedefs \ 21 | -Wno-deprecated-declarations -Winit-self \ 22 | -DKALDI_DOUBLEPRECISION=$(DOUBLE_PRECISION) \ 23 | -DHAVE_EXECINFO_H=1 -DHAVE_CXXABI_H -DHAVE_ATLAS -I$(ATLASINC) \ 24 | -ftree-vectorize -pthread \ 25 | -g # -O0 -DKALDI_PARANOID 26 | 27 | ifeq ($(KALDI_FLAVOR), dynamic) 28 | CXXFLAGS += -fPIC 29 | endif 30 | 31 | # Compiler specific flags 32 | COMPILER = $(shell $(CXX) -v 2>&1) 33 | ifeq ($(findstring clang,$(COMPILER)),clang) 34 | # Suppress annoying clang warnings that are perfectly valid per spec. 35 | CXXFLAGS += -Wno-mismatched-tags 36 | endif 37 | 38 | LDFLAGS = $(EXTRA_LDFLAGS) $(OPENFSTLDFLAGS) -rdynamic 39 | LDLIBS = $(EXTRA_LDLIBS) $(OPENFSTLIBS) $(ATLASLIBS) -lm -lpthread -ldl 40 | -------------------------------------------------------------------------------- /etc/rhasspy.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Rhasspy 3 | After=syslog.target network.target 4 | 5 | [Service] 6 | Type=simple 7 | WorkingDirectory=/home//path/to/rhasspy 8 | ExecStart=/bin/bash -lc './run-venv.sh --profile ' 9 | 10 | RestartSec=1 11 | Restart=on-failure 12 | 13 | StandardOutput=syslog 14 | StandardError=syslog 15 | 16 | SyslogIdentifier=rhasspy 17 | 18 | [Install] 19 | WantedBy=multi-user.target 20 | -------------------------------------------------------------------------------- /etc/test/de/test.json: -------------------------------------------------------------------------------- 1 | { 2 | "text": "schalte die wohnzimmerlampe ein", 3 | "intent": { 4 | "name": "ChangeLightState" 5 | }, 6 | "entities": { 7 | "name": "wohnzimmerlampe", 8 | "state": "ein" 9 | }, 10 | "words": { 11 | "known": { 12 | "word": "gesundheit", 13 | "phonemes": "G AX S UU N T HH AY T" 14 | }, 15 | "unknown": { 16 | "word": "gesundheiten", 17 | "phonemes": "G AX Z UU N T HH AY T AX N" 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /etc/test/de/test.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/etc/test/de/test.wav -------------------------------------------------------------------------------- /etc/test/el/test.json: -------------------------------------------------------------------------------- 1 | { 2 | "text": "σβήσε το φως του γκαράζ", 3 | "intent": { 4 | "name": "ChangeLightState" 5 | }, 6 | "entities": { 7 | "name": "γκαράζ", 8 | "state": "σβήσε" 9 | }, 10 | "words": { 11 | "known": { 12 | "word": "κάποιος", 13 | "phonemes": "k a1 p i0 o0 s" 14 | }, 15 | "unknown": { 16 | "word": "κάποιοσκ", 17 | "phonemes": "k a1 p i0 o0 s k" 18 | } 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /etc/test/el/test.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/etc/test/el/test.wav -------------------------------------------------------------------------------- /etc/test/en/test.json: -------------------------------------------------------------------------------- 1 | { 2 | "text": "turn on the living room lamp", 3 | "intent": { 4 | "name": "ChangeLightState" 5 | }, 6 | "entities": { 7 | "name": "living room lamp", 8 | "state": "on" 9 | }, 10 | "words": { 11 | "known": { 12 | "word": "test", 13 | "phonemes": "T EH S T" 14 | }, 15 | "unknown": { 16 | "word": "raxacoricofallipatorius", 17 | "phonemes": "R AE K S AH K AO R IH K AO F AE L AH P AH T AO R IY IH S" 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /etc/test/en/test.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/etc/test/en/test.wav -------------------------------------------------------------------------------- /etc/test/es/test.json: -------------------------------------------------------------------------------- 1 | { 2 | "text": "enciende la lámpara de la sala", 3 | "intent": { 4 | "name": "ChangeLightState" 5 | }, 6 | "entities": { 7 | "name": "lámpara de la sala", 8 | "state": "enciende" 9 | }, 10 | "words": { 11 | "known": { 12 | "word": "familia", 13 | "phonemes": "f a m i l i a" 14 | }, 15 | "unknown": { 16 | "word": "familialama", 17 | "phonemes": "f a m i l i a l a m a" 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /etc/test/es/test.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/etc/test/es/test.wav -------------------------------------------------------------------------------- /etc/test/fr/test.json: -------------------------------------------------------------------------------- 1 | { 2 | "text": "allumer la lampe du salon", 3 | "intent": { 4 | "name": "ChangeLightState" 5 | }, 6 | "entities": { 7 | "name": "lampe du salon", 8 | "state": "allumer" 9 | }, 10 | "words": { 11 | "known": { 12 | "word": "beaucoup", 13 | "phonemes": "bb oo kk ou" 14 | }, 15 | "unknown": { 16 | "word": "beaucoupveau", 17 | "phonemes": "bb oo kk ou vv au" 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /etc/test/fr/test.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/etc/test/fr/test.wav -------------------------------------------------------------------------------- /etc/test/hi/test.json: -------------------------------------------------------------------------------- 1 | { 2 | "text": "living room laimp chaaloo karen" 3 | } 4 | -------------------------------------------------------------------------------- /etc/test/it/test.json: -------------------------------------------------------------------------------- 1 | { 2 | "text": "accendi la lampada del soggiorno", 3 | "intent": { 4 | "name": "ChangeLightState" 5 | }, 6 | "entities": { 7 | "name": "lampada del soggiorno", 8 | "state": "accendi" 9 | }, 10 | "words": { 11 | "known": { 12 | "word": "grazie", 13 | "phonemes": "g r a1 ts ts j e" 14 | }, 15 | "unknown": { 16 | "word": "grazieama", 17 | "phonemes": "g r a1 ts ts j e a1 m a" 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /etc/test/it/test.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/etc/test/it/test.wav -------------------------------------------------------------------------------- /etc/test/nl/test.json: -------------------------------------------------------------------------------- 1 | { 2 | "text": "zet de woonkamerlamp aan", 3 | "intent": { 4 | "name": "ChangeLightState" 5 | }, 6 | "entities": { 7 | "name": "woonkamerlamp", 8 | "state": "aan" 9 | }, 10 | "words": { 11 | "known": { 12 | "word": "maken", 13 | "phonemes": "m a k @ n" 14 | }, 15 | "unknown": { 16 | "word": "makenlamp", 17 | "phonemes": "m a k @ n l aa m p" 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /etc/test/nl/test.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/etc/test/nl/test.wav -------------------------------------------------------------------------------- /etc/test/pt/test.json: -------------------------------------------------------------------------------- 1 | { 2 | "text": "ligue a lâmpada da sala de estar", 3 | "intent": { 4 | "name": "ChangeLightState" 5 | }, 6 | "entities": { 7 | "name": "lâmpada da sala de estar", 8 | "state": "ligue" 9 | }, 10 | "words": { 11 | "known": { 12 | "word": "tempo", 13 | "phonemes": "t e~ p u" 14 | }, 15 | "unknown": { 16 | "word": "tempoada", 17 | "phonemes": "t e~ p o a d a" 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /etc/test/pt/test.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/etc/test/pt/test.wav -------------------------------------------------------------------------------- /etc/test/ru/test.json: -------------------------------------------------------------------------------- 1 | { 2 | "text": "включить лампу в гостиной", 3 | "intent": { 4 | "name": "ChangeLightState" 5 | }, 6 | "entities": { 7 | "name": "лампу в гостиной", 8 | "state": "включить" 9 | }, 10 | "words": { 11 | "known": { 12 | "word": "такой", 13 | "phonemes": "t a0 k o1 j" 14 | }, 15 | "unknown": { 16 | "word": "такойта", 17 | "phonemes": "t a0 k o1 j t a0" 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /etc/test/ru/test.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/etc/test/ru/test.wav -------------------------------------------------------------------------------- /etc/test/sv/test.json: -------------------------------------------------------------------------------- 1 | { 2 | "text": "är garage dörren öppen", 3 | "intent": { 4 | "name": "GetGarageState" 5 | }, 6 | "entities": { 7 | }, 8 | "words": { 9 | "known": { 10 | "word": "klockan", 11 | "phonemes": "k l ol s k abl n" 12 | }, 13 | "unknown": { 14 | "word": "klockanklacken", 15 | "phonemes": "k l ol s k abl n k l a k el n" 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /etc/test/sv/test.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/etc/test/sv/test.wav -------------------------------------------------------------------------------- /etc/test/turn_on_living_room_lamp.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/etc/test/turn_on_living_room_lamp.wav -------------------------------------------------------------------------------- /etc/test/vi/test.json: -------------------------------------------------------------------------------- 1 | { 2 | "text": "tắt đèn phòng khách", 3 | "intent": { 4 | "name": "ChangeLightState" 5 | }, 6 | "entities": { 7 | "name": "phòng khách", 8 | "state": "tắt" 9 | }, 10 | "words": { 11 | "known": { 12 | "word": "trước", 13 | "phonemes": "ch ua2_T3 k" 14 | }, 15 | "unknown": { 16 | "word": "trướct", 17 | "phonemes": "ch ua2_T3 k t" 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /etc/test/vi/test.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/etc/test/vi/test.wav -------------------------------------------------------------------------------- /etc/test/what_time_is_it.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/etc/test/what_time_is_it.wav -------------------------------------------------------------------------------- /etc/test/zh/test.json: -------------------------------------------------------------------------------- 1 | { 2 | "text": "打開客廳的燈" 3 | } 4 | -------------------------------------------------------------------------------- /etc/wav/beep_error.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/etc/wav/beep_error.wav -------------------------------------------------------------------------------- /etc/wav/beep_hi.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/etc/wav/beep_hi.wav -------------------------------------------------------------------------------- /etc/wav/beep_lo.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/etc/wav/beep_lo.wav -------------------------------------------------------------------------------- /examples/client-server/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | server: 4 | image: synesthesiam/rhasspy-server:latest 5 | volumes: 6 | - ./server/profiles:/profiles 7 | ports: 8 | - "13202:12101" 9 | command: --profile en --user-profiles /profiles 10 | client: 11 | image: synesthesiam/rhasspy-server:latest 12 | volumes: 13 | - ./client/profiles:/profiles 14 | devices: 15 | - /dev/snd:/dev/snd 16 | ports: 17 | - "12101:12101" 18 | command: --profile en --user-profiles /profiles 19 | hass: 20 | image: homeassistant/home-assistant 21 | volumes: 22 | - ./home-assistant/config:/config 23 | ports: 24 | - "8123:8123" 25 | -------------------------------------------------------------------------------- /examples/client-server/home-assistant/config/customize.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/client-server/home-assistant/config/customize.yaml -------------------------------------------------------------------------------- /examples/client-server/home-assistant/config/groups.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/client-server/home-assistant/config/groups.yaml -------------------------------------------------------------------------------- /examples/client-server/home-assistant/config/home-assistant.log: -------------------------------------------------------------------------------- 1 | 2019-02-07 03:03:05 WARNING (MainThread) [homeassistant.components.http] legacy_api_password support has been enabled. If you don't require it, remove the 'api_password' from your http config. 2 | 2019-02-07 03:05:08 WARNING (MainThread) [hbmqtt.mqtt.protocol.handler] BrokerProtocolHandler Unhandled exception in reader coro: IncompleteReadError('0 bytes read on a total of 1 expected bytes',) 3 | -------------------------------------------------------------------------------- /examples/client-server/home-assistant/config/scripts.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/client-server/home-assistant/config/scripts.yaml -------------------------------------------------------------------------------- /examples/client-server/home-assistant/config/ui-lovelace.yaml: -------------------------------------------------------------------------------- 1 | title: Home 2 | views: 3 | - title: default 4 | cards: 5 | - type: light 6 | name: Bedroom Light 7 | entity: light.bedroom_light 8 | - type: horizontal-stack 9 | cards: 10 | - type: entity-button 11 | name: Living Room 12 | entity: switch.living_room_lamp 13 | icon: 'mdi:lamp' 14 | hold_action: 15 | action: none 16 | tap_action: 17 | action: toggle 18 | - type: entity-button 19 | name: Garage Light 20 | entity: switch.garage_light 21 | icon: 'mdi:lightbulb' 22 | hold_action: 23 | action: none 24 | tap_action: 25 | action: toggle 26 | - type: horizontal-stack 27 | cards: 28 | - type: entity-button 29 | entity: binary_sensor.garage_door 30 | icon: 'mdi:garage' 31 | hold_action: 32 | action: none 33 | tap_action: 34 | action: none 35 | - type: gauge 36 | entity: sensor.temperature 37 | max: 100 38 | min: 0 39 | severity: 40 | green: 50 41 | red: 0 42 | yellow: 32 43 | theme: default 44 | -------------------------------------------------------------------------------- /examples/copy-audio/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | rhasspy: 4 | image: synesthesiam/rhasspy-server:latest 5 | volumes: 6 | - ./rhasspy/profiles:/profiles 7 | devices: 8 | - /dev/snd:/dev/snd 9 | ports: 10 | - "12101:12101" 11 | command: --profile en --user-profiles /profiles 12 | -------------------------------------------------------------------------------- /examples/copy-audio/rhasspy/profiles/en/copy-audio.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Directory of *this* script 4 | DIR="$( cd "$( dirname "$0" )" && pwd )" 5 | 6 | # Create output directory if it doesn't exist 7 | output_dir="$DIR/output" 8 | mkdir -p "$output_dir" 9 | 10 | # Write WAV data to file (overwrite) 11 | cat > "$output_dir/audio.wav" 12 | -------------------------------------------------------------------------------- /examples/copy-audio/rhasspy/profiles/en/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "language": "en", 3 | 4 | "rhasspy": { 5 | "listen_on_start": true 6 | }, 7 | 8 | "wake": { 9 | "pocketsphinx": { 10 | "keyphrase": "okay rhasspy" 11 | }, 12 | "system": "pocketsphinx" 13 | }, 14 | 15 | "speech_to_text": { 16 | "system": "command", 17 | "command": { 18 | "program": "$RHASSPY_PROFILE_DIR/copy-audio.sh" 19 | } 20 | }, 21 | 22 | "microphone": { 23 | "system": "pyaudio", 24 | "pyaudio": { 25 | "device": "" 26 | }, 27 | "arecord": { 28 | "device": "" 29 | } 30 | }, 31 | 32 | "sounds": { 33 | "system": "aplay" 34 | }, 35 | 36 | "intent": { 37 | "system": "dummy" 38 | }, 39 | 40 | "handle": { 41 | "system": "dummy" 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /examples/copy-audio/run-venv.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | export LC_ALL=C.UTF-8 4 | export LANG=C.UTF-8 5 | 6 | # Directory of *this* script 7 | DIR="$( cd "$( dirname "$0" )" && pwd )" 8 | 9 | cd "$DIR/../../" 10 | source .venv/bin/activate 11 | python3 app.py "$@" 12 | -------------------------------------------------------------------------------- /examples/mqtt-hermes/rhasspy/profiles/en/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "language": "en", 3 | "home_assistant": { 4 | "url": "http://hass:8123", 5 | "api_password": "secret", 6 | "access_token": "" 7 | }, 8 | "wake": { 9 | "system": "dummy" 10 | }, 11 | "microphone": { 12 | "system": "hermes" 13 | }, 14 | "command": { 15 | "system": "hermes" 16 | }, 17 | "rhasspy": { 18 | "listen_on_start": false 19 | }, 20 | "sounds": { 21 | "system": "aplay" 22 | }, 23 | "mqtt": { 24 | "enabled": true, 25 | "host": "localhost", 26 | "port": 1883, 27 | "password": "", 28 | "username": "", 29 | "site_id": "default", 30 | "publish_intents": true 31 | }, 32 | "speech_to_text": { 33 | "system": "pocketsphinx" 34 | }, 35 | "intent": { 36 | "system": "fuzzywuzzy" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /examples/mqtt-hermes/run-venv.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | export LC_ALL=C.UTF-8 4 | export LANG=C.UTF-8 5 | 6 | # Directory of *this* script 7 | DIR="$( cd "$( dirname "$0" )" && pwd )" 8 | 9 | cd "$DIR/../../" 10 | source .venv/bin/activate 11 | python3 -m app.py "$@" 12 | -------------------------------------------------------------------------------- /examples/mqtt-hermes/send-wav.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | mosquitto_pub -h localhost -t hermes/asr/startListening -m '{ "siteId": "default" }' 3 | sleep 0.5 4 | mosquitto_pub -h localhost -t hermes/audioServer/default/audioFrame -s < what_time_is_it.wav 5 | sleep 0.5 6 | mosquitto_pub -h localhost -t hermes/asr/stopListening -m '{ "siteId": "default" }' 7 | echo "Sent WAV" 8 | -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output001.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output001.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output002.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output002.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output003.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output003.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output004.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output004.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output005.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output005.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output006.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output006.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output007.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output007.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output008.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output008.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output009.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output009.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output010.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output010.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output011.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output011.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output012.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output012.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output013.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output013.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output014.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output014.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output015.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output015.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output016.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output016.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output017.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output017.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output018.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output018.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output019.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output019.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output020.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output020.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output021.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output021.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output022.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output022.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output023.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output023.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output024.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output024.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output025.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output025.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output026.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output026.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output027.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output027.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output028.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output028.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output029.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output029.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output030.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output030.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output031.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output031.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output032.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output032.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output033.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output033.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output034.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output034.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output035.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output035.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output036.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output036.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output037.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output037.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output038.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output038.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output039.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output039.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output040.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output040.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output041.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output041.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output042.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output042.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output043.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output043.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output044.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output044.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output045.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output045.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output046.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output046.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output047.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output047.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output048.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output048.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output049.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output049.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output050.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output050.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output051.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output051.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output052.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output052.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output053.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output053.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output054.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output054.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output055.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output055.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output056.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output056.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output057.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output057.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output058.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output058.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output059.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output059.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output060.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output060.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output061.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output061.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output062.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output062.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output063.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output063.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output064.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output064.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output065.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output065.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output066.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output066.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output067.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output067.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output068.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output068.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output069.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output069.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output070.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output070.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output071.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output071.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output072.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output072.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output073.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output073.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output074.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output074.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output075.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output075.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output076.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output076.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output077.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output077.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output078.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output078.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output079.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output079.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output080.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output080.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output081.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output081.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output082.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output082.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output083.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output083.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output084.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output084.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output085.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output085.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output086.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output086.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output087.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output087.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output088.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output088.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output089.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output089.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output090.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output090.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output091.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output091.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output092.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output092.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output093.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output093.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output094.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output094.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output095.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output095.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output096.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output096.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output097.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output097.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output098.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output098.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output099.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output099.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output100.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output100.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output101.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output101.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output102.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output102.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output103.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output103.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output104.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output104.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output105.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output105.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output106.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output106.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output107.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output107.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output108.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output108.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output109.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output109.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output110.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output110.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output111.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output111.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output112.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output112.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output113.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output113.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output114.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output114.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output115.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output115.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output116.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output116.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output117.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output117.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output118.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output118.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output119.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output119.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output120.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output120.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/output121.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/output121.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/send-wavs.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | mosquitto_pub -h localhost -t hermes/asr/startListening -m '{ "siteId": "default" }' 3 | sleep 0.5 4 | for f in output*.wav; do 5 | mosquitto_pub -h localhost -t hermes/audioServer/default/audioFrame -s < $f; 6 | done 7 | sleep 0.5 8 | mosquitto_pub -h localhost -t hermes/asr/stopListening -m '{ "siteId": "default" }' 9 | echo "Sent WAV" 10 | -------------------------------------------------------------------------------- /examples/mqtt-hermes/wav/what_time_is_it.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/wav/what_time_is_it.wav -------------------------------------------------------------------------------- /examples/mqtt-hermes/what_time_is_it.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/mqtt-hermes/what_time_is_it.wav -------------------------------------------------------------------------------- /examples/nodered/README.md: -------------------------------------------------------------------------------- 1 | # Node-RED Examples 2 | 3 | This directory contains two example Node-RED flows for Rhasspy. They assume Rhasspy is running on the localhost at port 12101. See the `run-nodered.sh` script for the Docker command to start Node-RED. 4 | 5 | Both example flows use the websocket connection available at `/api/events/intent` to receive intents as Rhasspy recognizes them. The `/api/text-to-speech` endpoint in Rhasspy is also used to provide basic feedback. 6 | -------------------------------------------------------------------------------- /examples/nodered/run-nodered.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | docker run -it --network host nodered/node-red-docker:latest 3 | -------------------------------------------------------------------------------- /examples/timer/README.md: -------------------------------------------------------------------------------- 1 | # Rhasspy Timer Example 2 | 3 | Example of using Rhasspy and NodeRED to set a timer for some number of hours, minutes, and seconds. 4 | 5 | ## Description 6 | 7 | The grammar in `sentences.ini` allows for sentences that set a timer for 0-9 hours with 0-59 seconds and minutes. 8 | Time expressions like "one and a half hours" are also supported. 9 | 10 | Rhasspy's support for inline word replacements is used extensively to make intent handling easier. 11 | Tokens like "one" and "two" are expressed as "one:1" and "two:2" in the grammar, meaning the spoken word "one" will be replaced with the token "1" during intent recognition. The only oddity with this approach is numbers made up of multiple words like "twenty two", which will show up as "20 2" in the recognized intent. The NodeRED flow handles this by simply summing the values in the hour/minute/second strings. 12 | 13 | ## Files 14 | 15 | * `sentences.ini` - grammar for spoken sentences 16 | * `flow.js` - NodeRED flow that interacts with Rhasspy 17 | -------------------------------------------------------------------------------- /examples/timer/flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/timer/flow.png -------------------------------------------------------------------------------- /examples/timer/sentences.ini: -------------------------------------------------------------------------------- 1 | [SetTimer] 2 | two_to_nine = (two:2 | three:3 | four:4 | five:5 | six:6 | seven:7 | eight:8 | nine:9) 3 | one_to_nine = (one:1 | ) 4 | teens = (ten:10 | eleven:11 | twelve:12 | thirteen:13 | fourteen:14 | fifteen:15 | sixteen:16 | seventeen:17 | eighteen:18 | nineteen:19) 5 | tens = (twenty:20 | thirty:30 | forty:40 | fifty:50) 6 | 7 | one_to_nine = (one:1 | ) 8 | one_to_fifty_nine = ( | | []) 9 | two_to_fifty_nine = ( | | []) 10 | 11 | hour_half_expr = ({hours} and (a half){minutes:30} hours) 12 | hour_expr = (((one:1){hours} hour) | ((){hours} hours) | ) 13 | 14 | minute_half_expr = ({minutes} and (a half){seconds:30} minutes) 15 | minute_expr = (((one:1){minutes} minute) | ((){minutes} minutes) | ) 16 | 17 | second_expr = ((one:1){seconds} second) | ((){seconds} seconds) 18 | 19 | time_expr = (( [[and] ] [[and] ]) | ( [[and] ]) | ) 20 | 21 | set [a] timer for 22 | -------------------------------------------------------------------------------- /examples/typical-intent/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | rhasspy: 4 | image: synesthesiam/rhasspy-server:latest 5 | volumes: 6 | - ./rhasspy/profiles:/profiles 7 | devices: 8 | - /dev/snd:/dev/snd 9 | ports: 10 | - "12101:12101" 11 | command: --profile en --user-profiles /profiles 12 | hass: 13 | image: homeassistant/home-assistant 14 | volumes: 15 | - ./home-assistant/config:/config 16 | ports: 17 | - "8123:8123" 18 | mosquitto: 19 | image: eclipse-mosquitto 20 | ports: 21 | - "1883:1883" 22 | -------------------------------------------------------------------------------- /examples/typical-intent/home-assistant/config/customize.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/typical-intent/home-assistant/config/customize.yaml -------------------------------------------------------------------------------- /examples/typical-intent/home-assistant/config/groups.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/typical-intent/home-assistant/config/groups.yaml -------------------------------------------------------------------------------- /examples/typical-intent/home-assistant/config/scripts.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/typical-intent/home-assistant/config/scripts.yaml -------------------------------------------------------------------------------- /examples/typical-intent/home-assistant/config/ui-lovelace.yaml: -------------------------------------------------------------------------------- 1 | title: Home 2 | views: 3 | - title: default 4 | cards: 5 | - type: light 6 | name: Bedroom Light 7 | entity: light.bedroom_light 8 | - type: horizontal-stack 9 | cards: 10 | - type: entity-button 11 | name: Living Room 12 | entity: switch.living_room_lamp 13 | icon: 'mdi:lamp' 14 | hold_action: 15 | action: none 16 | tap_action: 17 | action: toggle 18 | - type: entity-button 19 | name: Garage Light 20 | entity: switch.garage_light 21 | icon: 'mdi:lightbulb' 22 | hold_action: 23 | action: none 24 | tap_action: 25 | action: toggle 26 | - type: horizontal-stack 27 | cards: 28 | - type: entity-button 29 | entity: binary_sensor.garage_door 30 | icon: 'mdi:garage' 31 | hold_action: 32 | action: none 33 | tap_action: 34 | action: none 35 | - type: gauge 36 | entity: sensor.temperature 37 | max: 100 38 | min: 0 39 | severity: 40 | green: 50 41 | red: 0 42 | yellow: 32 43 | theme: default 44 | -------------------------------------------------------------------------------- /examples/typical/README.md: -------------------------------------------------------------------------------- 1 | # Typical 2 | 3 | This is an example configuration of Rhasspy that communicates with Home Assistant via events. 4 | -------------------------------------------------------------------------------- /examples/typical/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | rhasspy: 4 | image: synesthesiam/rhasspy-server:latest 5 | network_mode: "host" 6 | volumes: 7 | - ./config/rhasspy/profiles:/profiles 8 | devices: 9 | - /dev/snd:/dev/snd 10 | ports: 11 | - "12101:12101" 12 | command: --profile en --user-profiles /profiles 13 | hass: 14 | image: homeassistant/home-assistant 15 | network_mode: "host" 16 | volumes: 17 | - ./home-assistant/config:/config 18 | ports: 19 | - "8123:8123" 20 | -------------------------------------------------------------------------------- /examples/typical/home-assistant/config/customize.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/typical/home-assistant/config/customize.yaml -------------------------------------------------------------------------------- /examples/typical/home-assistant/config/groups.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/typical/home-assistant/config/groups.yaml -------------------------------------------------------------------------------- /examples/typical/home-assistant/config/scripts.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/typical/home-assistant/config/scripts.yaml -------------------------------------------------------------------------------- /examples/typical/home-assistant/config/ui-lovelace.yaml: -------------------------------------------------------------------------------- 1 | title: Home 2 | views: 3 | - title: default 4 | cards: 5 | - type: light 6 | name: Bedroom Light 7 | entity: light.bedroom_light 8 | - type: horizontal-stack 9 | cards: 10 | - type: entity-button 11 | name: Living Room 12 | entity: switch.living_room_lamp 13 | icon: 'mdi:lamp' 14 | hold_action: 15 | action: none 16 | tap_action: 17 | action: toggle 18 | - type: entity-button 19 | name: Garage Light 20 | entity: switch.garage_light 21 | icon: 'mdi:lightbulb' 22 | hold_action: 23 | action: none 24 | tap_action: 25 | action: toggle 26 | - type: horizontal-stack 27 | cards: 28 | - type: entity-button 29 | entity: binary_sensor.garage_door 30 | icon: 'mdi:garage' 31 | hold_action: 32 | action: none 33 | tap_action: 34 | action: none 35 | - type: gauge 36 | entity: sensor.temperature 37 | max: 100 38 | min: 0 39 | severity: 40 | green: 50 41 | red: 0 42 | yellow: 32 43 | theme: default 44 | -------------------------------------------------------------------------------- /examples/typical/rhasspy/profiles/en/okay_rhasspy.pmdl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/examples/typical/rhasspy/profiles/en/okay_rhasspy.pmdl -------------------------------------------------------------------------------- /examples/typical/run-hass.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Directory of *this* script 4 | DIR="$( cd "$( dirname "$0" )" && pwd )" 5 | 6 | docker run -it \ 7 | -v "$DIR/home-assistant/config":"/config" \ 8 | --network=host \ 9 | homeassistant/home-assistant \ 10 | "$@" 11 | -------------------------------------------------------------------------------- /examples/typical/run-venv.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | export LC_ALL=C.UTF-8 4 | export LANG=C.UTF-8 5 | 6 | # Directory of *this* script 7 | DIR="$( cd "$( dirname "$0" )" && pwd )" 8 | 9 | cd "$DIR/../../" 10 | source .venv/bin/activate 11 | python3 app.py "$@" 12 | -------------------------------------------------------------------------------- /make-g2p.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | 4 | if [[ -z "$(command -v phonetisaurus-train)" ]]; then 5 | echo "Phonetisaurus not installed!" 6 | exit 1 7 | fi 8 | 9 | if [[ -z "$2" ]]; then 10 | echo "Usage: make-g2p.sh DICTIONARY MODEL" 11 | exit 1 12 | fi 13 | 14 | dict_path="$(realpath "$1")" 15 | model_path="$(realpath "$2")" 16 | 17 | temp_dir="$(mktemp -d)" 18 | function finish { 19 | rm -rf "${temp_dir}" 20 | } 21 | 22 | trap finish EXIT 23 | 24 | cd "${temp_dir}" 25 | perl -pe 's/\([0-9]+\)//; 26 | s/[ ]+/ /g; s/^[ ]+//; 27 | s/[ ]+$//; @_ = split (/[ ]+/); 28 | $w = shift (@_); 29 | $_ = $w."\t".join (" ", @_)."\n";' < "${dict_path}" | sed -e '/[_|\xA0]/d' > formatted.dict 30 | 31 | phonetisaurus-train --lexicon formatted.dict --seq2_del --verbose 32 | cp train/model.fst "${model_path}" 33 | -------------------------------------------------------------------------------- /mkdocs.yml: -------------------------------------------------------------------------------- 1 | site_name: Rhasspy 2 | theme: readthedocs 3 | nav: 4 | - Home: index.md 5 | - Hardware: hardware.md 6 | - Installation: installation.md 7 | - Tutorials: tutorials.md 8 | - Usage: usage.md 9 | - Profiles: profiles.md 10 | - Training: training.md 11 | - Audio Input: audio-input.md 12 | - Audio Output: audio-output.md 13 | - Wake Word: wake-word.md 14 | - Command Listener: command-listener.md 15 | - Speech to Text: speech-to-text.md 16 | - Intent Recognition: intent-recognition.md 17 | - Intent Handling: intent-handling.md 18 | - Text to Speech: text-to-speech.md 19 | - Reference: reference.md 20 | - Development: development.md 21 | - License: license.md 22 | - About: about.md 23 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pronounce-service", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build", 8 | "lint": "vue-cli-service lint" 9 | }, 10 | "dependencies": { 11 | "axios": "^0.18.0", 12 | "vue": "^2.5.17", 13 | "vue-axios": "^2.1.3", 14 | "vue-json-tree-view": "^2.1.4", 15 | "vue-lodash": "^2.0.0", 16 | "vue-native-websocket": "^2.0.13" 17 | }, 18 | "devDependencies": { 19 | "@vue/cli-plugin-babel": "^3.0.3", 20 | "@vue/cli-plugin-eslint": "^3.0.3", 21 | "@vue/cli-service": "^3.0.3", 22 | "vue-template-compiler": "^2.5.17" 23 | }, 24 | "eslintConfig": { 25 | "root": true, 26 | "env": { 27 | "node": true 28 | }, 29 | "extends": [ 30 | "plugin:vue/essential", 31 | "eslint:recommended" 32 | ], 33 | "rules": {}, 34 | "parserOptions": { 35 | "parser": "babel-eslint" 36 | } 37 | }, 38 | "postcss": { 39 | "plugins": { 40 | "autoprefixer": {} 41 | } 42 | }, 43 | "browserslist": [ 44 | "> 1%", 45 | "last 2 versions", 46 | "not ie <= 8" 47 | ] 48 | } 49 | -------------------------------------------------------------------------------- /profiles/ca/custom_words.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/profiles/ca/custom_words.txt -------------------------------------------------------------------------------- /profiles/ca/espeak_phonemes.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/profiles/ca/espeak_phonemes.txt -------------------------------------------------------------------------------- /profiles/ca/phoneme_examples.txt: -------------------------------------------------------------------------------- 1 | A abby A B BV I 2 | AE adéu AE DH E W 3 | AO això AE Y SH AO 4 | B baix B A Y SH 5 | BV alba A L BV AE 6 | C guia C I AE 7 | CH boig B O CH 8 | D andy A N D I 9 | DH cada K A DH AE 10 | E cent S E N 11 | EA acte A K T EA 12 | EE aneu AE N EE W 13 | F cafè K AE F EE 14 | G èxit EE G Z I T 15 | GH agut AE GH U T 16 | I ahir AE I 17 | J boja B O J AE 18 | K amic AE M I K 19 | L ales A L EA S 20 | LY allí AE LY I 21 | M amor AE M O R 22 | N anam A N AE M 23 | NG banc B A NG K 24 | NY anys A NY S 25 | O avió AE BV Y O 26 | P capa K A P AE 27 | R aire A Y R EA 28 | RR arma A RR M AE 29 | S avís AE BV I S 30 | SH així AE Y SH I 31 | T alta A L T AE 32 | U algú AE L GH U 33 | UO alto A L T UO 34 | V vagi V A GH I 35 | W aqui A K W I 36 | Y avui AE BV U Y 37 | Z base B A Z EA 38 | -------------------------------------------------------------------------------- /profiles/ca/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "language": "ca", 3 | "name": "ca", 4 | "locale": "ca_ES", 5 | "speech_to_text": { 6 | "system": "pocketsphinx", 7 | "dictionary_casing": "lower" 8 | }, 9 | "download": { 10 | "conditions": { 11 | "speech_to_text.system": { 12 | "pocketsphinx": { 13 | "acoustic_model": "ca-es-models-v0.4.0.zip:ca-es/acoustic-model", 14 | "base_dictionary.txt": "ca-es-models-v0.4.0.zip:ca-es/pronounciation-dictionary.dict", 15 | "g2p.fst": "ca-g2p.tar.gz:g2p.fst" 16 | } 17 | } 18 | }, 19 | 20 | "files": { 21 | "ca-es-models-v0.4.0.zip": { 22 | "url": "https://github.com/synesthesiam/rhasspy-profiles/releases/download/v1.0-ca/ca-es-models-v0.4.0.zip" 23 | }, 24 | "ca-g2p.tar.gz": { 25 | "url": "https://github.com/synesthesiam/rhasspy-profiles/releases/download/v1.0-ca/ca-g2p.tar.gz" 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /profiles/ca/sentences.ini: -------------------------------------------------------------------------------- 1 | [GetTime] 2 | quina hora es 3 | 4 | [GetTemperature] 5 | quina és la temperatura 6 | 7 | [GetGarageState] 8 | la porta del garatge està oberta 9 | està la porta del garatge tancada 10 | 11 | [ChangeLightState] 12 | light_name = (làmpada de la sala | llum del garatge) {name} 13 | light_state = (encén:on | apagueu:on | engegueu:off) {state} 14 | 15 | [la] -------------------------------------------------------------------------------- /profiles/ca/slot_programs/rhasspy/number: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import argparse 3 | import sys 4 | 5 | 6 | def main(): 7 | parser = argparse.ArgumentParser("number") 8 | parser.add_argument("lower", type=int, help="Lower bound") 9 | parser.add_argument("upper", type=int, help="Upper bound (inclusive)") 10 | args, rest_args = parser.parse_known_args() 11 | 12 | lower = args.lower 13 | upper = args.upper 14 | step = 1 15 | 16 | if rest_args: 17 | step = int(rest_args[0]) 18 | 19 | if upper < lower: 20 | lower, upper = upper, lower 21 | 22 | for n in range(lower, upper + 1, step): 23 | print(n) 24 | 25 | 26 | # ----------------------------------------------------------------------------- 27 | 28 | if __name__ == "__main__": 29 | main() 30 | -------------------------------------------------------------------------------- /profiles/ca/slots/rhasspy/days: -------------------------------------------------------------------------------- 1 | dilluns 2 | dimarts 3 | dimecres 4 | dijous 5 | divendres 6 | dissabte 7 | diumenge 8 | -------------------------------------------------------------------------------- /profiles/ca/slots/rhasspy/months: -------------------------------------------------------------------------------- 1 | de gener 2 | de febrer 3 | de març 4 | d’abril 5 | de maig 6 | de juny 7 | de juliol 8 | d’agost 9 | de setembre 10 | d’octubre 11 | de novembre 12 | de desembre 13 | -------------------------------------------------------------------------------- /profiles/de/custom_words.txt: -------------------------------------------------------------------------------- 1 | garagenlicht G AH RR AAH ZH AX N L IH CC T 2 | wohnzimmerlampe V OOH N TS IH M EX L AH M P AX 3 | -------------------------------------------------------------------------------- /profiles/de/dictionary.txt: -------------------------------------------------------------------------------- 1 | aus Q AW S 2 | das D AH S 3 | die D IIH 4 | ein Q AY N 5 | es Q EH S 6 | garagenlicht g aa: r a g ee n l ii cc t 7 | garagentor G AH RR AAH ZH AX N T OOH EX 8 | garagentor(2) g aa: r a g ee n t o: r 9 | geschlossen G AX SH L OO S AX N 10 | heiß HH AY S 11 | ist Q IH S T 12 | kalt K AH L T 13 | kalt(2) k a l t 14 | mir M IIH EX 15 | offen Q OO F AX N 16 | okay Q OO K EE IH 17 | okay(2) qq o: k e: 18 | raspelig qq r a s p e: l ii cc 19 | sag Z AAH K 20 | schalten SH AH L T AX N 21 | sie Z IIH 22 | spät SH P EHH T 23 | spät(2) ss p qq ee t e: 24 | temperatur T EH M P AX RR AH T UUH EX 25 | temperatur(2) t ee m p e: r a t u: r 26 | uhrzeit Q UUH RR TS AY T 27 | uhrzeit(2) qq u: r t s ai t 28 | wie V IIH 29 | wohnzimmerlampe v o: n t s ii m ei l a m p e: 30 | -------------------------------------------------------------------------------- /profiles/de/espeak_phonemes.txt: -------------------------------------------------------------------------------- 1 | # CMU eSpeak 2 | AA A 3 | AAH A: 4 | AE A 5 | AH a 6 | AO o 7 | AW U 8 | AX @ 9 | AY aI 10 | B b 11 | CC C 12 | CH tS 13 | D d 14 | DH D 15 | EE I2 16 | EEH eI 17 | EH 2 18 | EHH h 19 | ER Z3 20 | EX L3 21 | F f 22 | G dZ 23 | HH ha 24 | IH I 25 | IIH i: 26 | IY i 27 | JH 2d 28 | K k 29 | L l 30 | M m 31 | N n 32 | NG N 33 | OE f@ 34 | OH 3: 35 | OHH 3 36 | OI jU 37 | OO 0 38 | OOH oU 39 | OY U 40 | P p 41 | PF pf 42 | Q a 43 | R @d 44 | RR r 45 | S s 46 | SH st 47 | T t 48 | TH T 49 | TS z 50 | UH u 51 | UU Vn 52 | UUH j 53 | V w 54 | VV V 55 | W wa 56 | X x 57 | Y Z 58 | YY u: 59 | YYH bI 60 | Z sI 61 | -------------------------------------------------------------------------------- /profiles/de/kaldi/custom_words.txt: -------------------------------------------------------------------------------- 1 | garagenlicht g a R 'a: Z @ ? 'a l 'I C t 2 | wohnzimmerlampe v 'o: n ts I m 6 l 'a m p @ 3 | -------------------------------------------------------------------------------- /profiles/de/kaldi/espeak_phonemes.txt: -------------------------------------------------------------------------------- 1 | '2 3: 2 | '2: 3: 3 | '3 3: 4 | '3: ? 5 | '6 3: 6 | '9 3: 7 | '@ k 8 | 'A 0 9 | 'A: ? 10 | 'E E 11 | 'E: E 12 | 'I I 13 | 'O 0 14 | 'O: ? 15 | 'OI E 16 | 'OY j 17 | 'U V 18 | 'V V 19 | 'Y u: 20 | 'a a 21 | 'a: a 22 | 'aI eI 23 | 'aU O: 24 | 'e d 25 | 'e: E 26 | 'i i: 27 | 'i: i: 28 | 'o aa 29 | 'o: oU 30 | 'u l 31 | 'u: V 32 | 'y ? 33 | 'y: u: 34 | '{ a 35 | 2 ? 36 | 2: r 37 | 3 3 38 | 3: ? 39 | 6 3 40 | 9 ? 41 | : ? 42 | ? 3: 43 | A ? 44 | A: ? 45 | C tS 46 | D D 47 | E 3: 48 | E: h 49 | H ? 50 | I I 51 | N N 52 | O 0 53 | O: ? 54 | OI ? 55 | OY U@ 56 | R r 57 | S S 58 | SIL ? 59 | T T 60 | U V 61 | V ? 62 | Y u: 63 | Z ? 64 | a a 65 | a: @ 66 | aI aI 67 | aU f 68 | b b 69 | d d 70 | dZ dZ 71 | e E 72 | e: h 73 | f f 74 | g dZ 75 | h h 76 | i i 77 | i: i 78 | j dZ 79 | k k 80 | l l 81 | m m 82 | n n 83 | nC ? 84 | o 0 85 | o: oU 86 | p p 87 | pf f 88 | r r 89 | s s 90 | t t 91 | tS tS 92 | ts z 93 | u l 94 | u: j 95 | v w 96 | w w 97 | x tS 98 | y ? 99 | y: b 100 | z s 101 | { ? 102 | -------------------------------------------------------------------------------- /profiles/de/phoneme_examples.txt: -------------------------------------------------------------------------------- 1 | AA high HH AA IH 2 | AAH anna Q AH N AAH 3 | AE alan AE L AX N 4 | AH aber Q AH B EX 5 | AO kino K IIH N AO 6 | AW auch Q AW X 7 | AX alle Q AH L AX 8 | AY beim B AY M 9 | B baby B EEH B IY 10 | CC dich D IH CC 11 | CH jack CH AE K 12 | D dach D AH X 13 | EE dave D EE IH F 14 | EEH dreh D RR EEH 15 | EH alex Q AH L EH K S 16 | EHH fair F EHH EX 17 | ER roger R AA JH ER 18 | EX arme Q AH EX M AX 19 | F aufs Q AW F S 20 | G auge Q AW G AX 21 | HH haar HH AAH EX 22 | IH bild B IH L T 23 | IIH bier B IIH EX 24 | IY joey JH AX UU IY 25 | JH jake JH EH IH K 26 | K bank B AH NG K 27 | L also Q AH L Z OOH 28 | M baum B AW M 29 | N bahn B AAH N 30 | NG dank D AH NG K 31 | OE hölle HH OE L AX 32 | OH möchtest M OH CC T AX S T 33 | OHH blöd B L OHH T 34 | OI fräulein F RR OI L AY N 35 | OO bord B OO EX T 36 | OOH auto Q AW T OOH 37 | OY euch Q OY CC 38 | P club K L UU P 39 | PF kopf K OO PF 40 | Q acht Q AH X T 41 | R mary M EH R IIH 42 | RR brot B RR OOH T 43 | S bist B IH S T 44 | SH chef SH EH F 45 | T alte Q AH L T AX 46 | TH smith S M IH TH 47 | TS arzt Q AH EX TS T 48 | UH yahoo Y AA HH UH 49 | UU burg B UU EX K 50 | UUH blut B L UUH T 51 | V etwa Q EH T V AH 52 | VV love L VV V 53 | W william W IH L Y AX M 54 | X buch B UUH X 55 | Y jahr Y AAH EX 56 | YY fünf F YY N F 57 | YYH büro B YYH RR OOH 58 | Z böse B OHH Z AX 59 | -------------------------------------------------------------------------------- /profiles/de/sentences.ini: -------------------------------------------------------------------------------- 1 | [GetTime] 2 | wie spät ist es 3 | sag mir die uhrzeit 4 | 5 | [GetTemperature] 6 | wie ist die temperatur 7 | wie (heiß | kalt) ist es 8 | 9 | [GetGarageState] 10 | ist das garagentor (offen | geschlossen) 11 | 12 | [ChangeLightState] 13 | light_name = (wohnzimmerlampe | garagenlicht) {name} 14 | light_state = (ein | aus) {state} 15 | schalte (die | das) -------------------------------------------------------------------------------- /profiles/de/slot_programs/rhasspy/number: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import argparse 3 | import sys 4 | 5 | 6 | def main(): 7 | parser = argparse.ArgumentParser("number") 8 | parser.add_argument("lower", type=int, help="Lower bound") 9 | parser.add_argument("upper", type=int, help="Upper bound (inclusive)") 10 | args, rest_args = parser.parse_known_args() 11 | 12 | lower = args.lower 13 | upper = args.upper 14 | step = 1 15 | 16 | if rest_args: 17 | step = int(rest_args[0]) 18 | 19 | if upper < lower: 20 | lower, upper = upper, lower 21 | 22 | for n in range(lower, upper + 1, step): 23 | print(n) 24 | 25 | 26 | # ----------------------------------------------------------------------------- 27 | 28 | if __name__ == "__main__": 29 | main() 30 | -------------------------------------------------------------------------------- /profiles/de/slots/rhasspy/days: -------------------------------------------------------------------------------- 1 | Montag 2 | Dienstag 3 | Mittwoch 4 | Donnerstag 5 | Freitag 6 | Samstag 7 | Sonntag 8 | -------------------------------------------------------------------------------- /profiles/de/slots/rhasspy/months: -------------------------------------------------------------------------------- 1 | Januar 2 | Februar 3 | März 4 | April 5 | Mai 6 | Juni 7 | Juli 8 | August 9 | September 10 | Oktober 11 | November 12 | Dezember 13 | -------------------------------------------------------------------------------- /profiles/el/custom_words.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/profiles/el/custom_words.txt -------------------------------------------------------------------------------- /profiles/el/espeak_phonemes.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/profiles/el/espeak_phonemes.txt -------------------------------------------------------------------------------- /profiles/el/phoneme_examples.txt: -------------------------------------------------------------------------------- 1 | a0 απλα a1 p l a0 2 | a1 ακου a1 k u0 3 | b μπεσ b e1 s 4 | d τζιμ d z i1 m 5 | dh δεισ dh i1 s 6 | e0 ειπε i1 p e0 7 | e1 βγεσ v j e1 s 8 | f αφού a0 f u1 9 | g γκέι g e1 i0 10 | gh αργά a0 r gh a1 11 | h ειχα i1 h a0 12 | hs ειχε i1 hs e0 13 | i0 αλλη a1 l i0 14 | i1 ειπα i1 p a0 15 | j γειά j a1 16 | k κανω k a1 n o0 17 | kj εκει e1 kj i0 18 | l λεει l e1 i0 19 | m μαζι m a1 z i0 20 | n ενασ e1 n a0 s 21 | ng μάγκα m a1 ng g a0 22 | o0 ισωσ i1 s o0 s 23 | o1 γιοσ j o1 s 24 | p οπωσ o1 p o0 s 25 | r βρεσ v r e1 s 26 | s ένασ e1 n a0 s 27 | t κατω k a1 t o0 28 | th ηρθα i1 r th a0 29 | ts ματσ m a1 ts 30 | u0 άκου a1 k u0 31 | u1 τουσ t u1 s 32 | v βάζω v a1 z o0 33 | z ζεισ z i1 s 34 | -------------------------------------------------------------------------------- /profiles/el/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "language": "el", 3 | "name": "el", 4 | "locale": "el_GR", 5 | "speech_to_text": { 6 | "g2p_casing": "lower", 7 | "system": "pocketsphinx", 8 | "dictionary_casing": "lower" 9 | }, 10 | "intent": { 11 | "flair": { 12 | "compatible": false 13 | } 14 | }, 15 | "download": { 16 | "conditions": { 17 | "speech_to_text.system": { 18 | "pocketsphinx": { 19 | "acoustic_model": "cmusphinx-el-5.2.tar.gz:cmusphinx-el-gr-5.2/el-gr.cd_cont_5000", 20 | "base_dictionary.txt": "cmusphinx-el-5.2.tar.gz:cmusphinx-el-gr-5.2/el-gr.dic", 21 | "g2p.fst": "el-g2p.tar.gz:g2p.fst" 22 | } 23 | }, 24 | 25 | "speech_to_text.pocketsphinx.mix_weight": { 26 | ">0": { 27 | "base_language_model.txt": "cmusphinx-el-5.2.tar.gz:cmusphinx-el-gr-5.2/el-gr.lm.gz:" 28 | } 29 | } 30 | }, 31 | 32 | "files": { 33 | "cmusphinx-el-5.2.tar.gz": { 34 | "url": "https://github.com/synesthesiam/rhasspy-profiles/releases/download/v1.0-el/cmusphinx-el-5.2.tar.gz" 35 | }, 36 | "el-g2p.tar.gz": { 37 | "url": "https://github.com/synesthesiam/rhasspy-profiles/releases/download/v1.0-el/el-g2p.tar.gz" 38 | } 39 | } 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /profiles/el/sentences.ini: -------------------------------------------------------------------------------- 1 | [GetTemperature] 2 | τι θερμοκρασία έχει 3 | πόσο (ζεστό | κρύο) είναι 4 | 5 | [GetGarageState] 6 | είναι (ανοιχτή | κλειστή) η πόρτα του γκαράζ 7 | 8 | [ChangeLightState] 9 | (σβήσε | άναψε){state} το φως του (γκαράζ){name} 10 | -------------------------------------------------------------------------------- /profiles/el/slot_programs/rhasspy/number: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import argparse 3 | import sys 4 | 5 | 6 | def main(): 7 | parser = argparse.ArgumentParser("number") 8 | parser.add_argument("lower", type=int, help="Lower bound") 9 | parser.add_argument("upper", type=int, help="Upper bound (inclusive)") 10 | args, rest_args = parser.parse_known_args() 11 | 12 | lower = args.lower 13 | upper = args.upper 14 | step = 1 15 | 16 | if rest_args: 17 | step = int(rest_args[0]) 18 | 19 | if upper < lower: 20 | lower, upper = upper, lower 21 | 22 | for n in range(lower, upper + 1, step): 23 | print(n) 24 | 25 | 26 | # ----------------------------------------------------------------------------- 27 | 28 | if __name__ == "__main__": 29 | main() 30 | -------------------------------------------------------------------------------- /profiles/el/slots/rhasspy/days: -------------------------------------------------------------------------------- 1 | Δευτέρα 2 | Τρίτη 3 | Τετάρτη 4 | Πέμπτη 5 | Παρασκευή 6 | Σάββατο 7 | Κυριακή 8 | -------------------------------------------------------------------------------- /profiles/el/slots/rhasspy/months: -------------------------------------------------------------------------------- 1 | Ιανουαρίου 2 | Φεβρουαρίου 3 | Μαρτίου 4 | Απριλίου 5 | Μαΐου 6 | Ιουνίου 7 | Ιουλίου 8 | Αυγούστου 9 | Σεπτεμβρίου 10 | Οκτωβρίου 11 | Νοεμβρίου 12 | Δεκεμβρίου 13 | -------------------------------------------------------------------------------- /profiles/el/stop_words.txt: -------------------------------------------------------------------------------- 1 | ἀλλ’ 2 | αλλα 3 | ἀλλά 4 | ἄλλοσ 5 | αν 6 | ἄν 7 | αντι 8 | απο 9 | ἀπό 10 | ἄρα 11 | αυτα 12 | αυτεσ 13 | αυτη 14 | αυτο 15 | αυτοι 16 | αυτοσ 17 | αὐτόσ 18 | αυτουσ 19 | αυτων 20 | γα^ 21 | γάρ 22 | γε 23 | για 24 | δ’ 25 | δαί 26 | δαίσ 27 | δε 28 | δέ 29 | δεν 30 | δή 31 | διά 32 | εαν 33 | ἐάν 34 | ἑαυτοῦ 35 | ἐγώ 36 | εἰ 37 | ειμαι 38 | ειμαστε 39 | εἰμί 40 | εἴμι 41 | ειναι 42 | εἰσ 43 | εισαι 44 | ειστε 45 | ἐκ 46 | εκεινα 47 | εκεινεσ 48 | εκεινη 49 | εκεινο 50 | εκεινοι 51 | εκεινοσ 52 | εκεινουσ 53 | εκεινων 54 | ἐμόσ 55 | ἐν 56 | ενω 57 | επι 58 | ἐπί 59 | ἔτι 60 | η 61 | ἡ 62 | ἤ 63 | θα 64 | ισωσ 65 | κ 66 | και 67 | καί 68 | κατα 69 | κατά 70 | κι 71 | μα 72 | με 73 | μέν 74 | μετα 75 | μετά 76 | μη 77 | μή 78 | μην 79 | να 80 | ο 81 | ὁ 82 | ὅδε 83 | οι 84 | οἱ 85 | ομωσ 86 | οπωσ 87 | ὅσ 88 | οσο 89 | ὅστισ 90 | οτι 91 | ὅτι 92 | οὐ 93 | οὐδέ 94 | οὐδείσ 95 | οὐκ 96 | οὖν 97 | οὔτε 98 | οὗτοσ 99 | οὕτωσ 100 | παρα 101 | παρά 102 | περί 103 | ποια 104 | ποιεσ 105 | ποιο 106 | ποιοι 107 | ποιοσ 108 | ποιουσ 109 | ποιων 110 | που 111 | προσ 112 | πρόσ 113 | πωσ 114 | σε 115 | σόσ 116 | στη 117 | στην 118 | στο 119 | στον 120 | σύ 121 | σύν 122 | τα 123 | τά 124 | τε 125 | τῇ 126 | την 127 | τήν 128 | τησ 129 | τῆσ 130 | τι 131 | τί 132 | τισ 133 | τίσ 134 | το 135 | τό 136 | τοί 137 | τοιοῦτοσ 138 | τον 139 | τόν 140 | τοτε 141 | του 142 | τοῦ 143 | τούσ 144 | τῷ 145 | των 146 | τῶν 147 | ὑμόσ 148 | ὑπέρ 149 | ὑπό 150 | ὦ 151 | ωσ 152 | ὡσ 153 | ὥστε 154 | -------------------------------------------------------------------------------- /profiles/en/custom_words.txt: -------------------------------------------------------------------------------- 1 | rhasspy R AE S P IY -------------------------------------------------------------------------------- /profiles/en/espeak_phonemes.txt: -------------------------------------------------------------------------------- 1 | AA 0 2 | AE a 3 | AH V 4 | AO O: 5 | AW aU 6 | AY aI 7 | B b 8 | CH tS 9 | D d 10 | DH D 11 | EH E 12 | ER 3: 13 | EY eI 14 | F f 15 | G g 16 | HH h 17 | IH I 18 | IY i: 19 | JH dZ 20 | K k 21 | L l 22 | M m 23 | N n 24 | NG N 25 | OW oU 26 | OY OI 27 | P p 28 | R r 29 | S s 30 | SH S 31 | T t 32 | TH T 33 | UH U 34 | UW u 35 | V v 36 | W w 37 | Y j 38 | Z z 39 | ZH Z 40 | -------------------------------------------------------------------------------- /profiles/en/ipa_phonemes.txt: -------------------------------------------------------------------------------- 1 | AA ɑ 2 | AE æ 3 | AH ʌ 4 | AO ɔ 5 | AW aʊ 6 | AY aɪ 7 | B b 8 | CH tʃ 9 | D d 10 | DH ð 11 | EH e 12 | ER ə 13 | EY eɪ 14 | F f 15 | G g 16 | HH h 17 | IH ɪ 18 | IY i 19 | JH dʒ 20 | K k 21 | L l 22 | M m 23 | N n 24 | NG ŋ 25 | OW oʊ 26 | OY ɔɪ 27 | P p 28 | R r 29 | S s 30 | SH ʃ 31 | T t 32 | TH θ 33 | UH ʊ 34 | UW u 35 | V v 36 | W w 37 | Y j 38 | Z z 39 | ZH ʒ 40 | -------------------------------------------------------------------------------- /profiles/en/kaldi/custom_words.txt: -------------------------------------------------------------------------------- 1 | vlc v l 'E s 2 | -------------------------------------------------------------------------------- /profiles/en/kaldi/espeak_phonemes.txt: -------------------------------------------------------------------------------- 1 | 3 3 2 | A A@ 3 | D D 4 | E E 5 | I I 6 | N N 7 | O O: 8 | OI OI 9 | S S 10 | T T 11 | U U 12 | V @ 13 | Z Z 14 | aI aI 15 | aU aU 16 | b b 17 | d d 18 | dZ dZ 19 | e e 20 | f f 21 | g g 22 | h h 23 | i i 24 | j j 25 | k k 26 | l l 27 | m m 28 | n n 29 | o o 30 | p p 31 | pf f 32 | r r 33 | s s 34 | t t 35 | tS tS 36 | ts ts 37 | u u: 38 | v v 39 | w w 40 | z z 41 | { a 42 | -------------------------------------------------------------------------------- /profiles/en/kaldi/phoneme_examples.txt: -------------------------------------------------------------------------------- 1 | 3 bird b 3 d 2 | A arts A r ts 3 | D than D { n 4 | E bear b E r 5 | I ages e I dZ V z 6 | N bang b { N 7 | O also O l s o U 8 | OI boys b OI z 9 | S bush b U S 10 | T bath b { T 11 | U boat b o U t 12 | V able e I b V l 13 | Z usual j u Z V w V l 14 | aI bike b aI k 15 | aU down d aU n 16 | b babe b e I b 17 | d andy { n d i 18 | dZ edge E dZ 19 | e amen e I m E n 20 | f face f e I s 21 | g bags b { g z 22 | h hadn h { d V n 23 | i area E r i V 24 | j cute k j u t 25 | k back b { k 26 | l alex { l V k s 27 | m army A r m i 28 | n alan { l V n 29 | o blow b l o U 30 | p camp k { m p 31 | pf pfft pf t 32 | r aren A r V n 33 | s asks { s k s 34 | t anti { n t i 35 | tS each i tS 36 | ts gets g E ts 37 | u blue b l u 38 | v dave d e I v 39 | w away V w e I 40 | z arms A r m z 41 | { adam { d V m 42 | -------------------------------------------------------------------------------- /profiles/en/okay_rhasspy.pmdl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/profiles/en/okay_rhasspy.pmdl -------------------------------------------------------------------------------- /profiles/en/phoneme_examples.txt: -------------------------------------------------------------------------------- 1 | # Phoneme Word Pronunciation 2 | AA odd AA D 3 | AE at AE T 4 | AH hut HH AH T 5 | AO ought AO T 6 | AW cow K AW 7 | AY hide HH AY D 8 | B be B IY 9 | CH cheese CH IY Z 10 | D dee D IY 11 | DH thee DH IY 12 | EH Ed EH D 13 | ER hurt HH ER T 14 | EY ate EY T 15 | F fee F IY 16 | G green G R IY N 17 | HH he HH IY 18 | IH it IH T 19 | IY eat IY T 20 | JH gee JH IY 21 | K key K IY 22 | L lee L IY 23 | M me M IY 24 | N knee N IY 25 | NG ping P IH NG 26 | OW oat OW T 27 | OY toy T OY 28 | P pee P IY 29 | R read R IY D 30 | S sea S IY 31 | SH she SH IY 32 | T tea T IY 33 | TH theta TH EY T AH 34 | UH hood HH UH D 35 | UW two T UW 36 | V vee V IY 37 | W we W IY 38 | Y yield Y IY L D 39 | Z zee Z IY 40 | ZH seizure S IY ZH ER 41 | -------------------------------------------------------------------------------- /profiles/en/sentences.ini: -------------------------------------------------------------------------------- 1 | [GetTime] 2 | what time is it 3 | tell me the time 4 | 5 | [GetTemperature] 6 | whats the temperature 7 | how (hot | cold) is it 8 | 9 | [GetGarageState] 10 | is the garage door (open | closed) 11 | 12 | [ChangeLightState] 13 | light_name = ((living room lamp | garage light) {name}) | 14 | light_state = (on | off) {state} 15 | 16 | turn [the] 17 | turn [the] 18 | 19 | [ChangeLightColor] 20 | light_name = (bedroom light) {name} 21 | color = (red | green | blue) {color} 22 | 23 | set [the] [to] 24 | make [the] -------------------------------------------------------------------------------- /profiles/en/slot_programs/rhasspy/number: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import argparse 3 | import sys 4 | 5 | 6 | def main(): 7 | parser = argparse.ArgumentParser("number") 8 | parser.add_argument("lower", type=int, help="Lower bound") 9 | parser.add_argument("upper", type=int, help="Upper bound (inclusive)") 10 | args, rest_args = parser.parse_known_args() 11 | 12 | lower = args.lower 13 | upper = args.upper 14 | step = 1 15 | 16 | if rest_args: 17 | step = int(rest_args[0]) 18 | 19 | if upper < lower: 20 | lower, upper = upper, lower 21 | 22 | for n in range(lower, upper + 1, step): 23 | print(n) 24 | 25 | 26 | # ----------------------------------------------------------------------------- 27 | 28 | if __name__ == "__main__": 29 | main() 30 | -------------------------------------------------------------------------------- /profiles/en/slots/rhasspy/days: -------------------------------------------------------------------------------- 1 | Monday 2 | Tuesday 3 | Wednesday 4 | Thursday 5 | Friday 6 | Saturday 7 | Sunday 8 | -------------------------------------------------------------------------------- /profiles/en/slots/rhasspy/months: -------------------------------------------------------------------------------- 1 | January 2 | February 3 | March 4 | April 5 | May 6 | June 7 | July 8 | August 9 | September 10 | October 11 | November 12 | December 13 | -------------------------------------------------------------------------------- /profiles/en/stop_words.txt: -------------------------------------------------------------------------------- 1 | a 2 | able 3 | about 4 | across 5 | after 6 | all 7 | almost 8 | also 9 | am 10 | among 11 | an 12 | and 13 | any 14 | are 15 | as 16 | at 17 | be 18 | because 19 | been 20 | but 21 | by 22 | can 23 | cannot 24 | could 25 | dear 26 | did 27 | do 28 | does 29 | either 30 | else 31 | ever 32 | every 33 | for 34 | from 35 | get 36 | got 37 | had 38 | has 39 | have 40 | he 41 | her 42 | hers 43 | him 44 | his 45 | how 46 | however 47 | i 48 | if 49 | in 50 | into 51 | is 52 | it 53 | its 54 | just 55 | least 56 | let 57 | like 58 | likely 59 | may 60 | me 61 | might 62 | most 63 | must 64 | my 65 | neither 66 | no 67 | nor 68 | not 69 | of 70 | off 71 | often 72 | on 73 | only 74 | or 75 | other 76 | our 77 | own 78 | rather 79 | said 80 | say 81 | says 82 | she 83 | should 84 | since 85 | so 86 | some 87 | than 88 | that 89 | the 90 | their 91 | them 92 | then 93 | there 94 | these 95 | they 96 | this 97 | tis 98 | to 99 | too 100 | twas 101 | us 102 | wants 103 | was 104 | we 105 | were 106 | while 107 | who 108 | whom 109 | why 110 | will 111 | with 112 | would 113 | yet 114 | you 115 | your 116 | -------------------------------------------------------------------------------- /profiles/es/custom_words.txt: -------------------------------------------------------------------------------- 1 | encender e n z e n d e r 2 | enciende e n z i e n d e 3 | frio f r i o 4 | garaje g a r a j e 5 | -------------------------------------------------------------------------------- /profiles/es/espeak_phonemes.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/profiles/es/espeak_phonemes.txt -------------------------------------------------------------------------------- /profiles/es/phoneme_examples.txt: -------------------------------------------------------------------------------- 1 | A A A 2 | B VEZ B E Z 3 | CH MUCHO M U CH O 4 | D DE D E 5 | E EL E L 6 | F FUE F U E 7 | G ALGO A L G O 8 | GN AñOS A GN O S 9 | I Y I 10 | K CON K O N 11 | L AL A L 12 | LL ELLA E LL A 13 | M ME M E 14 | N EN E N 15 | O O O 16 | P POR P O R 17 | R ERA E R A 18 | S ES E S 19 | T TE T E 20 | U SU S U 21 | Y YA Y A 22 | Z HACE A Z E 23 | -------------------------------------------------------------------------------- /profiles/es/sentences.ini: -------------------------------------------------------------------------------- 1 | [GetTemperature] 2 | cuál es la temperatura 3 | que (calor hace | tan frio esta) 4 | 5 | [GetGarageState] 6 | está (abierta | cerrada) la puerta del garaje 7 | 8 | [ChangeLightState] 9 | (enciende){state} la (lámpara de la sala){name} 10 | (apagar){state} la (lámpara de la sala de estar){name} 11 | (encender | apagar){state} la (luz del garaje){name} 12 | -------------------------------------------------------------------------------- /profiles/es/slot_programs/rhasspy/number: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import argparse 3 | import sys 4 | 5 | 6 | def main(): 7 | parser = argparse.ArgumentParser("number") 8 | parser.add_argument("lower", type=int, help="Lower bound") 9 | parser.add_argument("upper", type=int, help="Upper bound (inclusive)") 10 | args, rest_args = parser.parse_known_args() 11 | 12 | lower = args.lower 13 | upper = args.upper 14 | step = 1 15 | 16 | if rest_args: 17 | step = int(rest_args[0]) 18 | 19 | if upper < lower: 20 | lower, upper = upper, lower 21 | 22 | for n in range(lower, upper + 1, step): 23 | print(n) 24 | 25 | 26 | # ----------------------------------------------------------------------------- 27 | 28 | if __name__ == "__main__": 29 | main() 30 | -------------------------------------------------------------------------------- /profiles/es/slots/rhasspy/days: -------------------------------------------------------------------------------- 1 | lunes 2 | martes 3 | miércoles 4 | jueves 5 | viernes 6 | sábado 7 | domingo 8 | -------------------------------------------------------------------------------- /profiles/es/slots/rhasspy/months: -------------------------------------------------------------------------------- 1 | enero 2 | febrero 3 | marzo 4 | abril 5 | mayo 6 | junio 7 | julio 8 | agosto 9 | septiembre 10 | octubre 11 | noviembre 12 | diciembre 13 | -------------------------------------------------------------------------------- /profiles/fr/custom_words.txt: -------------------------------------------------------------------------------- 1 | est-ce ai ss kk 2 | est-elle ai ss tt ai ll 3 | est-il ai ss tt ii ll 4 | l'éclairage ll ei kk ll ai rr aa jj 5 | -------------------------------------------------------------------------------- /profiles/fr/dictionary.txt: -------------------------------------------------------------------------------- 1 | accord aa kk oo rr 2 | allumé aa ll uu mm ei 3 | ce ss 4 | ce(2) ss ee 5 | ce(3) ss ei ee 6 | chambre ch an bb rr 7 | chambre(2) ch an bb rr ee 8 | coucher kk ou ch ei 9 | coucher(2) kk ou ch ei rr 10 | d dd ai 11 | d(2) dd ei 12 | dans dd an 13 | dans(2) dd an zz 14 | de dd 15 | de(2) dd ee 16 | elle ai ll 17 | elle(2) ai ll ee 18 | est ai 19 | est(2) ai ss tt 20 | est(3) ai ss tt ee 21 | est(4) ai tt 22 | fermée ff ai rr mm ei 23 | garage gg aa rr aa jj 24 | garage(2) gg aa rr aa jj ee 25 | heure oe rr 26 | heure(2) oe rr ee 27 | il ii ll 28 | l ai ll 29 | la ll aa 30 | lampe ll an pp 31 | lampe(2) ll an pp ee 32 | lumière ll uu mm yy ai rr 33 | lumière(2) ll uu mm yy ai rr ee 34 | ou ou 35 | ouverte ou vv ai rr tt 36 | ouverte(2) ou vv ai rr tt ee 37 | porte pp oo rr tt 38 | porte(2) pp oo rr tt ee 39 | que kk 40 | que(2) kk ee 41 | quelle kk ai ll 42 | quelle(2) kk ai ll ee 43 | râpe rr aa pp 44 | salon ss aa ll on 45 | température tt an pp ai rr aa tt uu rr 46 | température(2) tt an pp ai rr aa tt uu rr ee 47 | à aa 48 | éclairage ai kk ll ai rr aa jj 49 | éclairage(2) ai kk ll ai rr aa jj ee 50 | éteindre ai tt in dd rr 51 | éteindre(2) ai tt in dd rr ee 52 | -------------------------------------------------------------------------------- /profiles/fr/espeak_phonemes.txt: -------------------------------------------------------------------------------- 1 | aa a 2 | ai E 3 | an A~ 4 | au o: 5 | bb b 6 | ch S 7 | dd d 8 | ee l 9 | ei e 10 | eu Y 11 | ff f 12 | gg g 13 | gn n^ 14 | ii i 15 | in E~ 16 | jj Z 17 | kk k 18 | ll l 19 | mm m 20 | nn n 21 | oe W 22 | on O~ 23 | oo o 24 | ou u 25 | pp p 26 | rr r 27 | ss s 28 | tt t 29 | un W~ 30 | uu y 31 | uy y' 32 | vv v 33 | ww w 34 | yy j 35 | zz z 36 | -------------------------------------------------------------------------------- /profiles/fr/kaldi/custom_words.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/profiles/fr/kaldi/custom_words.txt -------------------------------------------------------------------------------- /profiles/fr/kaldi/espeak_phonemes.txt: -------------------------------------------------------------------------------- 1 | 2 j 2 | 9 j 3 | 9: ? 4 | 9~ V 5 | @ E 6 | @: ? 7 | A a 8 | A: ? 9 | A~ n 10 | E E 11 | E: s 12 | E~ I 13 | H j 14 | I ? 15 | J n 16 | N N 17 | O 0 18 | O~ n 19 | R r 20 | R: ? 21 | S tS 22 | SIL ? 23 | U ? 24 | Z dZ 25 | a a 26 | a: ? 27 | aU ? 28 | b b 29 | d d 30 | dZ dZ 31 | e eI 32 | e: ? 33 | f f 34 | g g 35 | h ? 36 | i I 37 | i: ? 38 | j @ 39 | k k 40 | l l 41 | m m 42 | n n 43 | o oU 44 | o: ? 45 | p p 46 | pf ? 47 | r r 48 | s s 49 | t t 50 | tS tS 51 | ts t 52 | u u: 53 | u: ? 54 | v v 55 | w OI 56 | x ? 57 | y j 58 | y: ? 59 | z s 60 | { ? 61 | -------------------------------------------------------------------------------- /profiles/fr/kaldi/phoneme_examples.txt: -------------------------------------------------------------------------------- 1 | 2 bleu b l 2 2 | 9 club k l 9 b 3 | 9~ aucun o k 9~ 4 | @ ceci s @ s i 5 | A base b A z 6 | A~ andy A~ n d i 7 | E aies E 8 | E: têtes t E: t 9 | E~ bien b j E~ 10 | H fuir f H i R 11 | I avril A v R I l 12 | J gagne g a J 13 | N king k i N 14 | O bord b O R 15 | O~ bons b O~ 16 | R agir a Z i R 17 | S chef S E f 18 | Z ange A~ Z 19 | a abri a b R i 20 | a: marc m a: k 21 | b aube o b 22 | d aide E d 23 | dZ jack dZ a k 24 | e aidé E d e 25 | f afin a f E~ 26 | g goût g u 27 | i agit a Z i 28 | j ayez E j e 29 | k acte a k t 30 | l allo a l o 31 | m aime E m 32 | n anna a n a 33 | o allô a l o 34 | p pain p E~ 35 | r prison p r i z O~ 36 | s alex a l E k s 37 | t bite b i t 38 | tS match m a tS 39 | ts cents s E n ts 40 | u chou S u 41 | v avec a v E k 42 | w coin k w E~ 43 | y buts b y t 44 | z aise E z 45 | -------------------------------------------------------------------------------- /profiles/fr/phoneme_examples.txt: -------------------------------------------------------------------------------- 1 | aa abri aa bb rr ii 2 | ai aide ai dd 3 | an adam aa dd an 4 | au allô aa ll au 5 | bb aube au bb 6 | ch chat ch aa 7 | dd aidé ai dd ei 8 | ee acte aa kk tt ee 9 | ei aimé ai mm ei 10 | eu bleu bb ll eu 11 | ff afin aa ff in 12 | gg garage gg aa rr aa jj 13 | gn gagne gg aa gn 14 | ii agit aa jj ii 15 | in bain bb in 16 | jj ange an jj 17 | kk alex aa ll ai kk ss 18 | ll allé aa ll ei 19 | mm aime ai mm 20 | nn andy aa nn dd ii 21 | oe club kk ll oe bb 22 | on bons bb on 23 | oo aura oo rr aa 24 | ou août ou 25 | pp camp kk aa mm pp 26 | rr arme aa rr mm 27 | ss bras bb rr aa ss 28 | tt bout bb ou tt 29 | un aucun oo kk un 30 | uu buts bb uu 31 | uy fuir ff uy ii rr 32 | vv avec aa vv ai kk 33 | ww bois bb ww aa 34 | yy ayez ai yy ei 35 | zz aise ai zz 36 | -------------------------------------------------------------------------------- /profiles/fr/sentences.ini: -------------------------------------------------------------------------------- 1 | [GetTime] 2 | quelle heure est-il 3 | il est quelle heure 4 | 5 | [GetTemperature] 6 | quelle est la température 7 | 8 | [GetGarageState] 9 | est-ce que la porte de garage est ouverte ou fermée 10 | la porte de garage est-elle ouverte ou fermée 11 | est-elle ouverte ou fermée la porte de garage 12 | 13 | [ChangeLightState] 14 | light_name = (la (lampe du salon | lumière dans la chambre à coucher){name}) | (l'éclairage de garage){name} 15 | (allumer | éteindre){state} 16 | -------------------------------------------------------------------------------- /profiles/fr/slot_programs/rhasspy/number: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import argparse 3 | import sys 4 | 5 | 6 | def main(): 7 | parser = argparse.ArgumentParser("number") 8 | parser.add_argument("lower", type=int, help="Lower bound") 9 | parser.add_argument("upper", type=int, help="Upper bound (inclusive)") 10 | args, rest_args = parser.parse_known_args() 11 | 12 | lower = args.lower 13 | upper = args.upper 14 | step = 1 15 | 16 | if rest_args: 17 | step = int(rest_args[0]) 18 | 19 | if upper < lower: 20 | lower, upper = upper, lower 21 | 22 | for n in range(lower, upper + 1, step): 23 | print(n) 24 | 25 | 26 | # ----------------------------------------------------------------------------- 27 | 28 | if __name__ == "__main__": 29 | main() 30 | -------------------------------------------------------------------------------- /profiles/fr/slots/rhasspy/days: -------------------------------------------------------------------------------- 1 | lundi 2 | mardi 3 | mercredi 4 | jeudi 5 | vendredi 6 | samedi 7 | dimanche 8 | -------------------------------------------------------------------------------- /profiles/fr/slots/rhasspy/months: -------------------------------------------------------------------------------- 1 | janvier 2 | février 3 | mars 4 | avril 5 | mai 6 | juin 7 | juillet 8 | août 9 | septembre 10 | octobre 11 | novembre 12 | décembre 13 | -------------------------------------------------------------------------------- /profiles/hi/custom_words.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/profiles/hi/custom_words.txt -------------------------------------------------------------------------------- /profiles/hi/espeak_phonemes.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/profiles/hi/espeak_phonemes.txt -------------------------------------------------------------------------------- /profiles/hi/phoneme_examples.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/profiles/hi/phoneme_examples.txt -------------------------------------------------------------------------------- /profiles/hi/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "language": "hi", 3 | "name": "hi", 4 | "locale": "hi_IN", 5 | "speech_to_text": { 6 | "system": "pocketsphinx", 7 | "dictionary_casing": "lower" 8 | }, 9 | "intent": { 10 | "wavenet": { 11 | "language_code": "hi-HI" 12 | }, 13 | "flair": { 14 | "compatible": false 15 | } 16 | }, 17 | "download": { 18 | "conditions": { 19 | "speech_to_text.system": { 20 | "pocketsphinx": { 21 | "acoustic_model": "cmusphinx-hi-5.2.tar.gz:cmusphinx-hi-5.2/hindi.cd_cont_1000", 22 | "base_dictionary.txt": "cmusphinx-hi-5.2.tar.gz:cmusphinx-hi-5.2/hindi.dic", 23 | "g2p.fst": "hi-g2p.tar.gz:g2p.fst" 24 | } 25 | }, 26 | 27 | "speech_to_text.pocketsphinx.mix_weight": { 28 | ">0": { 29 | "base_language_model.txt": "cmusphinx-hi-5.2.tar.gz:cmusphinx-hi-5.2/hindi.lm" 30 | } 31 | } 32 | }, 33 | 34 | "files": { 35 | "cmusphinx-hi-5.2.tar.gz": { 36 | "url": "https://github.com/synesthesiam/rhasspy-profiles/releases/download/v1.0-hi/cmusphinx-hi-5.2.tar.gz" 37 | }, 38 | "hi-g2p.tar.gz": { 39 | "url": "https://github.com/synesthesiam/rhasspy-profiles/releases/download/v1.0-hi/hi-g2p.tar.gz" 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /profiles/hi/sentences.ini: -------------------------------------------------------------------------------- 1 | [GetTemperature] 2 | taapamaana kyaa hai 3 | 4 | [GetTime] 5 | kyaa samaya huaa hai 6 | 7 | [GetGarageState] 8 | geraaj daravaaja (khula | band) hai 9 | 10 | [ChangeLightState] 11 | living room laimp chaaloo karen -------------------------------------------------------------------------------- /profiles/hi/slot_programs/rhasspy/number: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import argparse 3 | import sys 4 | 5 | 6 | def main(): 7 | parser = argparse.ArgumentParser("number") 8 | parser.add_argument("lower", type=int, help="Lower bound") 9 | parser.add_argument("upper", type=int, help="Upper bound (inclusive)") 10 | args, rest_args = parser.parse_known_args() 11 | 12 | lower = args.lower 13 | upper = args.upper 14 | step = 1 15 | 16 | if rest_args: 17 | step = int(rest_args[0]) 18 | 19 | if upper < lower: 20 | lower, upper = upper, lower 21 | 22 | for n in range(lower, upper + 1, step): 23 | print(n) 24 | 25 | 26 | # ----------------------------------------------------------------------------- 27 | 28 | if __name__ == "__main__": 29 | main() 30 | -------------------------------------------------------------------------------- /profiles/hi/slots/rhasspy/days: -------------------------------------------------------------------------------- 1 | सोमवार 2 | मंगलवार 3 | बुधवार 4 | गुरुवार 5 | शुक्रवार 6 | शनिवार 7 | रविवार 8 | -------------------------------------------------------------------------------- /profiles/hi/slots/rhasspy/months: -------------------------------------------------------------------------------- 1 | जनवरी 2 | फ़रवरी 3 | मार्च 4 | अप्रैल 5 | मई 6 | जून 7 | जुलाई 8 | अगस्त 9 | सितंबर 10 | अक्तूबर 11 | नवंबर 12 | दिसंबर 13 | -------------------------------------------------------------------------------- /profiles/hi/stop_words.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/profiles/hi/stop_words.txt -------------------------------------------------------------------------------- /profiles/it/custom_words.txt: -------------------------------------------------------------------------------- 1 | soggiorno s OO dZZ dZZ o1 r n o 2 | accendi a tSS tSS EE n d i 3 | ore o1 r e 4 | rhasspy r a s s p 5 | spegnere s p e JJ JJ e r e 6 | okay o a 7 | garage g a r a dZZ e 8 | temperatura t e m p e r a t u1 r a 9 | -------------------------------------------------------------------------------- /profiles/it/dictionary.txt: -------------------------------------------------------------------------------- 1 | accendi a tSS tSS EE n d i 2 | aperta a p EE r t a 3 | caldo k a1 l d o 4 | che k e1 5 | chiusa k j u1 s a 6 | del d e1 l 7 | e e1 8 | freddo f r e1 d d o 9 | garage g a r a dZZ e 10 | la l a1 11 | lampada l a1 m p a d a 12 | luce l u1 tSS e 13 | okay o a 14 | ore o1 r e 15 | ore(2) o1 r e 16 | porta p OO r t a 17 | quale k w a1 l e 18 | quanto k w a1 n t o 19 | rhasspy r a s s p 20 | soggiorno s OO dZZ dZZ o1 r n o 21 | sono s OO n o 22 | spegnere s p e JJ JJ e r e 23 | temperatura t e m p e r a t u1 r a 24 | è e1 25 | -------------------------------------------------------------------------------- /profiles/it/espeak_phonemes.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/profiles/it/espeak_phonemes.txt -------------------------------------------------------------------------------- /profiles/it/phoneme_examples.txt: -------------------------------------------------------------------------------- 1 | EE È EE 2 | LL gli LL i1 3 | OO oh OO 4 | a era EE r a 5 | a1 a a1 6 | b bene b EE n e 7 | d ad a1 d 8 | e le l e 9 | e1 e e1 10 | f fa f a1 11 | g grazie g r a1 ts ts j e 12 | i chi k i 13 | i1 i i1 14 | j siamo s j a1 m o 15 | k c k 16 | l l l 17 | m ma m a1 18 | n in i1 n 19 | ng anche a1 ng k e 20 | o io i1 o 21 | o1 o o1 22 | p per p e1 r 23 | r ora OO r a 24 | s se s e 25 | t te t e1 26 | tSS ci tSS i1 27 | u su s u 28 | u1 un u1 n 29 | v dove d o1 v e 30 | w quando k w a1 n d o 31 | -------------------------------------------------------------------------------- /profiles/it/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "it", 3 | "language": "it", 4 | "locale": "it_IT", 5 | "speech_to_text": { 6 | "system": "pocketsphinx", 7 | "dictionary_casing": "lower" 8 | }, 9 | "intent": { 10 | "wavenet": { 11 | "language_code": "it-IT" 12 | }, 13 | "flair": { 14 | "compatible": false 15 | } 16 | }, 17 | "download": { 18 | "conditions": { 19 | "speech_to_text.system": { 20 | "pocketsphinx": { 21 | "acoustic_model": "cmusphinx-it-5.2.tar.gz:cmusphinx-it-5.2/model_parameters/voxforge_it_sphinx.cd_cont_2000/", 22 | "base_dictionary.txt": "cmusphinx-it-5.2.tar.gz:cmusphinx-it-5.2/etc/voxforge_it_sphinx.dic", 23 | "g2p.fst": "it-g2p.tar.gz:g2p.fst" 24 | } 25 | }, 26 | 27 | "speech_to_text.pocketsphinx.mix_weight": { 28 | ">0": { 29 | "base_language_model.txt": "cmusphinx-it-5.2.tar.gz:cmusphinx-it-5.2/etc/voxforge_it_sphinx.lm" 30 | } 31 | } 32 | }, 33 | 34 | "files": { 35 | "cmusphinx-it-5.2.tar.gz": { 36 | "url": "https://github.com/synesthesiam/rhasspy-profiles/releases/download/v1.0-it/cmusphinx-it-5.2.tar.gz" 37 | }, 38 | "it-g2p.tar.gz": { 39 | "url": "https://github.com/synesthesiam/rhasspy-profiles/releases/download/v1.0-it/it-g2p.tar.gz" 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /profiles/it/sentences.ini: -------------------------------------------------------------------------------- 1 | [GetTime] 2 | che ore sono 3 | 4 | [GetTemperature] 5 | quale e la temperatura 6 | quanto è (caldo | freddo) 7 | 8 | [GetGarageState] 9 | la porta del garage è (aperta | chiusa) 10 | 11 | [ChangeLightState] 12 | light_name = (lampada del soggiorno | luce del garage) {name} 13 | light_state = (accendi | spegnere) {state} 14 | 15 | [la] -------------------------------------------------------------------------------- /profiles/it/slot_programs/rhasspy/number: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import argparse 3 | import sys 4 | 5 | 6 | def main(): 7 | parser = argparse.ArgumentParser("number") 8 | parser.add_argument("lower", type=int, help="Lower bound") 9 | parser.add_argument("upper", type=int, help="Upper bound (inclusive)") 10 | args, rest_args = parser.parse_known_args() 11 | 12 | lower = args.lower 13 | upper = args.upper 14 | step = 1 15 | 16 | if rest_args: 17 | step = int(rest_args[0]) 18 | 19 | if upper < lower: 20 | lower, upper = upper, lower 21 | 22 | for n in range(lower, upper + 1, step): 23 | print(n) 24 | 25 | 26 | # ----------------------------------------------------------------------------- 27 | 28 | if __name__ == "__main__": 29 | main() 30 | -------------------------------------------------------------------------------- /profiles/it/slots/rhasspy/days: -------------------------------------------------------------------------------- 1 | lunedì 2 | martedì 3 | mercoledì 4 | giovedì 5 | venerdì 6 | sabato 7 | domenica 8 | -------------------------------------------------------------------------------- /profiles/it/slots/rhasspy/months: -------------------------------------------------------------------------------- 1 | gennaio 2 | febbraio 3 | marzo 4 | aprile 5 | maggio 6 | giugno 7 | luglio 8 | agosto 9 | settembre 10 | ottobre 11 | novembre 12 | dicembre 13 | -------------------------------------------------------------------------------- /profiles/nl/custom_words.txt: -------------------------------------------------------------------------------- 1 | woonkamerverlichting w o nn k a m @ r v @ r l ii x t ii nn 2 | garagepoort x a r a x @ p o r t 3 | garageverlichting x a r a gg @ v @ r l ii x t ii nn 4 | aan a n 5 | de d @ 6 | gesloten x @ s l o t @ n 7 | het h ee t 8 | hoe h u 9 | is i s 10 | koud k ou t 11 | laat l a t 12 | open o p @ n 13 | temperatuur t ee m p @ r a t y r 14 | uit ui t 15 | warm w aa r m 16 | wat w aa t 17 | woonkamerlamp w o nn k a m @ r l aa m p 18 | zet z ee t 19 | -------------------------------------------------------------------------------- /profiles/nl/dictionary.txt: -------------------------------------------------------------------------------- 1 | aan a n 2 | de d @ 3 | garagepoort x a r a x @ p o r t 4 | garageverlichting x a r a gg @ v @ r l ii x t ii nn 5 | gesloten x @ s l o t @ 6 | het @ t 7 | hoe h u 8 | huidige h ui d @ gg @ 9 | is ii s 10 | koud k ou t 11 | laat l a t 12 | me m @ 13 | nu n y 14 | of oo f 15 | ok oo k 16 | open o p @ n 17 | raspy r aa s p i 18 | temperatuur t ee m p @ r a t y r 19 | uit ui t 20 | vertel v @ r t ee l 21 | warm w aa r m 22 | wat w aa t 23 | woonkamerverlichting w o nn k a m @ r v @ r l ii x t ii nn 24 | zet z ee t 25 | -------------------------------------------------------------------------------- /profiles/nl/espeak_phonemes.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/profiles/nl/espeak_phonemes.txt -------------------------------------------------------------------------------- /profiles/nl/kaldi/custom_words.txt: -------------------------------------------------------------------------------- 1 | garagepoort G A r a Z @ p o r t 2 | garageverlichting G A r a Z @ v @ r l I x t I N 3 | woonkamerlamp w o n k a m @ r l A m p 4 | woonkamerverlichting w o n k a m @ r v @ r l I x t I N 5 | slaapkamerlamp s l a p k a m @ r l A m p 6 | blkaieiiea b e E l k a E2 EI i e a 7 | -------------------------------------------------------------------------------- /profiles/nl/kaldi/espeak_phonemes.txt: -------------------------------------------------------------------------------- 1 | A A 2 | AU VU 3 | E E 4 | E2 E 5 | EI EI 6 | EU Y: 7 | G Q 8 | I I 9 | N N 10 | O O 11 | S S 12 | U 8 13 | UI Wy 14 | Z j 15 | a a: 16 | b b 17 | d d 18 | e e: 19 | f f 20 | g k 21 | h h 22 | i i 23 | j j 24 | k k 25 | l l 26 | m m 27 | n n 28 | o o: 29 | p p 30 | r r 31 | s s 32 | t t 33 | u u 34 | v v 35 | w v# 36 | x x 37 | y y 38 | z z 39 | -------------------------------------------------------------------------------- /profiles/nl/kaldi/phoneme_examples.txt: -------------------------------------------------------------------------------- 1 | @ alle A l @ 2 | A acht A x t 3 | AU bouw b AU 4 | E bent b E n t 5 | E2 scène s E2 n @ 6 | EI blij b l EI 7 | EU deur d EU r 8 | G berg b E r G 9 | I bill b I l 10 | N bang b A N 11 | O bord b O r d 12 | S chef S E f 13 | U brug b r U G 14 | UI buik b UI k 15 | Z jake d Z e k 16 | a adam a d A m 17 | b baan b a n 18 | d bond b O n d 19 | e baby b e b i 20 | f café k A f e 21 | g gang g E N 22 | h haag h a G 23 | i andy E n d i 24 | j doei d u j 25 | k alex a l E k s 26 | l belt b E l t 27 | m adem a d @ m 28 | n amen a m @ n 29 | o auto AU t o 30 | p diep d i p 31 | r arme A r m @ 32 | s best b E s t 33 | t arts A r t s 34 | u boek b u k 35 | v dave d e v 36 | w eeuw e w 37 | x echt E x t 38 | y duur d y r 39 | z baas b a z 40 | -------------------------------------------------------------------------------- /profiles/nl/phoneme_examples.txt: -------------------------------------------------------------------------------- 1 | @ adem a d @ m 2 | a adam a d aa m 3 | aa acht aa x t 4 | b baan b a n 5 | d andy aa n d i 6 | e baby b e b i 7 | ee alex a l ee k s 8 | ei blij b l ei 9 | er albert aa l b er r 10 | eu deur d eu r 11 | f cafÉ k a f 12 | g chicago ss i k a g o 13 | gg hoge h o gg @ 14 | h haag h a x 15 | i bier b i r 16 | ii bill b ii l 17 | j doei d u j 18 | k bank b aa nn k 19 | l alle aa l @ 20 | m amen a m @ 21 | n anna aa n a 22 | nn bang b aa nn 23 | o auto ou t o 24 | oo bond b oo n t 25 | ou bouw b ou w 26 | p club k l yy p 27 | r arme aa r m @ 28 | s arts aa r t s 29 | ss chef ss ee f 30 | t band b ee n t 31 | u boek b u k 32 | ui buik b ui k 33 | v dave d a v @ 34 | w eeuw e w 35 | x berg b ee r x 36 | y duur d y r 37 | yy brug b r yy x 38 | z deze d e z @ 39 | -------------------------------------------------------------------------------- /profiles/nl/sentences.ini: -------------------------------------------------------------------------------- 1 | [ChangeLightState] 2 | zet de (woonkamerverlichting | woonkamerlamp | garageverlichting){name} (aan | uit){state} 3 | 4 | [GetTime] 5 | hoe laat is het 6 | 7 | [GetTemperature] 8 | wat is de temperatuur 9 | hoe (warm | koud) is het 10 | 11 | [GetGarageState] 12 | is de garagepoort (open | gesloten) -------------------------------------------------------------------------------- /profiles/nl/slot_programs/rhasspy/number: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import argparse 3 | import sys 4 | 5 | 6 | def main(): 7 | parser = argparse.ArgumentParser("number") 8 | parser.add_argument("lower", type=int, help="Lower bound") 9 | parser.add_argument("upper", type=int, help="Upper bound (inclusive)") 10 | args, rest_args = parser.parse_known_args() 11 | 12 | lower = args.lower 13 | upper = args.upper 14 | step = 1 15 | 16 | if rest_args: 17 | step = int(rest_args[0]) 18 | 19 | if upper < lower: 20 | lower, upper = upper, lower 21 | 22 | for n in range(lower, upper + 1, step): 23 | print(n) 24 | 25 | 26 | # ----------------------------------------------------------------------------- 27 | 28 | if __name__ == "__main__": 29 | main() 30 | -------------------------------------------------------------------------------- /profiles/nl/slots/rhasspy/days: -------------------------------------------------------------------------------- 1 | maandag 2 | dinsdag 3 | woensdag 4 | donderdag 5 | vrijdag 6 | zaterdag 7 | zondag 8 | -------------------------------------------------------------------------------- /profiles/nl/slots/rhasspy/months: -------------------------------------------------------------------------------- 1 | januari 2 | februari 3 | maart 4 | april 5 | mei 6 | juni 7 | juli 8 | augustus 9 | september 10 | oktober 11 | november 12 | december 13 | -------------------------------------------------------------------------------- /profiles/nl/stop_words.txt: -------------------------------------------------------------------------------- 1 | de 2 | en 3 | van 4 | ik 5 | te 6 | dat 7 | die 8 | in 9 | een 10 | hij 11 | het 12 | niet 13 | zijn 14 | is 15 | was 16 | op 17 | aan 18 | met 19 | als 20 | voor 21 | had 22 | er 23 | maar 24 | om 25 | hem 26 | dan 27 | zou 28 | of 29 | wat 30 | mijn 31 | men 32 | dit 33 | zo 34 | door 35 | over 36 | ze 37 | zich 38 | bij 39 | ook 40 | tot 41 | je 42 | mij 43 | uit 44 | der 45 | daar 46 | haar 47 | naar 48 | heb 49 | hoe 50 | heeft 51 | hebben 52 | deze 53 | u 54 | want 55 | nog 56 | zal 57 | me 58 | zij 59 | nu 60 | ge 61 | geen 62 | omdat 63 | iets 64 | worden 65 | toch 66 | al 67 | waren 68 | veel 69 | meer 70 | doen 71 | toen 72 | moet 73 | ben 74 | zonder 75 | kan 76 | hun 77 | dus 78 | alles 79 | onder 80 | ja 81 | eens 82 | hier 83 | wie 84 | werd 85 | altijd 86 | doch 87 | wordt 88 | wezen 89 | kunnen 90 | ons 91 | zelf 92 | tegen 93 | na 94 | reeds 95 | wil 96 | kon 97 | niets 98 | uw 99 | iemand 100 | geweest 101 | andere 102 | -------------------------------------------------------------------------------- /profiles/pt/custom_words.txt: -------------------------------------------------------------------------------- 1 | desligue d e s l i g i 2 | pausar p a w z a X 3 | -------------------------------------------------------------------------------- /profiles/pt/espeak_phonemes.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/profiles/pt/espeak_phonemes.txt -------------------------------------------------------------------------------- /profiles/pt/phoneme_examples.txt: -------------------------------------------------------------------------------- 1 | E anel a n E w 2 | J banho b a~ J u 3 | L ilha i L a 4 | O após a p O s 5 | R arma a R m a 6 | S acha a S a 7 | X agir a Z i X 8 | Z anjo a~ Z u 9 | a abra a b r a 10 | a~ ação a s a~ w~ 11 | b abre a b r i 12 | d adam a d a~ w~ 13 | dZ andy a~ dZ i 14 | e alex a l e k s 15 | e~ além a l e~ j~ 16 | f café k a f E 17 | g água a g w a 18 | i arte a X tS i 19 | i~ cima s i~ m a 20 | j aqui a k j 21 | j~ cães k a~ j~ s 22 | k boca b o k a 23 | l aula a w l a 24 | m alma a w m a 25 | n anna a~ n a 26 | o amor a m o X 27 | o~ bons b o~ s 28 | p copa k o p a 29 | r área a r e a 30 | s anos a~ n u s 31 | t alta a w t a 32 | tS bate b a tS i 33 | u acho a S u 34 | u~ duma d u~ m a 35 | v alvo a w v u 36 | w algo a w g u 37 | w~ chão S a~ w~ 38 | z azul a z u w 39 | -------------------------------------------------------------------------------- /profiles/pt/sentences.ini: -------------------------------------------------------------------------------- 1 | [ChangeLightState] 2 | light_name = (luz da cozinha | luz do quarto | lâmpada da sala de estar) {name} 3 | light_state = (acenda | apague | ligue | desligue) {state} 4 | [a] 5 | 6 | [GetTime] 7 | que horas são 8 | 9 | [GetWeather] 10 | como está o tempo hoje 11 | como estará o tempo amanhã 12 | 13 | [GetTemperature] 14 | qual é a temperatura externa 15 | 16 | [GetHumidity] 17 | humid_local = (externa | interna) {name} 18 | qual [é] a umidade -------------------------------------------------------------------------------- /profiles/pt/slot_programs/rhasspy/number: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import argparse 3 | import sys 4 | 5 | 6 | def main(): 7 | parser = argparse.ArgumentParser("number") 8 | parser.add_argument("lower", type=int, help="Lower bound") 9 | parser.add_argument("upper", type=int, help="Upper bound (inclusive)") 10 | args, rest_args = parser.parse_known_args() 11 | 12 | lower = args.lower 13 | upper = args.upper 14 | step = 1 15 | 16 | if rest_args: 17 | step = int(rest_args[0]) 18 | 19 | if upper < lower: 20 | lower, upper = upper, lower 21 | 22 | for n in range(lower, upper + 1, step): 23 | print(n) 24 | 25 | 26 | # ----------------------------------------------------------------------------- 27 | 28 | if __name__ == "__main__": 29 | main() 30 | -------------------------------------------------------------------------------- /profiles/pt/slots/rhasspy/days: -------------------------------------------------------------------------------- 1 | segunda 2 | terça 3 | quarta 4 | quinta 5 | sexta 6 | sábado 7 | domingo 8 | -------------------------------------------------------------------------------- /profiles/pt/slots/rhasspy/months: -------------------------------------------------------------------------------- 1 | janeiro 2 | fevereiro 3 | março 4 | abril 5 | maio 6 | junho 7 | julho 8 | agosto 9 | setembro 10 | outubro 11 | novembro 12 | dezembro 13 | -------------------------------------------------------------------------------- /profiles/ru/custom_words.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/profiles/ru/custom_words.txt -------------------------------------------------------------------------------- /profiles/ru/dictionary.txt: -------------------------------------------------------------------------------- 1 | в v 2 | включить v k lj u0 ch i1 tj 3 | выключить v y1 k lj u0 ch i0 tj 4 | гаража g a0 r a0 zh a1 5 | гараже g a0 r a0 zh e1 6 | гостиной g o0 s tj i1 n o0 j 7 | дверь d vj e1 rj 8 | жарко zh a1 r k o0 9 | закрыта z a0 k r y1 t a0 10 | как k a1 k 11 | какая k a1 k a0 j a0 12 | какая(2) k a0 k a1 j a0 13 | который k o0 t o1 r y0 j 14 | лампу l a1 m p u0 15 | ок o1 k 16 | открыта o0 t k r y1 t a0 17 | свет s vj e1 t 18 | сейчас sj e0 j ch a1 s 19 | сейчас(2) sj i0 ch a1 s 20 | сейчас(3) sch a1 s 21 | температура tj e0 m pj e0 r a0 t u1 r a0 22 | холодно h o1 l o0 d n o0 23 | хриплый h rj i1 p l y0 j 24 | час ch a1 s 25 | -------------------------------------------------------------------------------- /profiles/ru/espeak_phonemes.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/profiles/ru/espeak_phonemes.txt -------------------------------------------------------------------------------- /profiles/ru/phoneme_examples.txt: -------------------------------------------------------------------------------- 1 | a0 а a0 2 | a1 я j a1 3 | b бы b y1 4 | bj себя sj e0 bj a1 5 | ch чем ch o1 m 6 | d да d a1 7 | dj где g dj e1 8 | e0 её j e0 j o1 9 | e1 не nj e1 10 | g его j e0 g o1 11 | i0 и i0 12 | i1 из i1 z 13 | j ему j e0 m u1 14 | k к k 15 | l был b y1 l 16 | lj ли lj i1 17 | m мы m y1 18 | mj меня mj e0 nj a1 19 | n на n a1 20 | nj ни nj i1 21 | o0 о o0 22 | o1 во v o1 23 | p по p o1 24 | pj теперь tj e0 pj e1 rj 25 | r раз r a1 z 26 | rj время v rj e1 mj a0 27 | s с s 28 | sch ещё j e0 sch o1 29 | sh что sh t o1 30 | sj все v sj o1 31 | t от o1 t 32 | tj быть b y1 tj 33 | u0 у u0 34 | u1 ну n u1 35 | v в v 36 | y0 была b y0 l a1 37 | y1 вы v y1 38 | z за z a1 39 | zh же zh e0 40 | -------------------------------------------------------------------------------- /profiles/ru/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "language": "ru", 3 | "name": "ru", 4 | "locale": "ru_RU", 5 | "speech_to_text": { 6 | "system": "pocketsphinx", 7 | "dictionary_casing": "lower" 8 | }, 9 | "intent": { 10 | "wavenet": { 11 | "language_code": "ru-RU" 12 | }, 13 | "flair": { 14 | "compatible": false 15 | } 16 | }, 17 | "download": { 18 | "conditions": { 19 | "speech_to_text.system": { 20 | "pocketsphinx": { 21 | "acoustic_model": "cmusphinx-ru-5.2.tar.gz:cmusphinx-ru-5.2!cmusphinx-ru-5.2/ru.dic!cmusphinx-ru-5.2/ru.lm", 22 | "base_dictionary.txt": "ru-g2p.tar.gz:base_dictionary.txt", 23 | "g2p.fst": "ru-g2p.tar.gz:g2p.fst" 24 | } 25 | }, 26 | 27 | "speech_to_text.pocketsphinx.mix_weight": { 28 | ">0": { 29 | "base_language_model.txt": "cmusphinx-ru-5.2.tar.gz:cmusphinx-ru-5.2/ru.lm" 30 | } 31 | } 32 | }, 33 | 34 | "files": { 35 | "cmusphinx-ru-5.2.tar.gz": { 36 | "url": "https://github.com/synesthesiam/rhasspy-profiles/releases/download/v1.0-ru/cmusphinx-ru-5.2.tar.gz" 37 | }, 38 | "ru-g2p.tar.gz": { 39 | "url": "https://github.com/synesthesiam/rhasspy-profiles/releases/download/v1.0-ru/ru-g2p.tar.gz" 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /profiles/ru/sentences.ini: -------------------------------------------------------------------------------- 1 | [GetTime] 2 | который сейчас час 3 | 4 | [GetTemperature] 5 | Какая температура 6 | как (жарко | холодно) 7 | 8 | [GetGarageState] 9 | дверь гаража (открыта | закрыта) 10 | 11 | [ChangeLightState] 12 | light_name = (лампу в гостиной | свет в гараже) {name} 13 | light_state = (включить | выключить) {state} 14 | 15 | -------------------------------------------------------------------------------- /profiles/ru/slot_programs/rhasspy/number: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import argparse 3 | import sys 4 | 5 | 6 | def main(): 7 | parser = argparse.ArgumentParser("number") 8 | parser.add_argument("lower", type=int, help="Lower bound") 9 | parser.add_argument("upper", type=int, help="Upper bound (inclusive)") 10 | args, rest_args = parser.parse_known_args() 11 | 12 | lower = args.lower 13 | upper = args.upper 14 | step = 1 15 | 16 | if rest_args: 17 | step = int(rest_args[0]) 18 | 19 | if upper < lower: 20 | lower, upper = upper, lower 21 | 22 | for n in range(lower, upper + 1, step): 23 | print(n) 24 | 25 | 26 | # ----------------------------------------------------------------------------- 27 | 28 | if __name__ == "__main__": 29 | main() 30 | -------------------------------------------------------------------------------- /profiles/ru/slots/rhasspy/days: -------------------------------------------------------------------------------- 1 | Понедельник 2 | Вторник 3 | Среда 4 | Четверг 5 | Пятница 6 | Суббота 7 | Воскресенье 8 | -------------------------------------------------------------------------------- /profiles/ru/slots/rhasspy/months: -------------------------------------------------------------------------------- 1 | января 2 | февраля 3 | марта 4 | апреля 5 | мая 6 | июня 7 | июля 8 | августа 9 | сентября 10 | октября 11 | ноября 12 | декабря 13 | -------------------------------------------------------------------------------- /profiles/ru/stop_words.txt: -------------------------------------------------------------------------------- 1 | и 2 | в 3 | во 4 | не 5 | что 6 | он 7 | на 8 | я 9 | с 10 | со 11 | как 12 | а 13 | то 14 | все 15 | она 16 | так 17 | его 18 | но 19 | да 20 | ты 21 | к 22 | у 23 | же 24 | вы 25 | за 26 | бы 27 | по 28 | только 29 | ее 30 | мне 31 | было 32 | вот 33 | от 34 | меня 35 | еще 36 | нет 37 | о 38 | из 39 | ему 40 | теперь 41 | когда 42 | даже 43 | ну 44 | вдруг 45 | ли 46 | если 47 | уже 48 | или 49 | ни 50 | быть 51 | был 52 | него 53 | до 54 | вас 55 | нибудь 56 | опять 57 | уж 58 | вам 59 | ведь 60 | там 61 | потом 62 | себя 63 | ничего 64 | ей 65 | может 66 | они 67 | тут 68 | где 69 | есть 70 | надо 71 | ней 72 | для 73 | мы 74 | тебя 75 | их 76 | чем 77 | была 78 | сам 79 | чтоб 80 | без 81 | будто 82 | чего 83 | раз 84 | тоже 85 | себе 86 | под 87 | будет 88 | ж 89 | тогда 90 | кто 91 | этот 92 | того 93 | потому 94 | этого 95 | какой 96 | совсем 97 | ним 98 | здесь 99 | этом 100 | один 101 | почти 102 | мой 103 | тем 104 | чтобы 105 | нее 106 | сейчас 107 | были 108 | куда 109 | зачем 110 | всех 111 | никогда 112 | можно 113 | при 114 | наконец 115 | два 116 | об 117 | другой 118 | хоть 119 | после 120 | над 121 | больше 122 | тот 123 | через 124 | эти 125 | нас 126 | про 127 | всего 128 | них 129 | какая 130 | много 131 | разве 132 | три 133 | эту 134 | моя 135 | впрочем 136 | хорошо 137 | свою 138 | этой 139 | перед 140 | иногда 141 | лучше 142 | чуть 143 | том 144 | нельзя 145 | такой 146 | им 147 | более 148 | всегда 149 | конечно 150 | всю 151 | между 152 | -------------------------------------------------------------------------------- /profiles/sv/custom_words.txt: -------------------------------------------------------------------------------- 1 | garage g a r abl j el 2 | kalt k a l t 3 | släck s l ael k 4 | sovrumslampa s oc v r uxl m s l a m p abl 5 | stäng s t ae ng 6 | stängd s t ae ng d 7 | temperaturen t ae m p e r abl t uxl r el n 8 | tänd t ael n d 9 | varmt v a r m t 10 | vardagsrumslampan v abl dr a g s r uxl m s l a m p abl n 11 | garagelampan g a r a j el l a m p abl n 12 | -------------------------------------------------------------------------------- /profiles/sv/espeak_phonemes.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/profiles/sv/espeak_phonemes.txt -------------------------------------------------------------------------------- /profiles/sv/phoneme_examples.txt: -------------------------------------------------------------------------------- 1 | C sina C n abl 2 | S människor m ale n S u r 3 | a alla a l abl 4 | abl bara b abl r abl 5 | ae helt h ae l t 6 | ael även ael v el n 7 | ale därför d ale r f ole r 8 | b barn b abl nr 9 | d andra a n d r abl 10 | e barnen b abl nr e n 11 | el inte il n t el 12 | f från f r ol n 13 | g någon n ol g ol n 14 | i vill v i l 15 | il blir b l il r 16 | j genom j el n ol m 17 | k också oc k s ol 18 | l allt a l t 19 | m inom il n ol m 20 | n utan uxl t abl n 21 | ng många m oc ng abl 22 | o något n o t 23 | oc kommer k oc m el r 24 | oel över oel v el r 25 | ol stor s t ol r 26 | ole första f ole sr t abl 27 | ox under ox n d el r 28 | p procent p r ol s ae n t 29 | r vara v abl r abl 30 | s dessa d ae s abl 31 | t till t il l 32 | ue mycket m ue k el t 33 | v Även v el n 34 | -------------------------------------------------------------------------------- /profiles/sv/sentences.ini: -------------------------------------------------------------------------------- 1 | [GetTime] 2 | (vad är|hur mycket är) klockan 3 | (läs upp|berätta) tiden för mig 4 | 5 | [GetTemperature] 6 | vad är temperaturen 7 | hur (varmt | kalt) är det 8 | 9 | [GetGarageState] 10 | är garage dörren (öppen | stängd) 11 | 12 | [ChangeLightState] 13 | light_name = (vardagsrumslampan | garagelampan) {name} | 14 | 15 | (på){state:on} (starta | tänd) 16 | (av){state:off} (stäng av | släck) 17 | 18 | [ChangeLightColor] 19 | light_name = (sovrumslampa) {name} 20 | color = (röd | grön | blå) {color} 21 | 22 | (ändra färg|sätt färgen) på [till] 23 | -------------------------------------------------------------------------------- /profiles/sv/slot_programs/rhasspy/number: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import argparse 3 | import sys 4 | 5 | 6 | def main(): 7 | parser = argparse.ArgumentParser("number") 8 | parser.add_argument("lower", type=int, help="Lower bound") 9 | parser.add_argument("upper", type=int, help="Upper bound (inclusive)") 10 | args, rest_args = parser.parse_known_args() 11 | 12 | lower = args.lower 13 | upper = args.upper 14 | step = 1 15 | 16 | if rest_args: 17 | step = int(rest_args[0]) 18 | 19 | if upper < lower: 20 | lower, upper = upper, lower 21 | 22 | for n in range(lower, upper + 1, step): 23 | print(n) 24 | 25 | 26 | # ----------------------------------------------------------------------------- 27 | 28 | if __name__ == "__main__": 29 | main() 30 | -------------------------------------------------------------------------------- /profiles/sv/slots/rhasspy/days: -------------------------------------------------------------------------------- 1 | måndag 2 | tisdag 3 | onsdag 4 | torsdag 5 | fredag 6 | lördag 7 | söndag 8 | -------------------------------------------------------------------------------- /profiles/sv/slots/rhasspy/months: -------------------------------------------------------------------------------- 1 | januari 2 | februari 3 | mars 4 | april 5 | maj 6 | juni 7 | juli 8 | augusti 9 | september 10 | oktober 11 | november 12 | december 13 | -------------------------------------------------------------------------------- /profiles/sv/stop_words.txt: -------------------------------------------------------------------------------- 1 | och 2 | det 3 | att 4 | i 5 | en 6 | jag 7 | hon 8 | som 9 | han 10 | på 11 | den 12 | med 13 | var 14 | sig 15 | för 16 | så 17 | till 18 | är 19 | men 20 | ett 21 | om 22 | hade 23 | de 24 | av 25 | icke 26 | mig 27 | du 28 | henne 29 | då 30 | sin 31 | nu 32 | har 33 | inte 34 | hans 35 | honom 36 | skulle 37 | hennes 38 | där 39 | min 40 | man 41 | ej 42 | vid 43 | kunde 44 | något 45 | från 46 | ut 47 | när 48 | efter 49 | upp 50 | vi 51 | dem 52 | vara 53 | vad 54 | över 55 | än 56 | dig 57 | kan 58 | sina 59 | här 60 | ha 61 | mot 62 | alla 63 | under 64 | någon 65 | eller 66 | allt 67 | mycket 68 | sedan 69 | ju 70 | denna 71 | själv 72 | detta 73 | åt 74 | utan 75 | varit 76 | hur 77 | ingen 78 | mitt 79 | ni 80 | bli 81 | blev 82 | oss 83 | din 84 | dessa 85 | några 86 | deras 87 | blir 88 | mina 89 | samma 90 | vilken 91 | er 92 | sådan 93 | vår 94 | blivit 95 | dess 96 | inom 97 | mellan 98 | sådant 99 | varför 100 | varje 101 | vilka 102 | ditt 103 | vem 104 | vilket 105 | sitta 106 | sådana 107 | vart 108 | dina 109 | vars 110 | vårt 111 | våra 112 | ert 113 | era 114 | vilkas 115 | -------------------------------------------------------------------------------- /profiles/vi/custom_words.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/profiles/vi/custom_words.txt -------------------------------------------------------------------------------- /profiles/vi/dictionary.txt: -------------------------------------------------------------------------------- 1 | khách kh a1_T3 ch 2 | mở m o3_T4 3 | ngủ ng u1_T4 4 | phòng ph o1_T2 ng 5 | trước ch ua2_T3 k 6 | tắm t a2_T3 m 7 | tắt t a2_T3 t 8 | đèn d2 e1_T2 n 9 | -------------------------------------------------------------------------------- /profiles/vi/espeak_phonemes.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/profiles/vi/espeak_phonemes.txt -------------------------------------------------------------------------------- /profiles/vi/language_model.txt: -------------------------------------------------------------------------------- 1 | 2 | \data\ 3 | ngram 1=10 4 | ngram 2=14 5 | ngram 3=16 6 | 7 | \1-grams: 8 | -0.808114 9 | -99 -0.221849 10 | -0.948082 khách -0.301030 11 | -0.948082 mở -0.301030 12 | -1.075065 ngủ 13 | -0.948082 phòng -0.301030 14 | -0.948082 trước -0.301030 15 | -0.948082 tắm -0.301030 16 | -0.948082 tắt -0.301030 17 | -1.075065 đèn 18 | 19 | \2-grams: 20 | -0.572483 mở -0.221849 21 | -0.572483 tắt -0.221849 22 | -0.238239 khách 23 | -0.265950 mở đèn -0.167491 24 | -0.808114 ngủ 25 | -0.651664 phòng khách -0.033858 26 | -0.680415 phòng ngủ -0.033858 27 | -0.651664 phòng tắm -0.033858 28 | -0.238239 trước 29 | -0.238239 tắm 30 | -0.265950 tắt đèn -0.167491 31 | -1.075065 đèn ngủ -0.033858 32 | -0.948082 đèn phòng -0.033858 33 | -0.948082 đèn trước -0.033858 34 | 35 | \3-grams: 36 | -0.139519 mở đèn 37 | -0.139519 tắt đèn 38 | -0.663127 mở đèn ngủ 39 | -1.115573 mở đèn phòng 40 | -0.625921 mở đèn trước 41 | -0.215066 phòng khách 42 | -0.659776 phòng ngủ 43 | -0.215066 phòng tắm 44 | -0.663127 tắt đèn ngủ 45 | -1.115573 tắt đèn phòng 46 | -0.625921 tắt đèn trước 47 | -0.659776 đèn ngủ 48 | -0.635844 đèn phòng khách 49 | -0.661393 đèn phòng ngủ 50 | -0.635844 đèn phòng tắm 51 | -0.215066 đèn trước 52 | 53 | \end\ 54 | -------------------------------------------------------------------------------- /profiles/vi/sentences.ini: -------------------------------------------------------------------------------- 1 | [GetTime] 2 | mấy giờ rồi 3 | 4 | [ChangeLightState] 5 | light_name = (trước | phòng (khách | ngủ | tắm)) {name} 6 | light_state = (mở | tắt) {state} 7 | đèn -------------------------------------------------------------------------------- /profiles/vi/slot_programs/rhasspy/number: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import argparse 3 | import sys 4 | 5 | 6 | def main(): 7 | parser = argparse.ArgumentParser("number") 8 | parser.add_argument("lower", type=int, help="Lower bound") 9 | parser.add_argument("upper", type=int, help="Upper bound (inclusive)") 10 | args, rest_args = parser.parse_known_args() 11 | 12 | lower = args.lower 13 | upper = args.upper 14 | step = 1 15 | 16 | if rest_args: 17 | step = int(rest_args[0]) 18 | 19 | if upper < lower: 20 | lower, upper = upper, lower 21 | 22 | for n in range(lower, upper + 1, step): 23 | print(n) 24 | 25 | 26 | # ----------------------------------------------------------------------------- 27 | 28 | if __name__ == "__main__": 29 | main() 30 | -------------------------------------------------------------------------------- /profiles/vi/slots/rhasspy/days: -------------------------------------------------------------------------------- 1 | Thứ hai 2 | Thứ ba 3 | Thứ tư 4 | Thứ năm 5 | Thứ sáu 6 | Thứ bảy 7 | Chủ nhật 8 | -------------------------------------------------------------------------------- /profiles/vi/slots/rhasspy/months: -------------------------------------------------------------------------------- 1 | Tháng 1 2 | Tháng 2 3 | Tháng 3 4 | Tháng 4 5 | Tháng 5 6 | Tháng 6 7 | Tháng 7 8 | Tháng 8 9 | Tháng 9 10 | Tháng 10 11 | Tháng 11 12 | Tháng 12 13 | -------------------------------------------------------------------------------- /profiles/zh/custom_words.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/profiles/zh/custom_words.txt -------------------------------------------------------------------------------- /profiles/zh/espeak_phonemes.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/profiles/zh/espeak_phonemes.txt -------------------------------------------------------------------------------- /profiles/zh/phoneme_examples.txt: -------------------------------------------------------------------------------- 1 | a1 阿拉伯人 aa a1 l a1 b o2 r en2 2 | a4 意大利人 ii i4 d a4 l i4 r en2 3 | aa 印第安人 ii in4 d i4 aa an1 r en2 4 | ai4 俄亥俄州 ee e2 h ai4 ee e2 zh ou1 5 | an1 西班牙人 x i1 b an1 ii ia2 r en2 6 | ee 土耳其人 t u3 ee er3 q i2 r en2 7 | -------------------------------------------------------------------------------- /profiles/zh/profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "zh", 3 | "language": "zh", 4 | "locale": "zh_CN", 5 | "speech_to_text": { 6 | "g2p_casing": "n/a", 7 | "dictionary_casing": "n/a" 8 | }, 9 | "speech_to_text": { 10 | "system": "pocketsphinx" 11 | }, 12 | "intent": { 13 | "wavenet": { 14 | "language_code": "zh-TW" 15 | }, 16 | "flair": { 17 | "compatible": false 18 | } 19 | }, 20 | "download": { 21 | "conditions": { 22 | "speech_to_text.system": { 23 | "pocketsphinx": { 24 | "acoustic_model": "cmusphinx-zh-cn-5.2.tar.gz:cmusphinx-zh-cn-5.2/zh_cn.cd_cont_5000", 25 | "base_dictionary.txt": "cmusphinx-zh-cn-5.2.tar.gz:cmusphinx-zh-cn-5.2/zh_cn.dic", 26 | "g2p.fst": "zh-g2p.tar.gz:g2p.fst" 27 | } 28 | }, 29 | 30 | "speech_to_text.pocketsphinx.mix_weight": { 31 | ">0": { 32 | "base_language_model.txt": "cmusphinx-zh-cn-5.2.tar.gz:cmusphinx-zh-cn-5.2/zh_cn.lm" 33 | } 34 | } 35 | }, 36 | 37 | "files": { 38 | "cmusphinx-zh-cn-5.2.tar.gz": { 39 | "url": "https://github.com/synesthesiam/rhasspy-profiles/releases/download/v1.0-zh/cmusphinx-zh-cn-5.2.tar.gz" 40 | }, 41 | "zh-g2p.tar.gz": { 42 | "url": "https://github.com/synesthesiam/rhasspy-profiles/releases/download/v1.0-zh/zh-g2p.tar.gz" 43 | } 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /profiles/zh/sentences.ini: -------------------------------------------------------------------------------- 1 | [ChangeLightState] 2 | (打開 | 關掉){state}客廳的燈 -------------------------------------------------------------------------------- /profiles/zh/slot_programs/rhasspy/number: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import argparse 3 | import sys 4 | 5 | 6 | def main(): 7 | parser = argparse.ArgumentParser("number") 8 | parser.add_argument("lower", type=int, help="Lower bound") 9 | parser.add_argument("upper", type=int, help="Upper bound (inclusive)") 10 | args, rest_args = parser.parse_known_args() 11 | 12 | lower = args.lower 13 | upper = args.upper 14 | step = 1 15 | 16 | if rest_args: 17 | step = int(rest_args[0]) 18 | 19 | if upper < lower: 20 | lower, upper = upper, lower 21 | 22 | for n in range(lower, upper + 1, step): 23 | print(n) 24 | 25 | 26 | # ----------------------------------------------------------------------------- 27 | 28 | if __name__ == "__main__": 29 | main() 30 | -------------------------------------------------------------------------------- /profiles/zh/slots/rhasspy/days: -------------------------------------------------------------------------------- 1 | 星期一 2 | 星期二 3 | 星期三 4 | 星期四 5 | 星期五 6 | 星期六 7 | 星期日 8 | -------------------------------------------------------------------------------- /profiles/zh/slots/rhasspy/months: -------------------------------------------------------------------------------- 1 | 一月 2 | 二月 3 | 三月 4 | 四月 5 | 五月 6 | 六月 7 | 七月 8 | 八月 9 | 九月 10 | 十月 11 | 十一月 12 | 十二月 13 | -------------------------------------------------------------------------------- /profiles/zh/stop_words.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/profiles/zh/stop_words.txt -------------------------------------------------------------------------------- /public/css/fa-brands.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.0.13 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face { 6 | font-family: 'Font Awesome 5 Brands'; 7 | font-style: normal; 8 | font-weight: normal; 9 | src: url("../webfonts/fa-brands-400.eot"); 10 | src: url("../webfonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.woff") format("woff"), url("../webfonts/fa-brands-400.ttf") format("truetype"), url("../webfonts/fa-brands-400.svg#fontawesome") format("svg"); } 11 | 12 | .fab { 13 | font-family: 'Font Awesome 5 Brands'; } 14 | -------------------------------------------------------------------------------- /public/css/fa-brands.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.0.13 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face{font-family:Font Awesome\ 5 Brands;font-style:normal;font-weight:400;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:Font Awesome\ 5 Brands} -------------------------------------------------------------------------------- /public/css/fa-regular.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.0.13 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face { 6 | font-family: 'Font Awesome 5 Free'; 7 | font-style: normal; 8 | font-weight: 400; 9 | src: url("../webfonts/fa-regular-400.eot"); 10 | src: url("../webfonts/fa-regular-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.woff") format("woff"), url("../webfonts/fa-regular-400.ttf") format("truetype"), url("../webfonts/fa-regular-400.svg#fontawesome") format("svg"); } 11 | 12 | .far { 13 | font-family: 'Font Awesome 5 Free'; 14 | font-weight: 400; } 15 | -------------------------------------------------------------------------------- /public/css/fa-regular.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.0.13 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:400;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-family:Font Awesome\ 5 Free;font-weight:400} -------------------------------------------------------------------------------- /public/css/fa-solid.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.0.13 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face { 6 | font-family: 'Font Awesome 5 Free'; 7 | font-style: normal; 8 | font-weight: 900; 9 | src: url("../webfonts/fa-solid-900.eot"); 10 | src: url("../webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.woff") format("woff"), url("../webfonts/fa-solid-900.ttf") format("truetype"), url("../webfonts/fa-solid-900.svg#fontawesome") format("svg"); } 11 | 12 | .fa, 13 | .fas { 14 | font-family: 'Font Awesome 5 Free'; 15 | font-weight: 900; } 16 | -------------------------------------------------------------------------------- /public/css/fa-solid.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.0.13 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:900;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:Font Awesome\ 5 Free;font-weight:900} -------------------------------------------------------------------------------- /public/css/jquery.jsonview.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | .jsonview { 3 | font-family: monospace; 4 | font-size: 1.1em; 5 | white-space: pre-wrap; } 6 | .jsonview .prop { 7 | font-weight: bold; 8 | text-decoration: none; 9 | color: #000; } 10 | .jsonview .null { 11 | color: red; } 12 | .jsonview .undefined { 13 | color: red; } 14 | .jsonview .bool { 15 | color: blue; } 16 | .jsonview .num { 17 | color: blue; } 18 | .jsonview .string { 19 | color: green; 20 | white-space: pre-wrap; } 21 | .jsonview .string.multiline { 22 | display: inline-block; 23 | vertical-align: text-top; } 24 | .jsonview .collapser { 25 | position: absolute; 26 | left: -1em; 27 | cursor: pointer; } 28 | .jsonview .collapsible { 29 | transition: height 1.2s; 30 | transition: width 1.2s; } 31 | .jsonview .collapsible.collapsed { 32 | height: .8em; 33 | width: 1em; 34 | display: inline-block; 35 | overflow: hidden; 36 | margin: 0; } 37 | .jsonview .collapsible.collapsed:before { 38 | content: "…"; 39 | width: 1em; 40 | margin-left: .2em; } 41 | .jsonview .collapser.collapsed { 42 | transform: rotate(0deg); } 43 | .jsonview .q { 44 | display: inline-block; 45 | width: 0px; 46 | color: transparent; } 47 | .jsonview li { 48 | position: relative; } 49 | .jsonview ul { 50 | list-style: none; 51 | margin: 0 0 0 2em; 52 | padding: 0; } 53 | .jsonview h1 { 54 | font-size: 1.2em; } 55 | 56 | /*# sourceMappingURL=jquery.jsonview.css.map */ 57 | -------------------------------------------------------------------------------- /public/css/jquery.jsonview.min.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.jsonview{font-family:monospace;font-size:1.1em;white-space:pre-wrap}.jsonview .prop{font-weight:700;text-decoration:none;color:#000}.jsonview .null,.jsonview .undefined{color:red}.jsonview .bool,.jsonview .num{color:#00f}.jsonview .string{color:green;white-space:pre-wrap}.jsonview .string.multiline{display:inline-block;vertical-align:text-top}.jsonview .collapser{position:absolute;left:-1em;cursor:pointer}.jsonview .collapsible{transition:height 1.2s;transition:width 1.2s}.jsonview .collapsible.collapsed{height:.8em;width:1em;display:inline-block;overflow:hidden;margin:0}.jsonview .collapsible.collapsed:before{content:"…";width:1em;margin-left:.2em}.jsonview .collapser.collapsed{transform:rotate(0)}.jsonview .q{display:inline-block;width:0;color:transparent}.jsonview li{position:relative}.jsonview ul{list-style:none;margin:0 0 0 2em;padding:0}.jsonview h1{font-size:1.2em} -------------------------------------------------------------------------------- /public/css/main.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 4rem; 3 | } 4 | 5 | .main-container { 6 | padding: 1rem; 7 | } 8 | 9 | .main-alert { 10 | position: fixed; 11 | bottom: 0; 12 | width: 100%; 13 | z-index: 9999; 14 | } 15 | 16 | #logo { 17 | border-color: red; 18 | border-width: 0; 19 | } 20 | 21 | .response { 22 | text-align: center; 23 | } 24 | 25 | .tab-pane { 26 | padding-top: 2rem; 27 | padding-left: 0.5rem; 28 | } 29 | 30 | .spinner { 31 | -webkit-animation:spin 4s linear infinite; 32 | -moz-animation:spin 4s linear infinite; 33 | animation:spin 4s linear infinite; 34 | } 35 | 36 | div.card-header .fas { 37 | padding-right: 8px; 38 | } 39 | 40 | @-moz-keyframes spin { 100% { -moz-transform: rotate(360deg); } } 41 | @-webkit-keyframes spin { 100% { -webkit-transform: rotate(360deg); } } 42 | @keyframes spin { 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } 43 | -------------------------------------------------------------------------------- /public/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/public/img/favicon.png -------------------------------------------------------------------------------- /public/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/public/img/logo.png -------------------------------------------------------------------------------- /public/img/microphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/public/img/microphone.png -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | Rhasspy Voice Assistant 15 | 16 | 17 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /public/js/vue-axios.es5.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; 4 | 5 | (function () { 6 | 7 | /** 8 | * Install plugin 9 | * @param Vue 10 | * @param axios 11 | */ 12 | 13 | function plugin(Vue, axios) { 14 | 15 | if (plugin.installed) { 16 | return; 17 | } 18 | plugin.installed = true; 19 | 20 | if (!axios) { 21 | console.error('You have to install axios'); 22 | return; 23 | } 24 | 25 | Vue.axios = axios; 26 | 27 | Object.defineProperties(Vue.prototype, { 28 | 29 | axios: { 30 | get: function get() { 31 | return axios; 32 | } 33 | }, 34 | 35 | $http: { 36 | get: function get() { 37 | return axios; 38 | } 39 | } 40 | 41 | }); 42 | } 43 | 44 | if ((typeof exports === "undefined" ? "undefined" : _typeof(exports)) == "object") { 45 | module.exports = plugin; 46 | } else if (typeof define == "function" && define.amd) { 47 | define([], function () { 48 | return plugin; 49 | }); 50 | } else if (window.Vue && window.axios) { 51 | Vue.use(plugin, window.axios); 52 | } 53 | })(); -------------------------------------------------------------------------------- /public/js/vue-axios.min.js: -------------------------------------------------------------------------------- 1 | "use strict";var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o};!function(){function o(e,t){if(!o.installed){if(o.installed=!0,!t)return void console.error("You have to install axios");e.axios=t,Object.defineProperties(e.prototype,{axios:{get:function(){return t}},$http:{get:function(){return t}}})}}"object"==("undefined"==typeof exports?"undefined":_typeof(exports))?module.exports=o:"function"==typeof define&&define.amd?define([],function(){return o}):window.Vue&&window.axios&&Vue.use(o,window.axios)}(); -------------------------------------------------------------------------------- /public/webfonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/public/webfonts/fa-brands-400.eot -------------------------------------------------------------------------------- /public/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/public/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /public/webfonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/public/webfonts/fa-brands-400.woff -------------------------------------------------------------------------------- /public/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/public/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /public/webfonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/public/webfonts/fa-regular-400.eot -------------------------------------------------------------------------------- /public/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/public/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /public/webfonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/public/webfonts/fa-regular-400.woff -------------------------------------------------------------------------------- /public/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/public/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /public/webfonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/public/webfonts/fa-solid-900.eot -------------------------------------------------------------------------------- /public/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/public/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /public/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/public/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /public/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/public/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /pylintrc: -------------------------------------------------------------------------------- 1 | [MESSAGES CONTROL] 2 | disable= 3 | format, 4 | abstract-class-little-used, 5 | abstract-method, 6 | cyclic-import, 7 | duplicate-code, 8 | global-statement, 9 | import-outside-toplevel, 10 | inconsistent-return-statements, 11 | locally-disabled, 12 | not-context-manager, 13 | redefined-variable-type, 14 | too-few-public-methods, 15 | too-many-arguments, 16 | too-many-branches, 17 | too-many-instance-attributes, 18 | too-many-lines, 19 | too-many-locals, 20 | too-many-public-methods, 21 | too-many-return-statements, 22 | too-many-statements, 23 | too-many-boolean-expressions, 24 | unnecessary-pass, 25 | unused-argument, 26 | invalid-name, 27 | broad-except, 28 | no-self-use, 29 | c-extension-no-member, 30 | too-many-nested-blocks 31 | 32 | [FORMAT] 33 | expected-line-ending-format=LF -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | adapt-parser==0.3.4 2 | aiohttp==3.6.2 3 | doit==0.31.1 4 | fuzzywuzzy[speedup]==0.17.0 5 | google-cloud-speech==1.3.1 6 | google-cloud-texttospeech==0.5.0 7 | html5lib==1.0.1 8 | json5==0.7.0 9 | multidict==4.6.1 10 | networkx>=2.0 11 | num2words==0.5.10 12 | openfst==1.6.9 13 | paho-mqtt==1.5.0 14 | precise-runner==0.3.1 15 | PyAudio==0.2.11 16 | pydash==4.7.6 17 | quart==0.6.15 18 | quart-cors==0.1.3 19 | requests==2.22.0 20 | rhasspy-nlu==0.1.6 21 | swagger-ui-py==0.1.7 22 | webrtcvad==2.0.10 23 | -------------------------------------------------------------------------------- /requirements_all.txt: -------------------------------------------------------------------------------- 1 | adapt-parser==0.3.4 2 | aiohttp==3.6.2 3 | doit==0.31.1 4 | fuzzywuzzy[speedup]==0.17.0 5 | google-cloud-texttospeech==0.5.0 6 | html5lib==1.0.1 7 | json5==0.8.5 8 | multidict==4.6.1 9 | networkx>=2.0 10 | num2words==0.5.10 11 | openfst==1.6.9 12 | paho-mqtt==1.5.0 13 | PyAudio==0.2.11 14 | pydash==4.7.6 15 | quart==0.6.15 16 | quart-cors==0.1.3 17 | requests==2.22.0 18 | rhasspy-nlu==0.1.4.1 19 | swagger-ui-py==0.1.7 20 | webrtcvad==2.0.10 21 | 22 | flake8==3.7.9 23 | pylint==2.4.4 24 | pyinstaller==3.5 25 | mypy==0.700 26 | mkdocs==1.0.4 27 | -------------------------------------------------------------------------------- /requirements_min.txt: -------------------------------------------------------------------------------- 1 | aiohttp==3.6.2 2 | doit==0.31.1 3 | fuzzywuzzy[speedup]==0.17.0 4 | html5lib==1.0.1 5 | multidict==4.6.1 6 | networkx>=2.0 7 | num2words==0.5.10 8 | openfst==1.6.9 9 | paho-mqtt==1.5.0 10 | PyAudio==0.2.11 11 | pydash==4.7.6 12 | quart==0.6.15 13 | quart-cors==0.1.3 14 | requests==2.22.0 15 | rhasspy-nlu==0.1.4 16 | swagger-ui-py==0.1.7 17 | webrtcvad==2.0.10 18 | -------------------------------------------------------------------------------- /rhasspy/__main__.py: -------------------------------------------------------------------------------- 1 | """Run Rhasspy command-line""" 2 | import asyncio 3 | 4 | from rhasspy import main 5 | 6 | loop = asyncio.get_event_loop() 7 | try: 8 | loop.run_until_complete(main()) 9 | finally: 10 | loop.close() 11 | -------------------------------------------------------------------------------- /rhasspy/py.typed: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/rhasspy/py.typed -------------------------------------------------------------------------------- /run-docker-alsa.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | export LC_ALL=C.UTF-8 4 | export LANG=C.UTF-8 5 | 6 | # Directory of *this* script 7 | DIR="$( cd "$( dirname "$0" )" && pwd )" 8 | 9 | if [[ -z "$XDG_CONFIG_HOME" ]]; then 10 | profile_dir="$HOME/.config/rhasspy/profiles" 11 | else 12 | profile_dir="$XDG_CONFIG_HOME/rhasspy/profiles" 13 | fi 14 | 15 | docker run -it -p 12101:12101 \ 16 | --device /dev/snd:/dev/snd \ 17 | -v "${profile_dir}":"${profile_dir}" \ 18 | -v /etc/localtime:/etc/localtime \ 19 | synesthesiam/rhasspy-server:latest \ 20 | --user-profiles "${profile_dir}" \ 21 | "$@" 22 | -------------------------------------------------------------------------------- /run-docker-pulseaudio.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | export LC_ALL=C.UTF-8 4 | export LANG=C.UTF-8 5 | 6 | # Directory of *this* script 7 | DIR="$( cd "$( dirname "$0" )" && pwd )" 8 | 9 | if [[ -z "$XDG_CONFIG_HOME" ]]; then 10 | profile_dir="$HOME/.config/rhasspy/profiles" 11 | else 12 | profile_dir="$XDG_CONFIG_HOME/rhasspy/profiles" 13 | fi 14 | 15 | user_id=$(id -u) 16 | docker run -d -p 12101:12101 \ 17 | --device /dev/snd:/dev/snd \ 18 | -v "${profile_dir}":"${profile_dir}" \ 19 | -v "/run/user/${user_id}/pulse":/run/user/1000/pulse \ 20 | -v "${HOME}/.config/pulse/cookie:"/home/pacat/.config/pulse/cookie \ 21 | -v /etc/localtime:/etc/localtime \ 22 | synesthesiam/rhasspy-server:latest \ 23 | --user-profiles "${profile_dir}" \ 24 | "$@" 25 | -------------------------------------------------------------------------------- /run-tests.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | export LC_ALL=C.UTF-8 4 | export LANG=C.UTF-8 5 | 6 | # Directory of *this* script 7 | this_dir="$( cd "$( dirname "$0" )" && pwd )" 8 | venv="${this_dir}/.venv" 9 | 10 | if [[ ! -d "${venv}" ]]; then 11 | echo "Missing virtual environment at ${venv}" 12 | echo "Did you run create-venv.sh?" 13 | exit 1 14 | fi 15 | 16 | # Force .venv/lib to be used 17 | export LD_LIBRARY_PATH="${venv}/lib:${LD_LIBRARY_PATH}" 18 | 19 | # Use local Kaldi 20 | if [[ -d "${this_dir}/opt/kaldi" ]]; then 21 | export KALDI_PREFIX="${this_dir}/opt" 22 | fi 23 | 24 | # Path to sphinxtrain tools 25 | if [[ -d "/usr/lib/sphinxtrain" ]]; then 26 | export PATH="/usr/lib/sphinxtrain:${PATH}" 27 | fi 28 | 29 | cd "${this_dir}" 30 | source "${venv}/bin/activate" 31 | python3 test.py "$@" 32 | -------------------------------------------------------------------------------- /run-venv.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | 4 | export LC_ALL=C.UTF-8 5 | export LANG=C.UTF-8 6 | 7 | # Directory of *this* script 8 | this_dir="$( cd "$( dirname "$0" )" && pwd )" 9 | venv="${this_dir}/.venv" 10 | 11 | if [[ ! -d "${venv}" ]]; then 12 | echo "Missing virtual environment at ${venv}" 13 | echo "Did you run create-venv.sh?" 14 | exit 1 15 | fi 16 | 17 | cd "${this_dir}" 18 | source "${venv}/bin/activate" 19 | 20 | # Force .venv/lib to be used 21 | export LD_LIBRARY_PATH="${venv}/lib:${LD_LIBRARY_PATH}" 22 | 23 | # Use local Kaldi 24 | if [[ -d "${this_dir}/opt/kaldi" ]]; then 25 | export KALDI_PREFIX="${this_dir}/opt" 26 | fi 27 | 28 | python3 app.py "$@" 29 | -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [flake8] 2 | # To work with Black 3 | max-line-length = 88 4 | # E501: line too long 5 | # W503: Line break occurred before a binary operator 6 | # E203: Whitespace before ':' 7 | # D202 No blank lines allowed after function docstring 8 | # W504 line break after binary operator 9 | # E731 do not assign a lambda expression, use a def 10 | ignore = 11 | E501, 12 | W503, 13 | E203, 14 | D202, 15 | W504, 16 | E731 17 | -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/synesthesiam/rhasspy/0c37c88e61ada292b4cf618e19e28c5860f367ca/src/assets/logo.png -------------------------------------------------------------------------------- /src/components/Problems.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 49 | 50 | 51 | 53 | -------------------------------------------------------------------------------- /src/components/ProfileSettings.vue.rej: -------------------------------------------------------------------------------- 1 | diff a/src/components/ProfileSettings.vue b/src/components/ProfileSettings.vue (rejected hunks) 2 | @@ -103,7 +103,7 @@ 3 | .then(() => { 4 | this.$parent.endAsync() 5 | if (confirm("Settings saved. Restart Rhasspy?")) { 6 | - this.$parent.restart() 7 | + this.$parent.train() 8 | } 9 | }) 10 | .catch(err => this.$parent.error(err)) 11 | -------------------------------------------------------------------------------- /src/components/RhasspyLog.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 37 | 38 | 39 | 41 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App.vue' 3 | import axios from 'axios' 4 | import VueAxios from 'vue-axios' 5 | import VueLodash from 'vue-lodash' 6 | import VueNativeSock from 'vue-native-websocket' 7 | 8 | Vue.use(VueAxios, axios) 9 | Vue.use(VueLodash) 10 | 11 | var wsProtocol = 'ws://' 12 | if (window.location.protocol == "https:") { 13 | wsProtocol = 'wss://' 14 | } 15 | 16 | var wsURL = wsProtocol + window.location.host + '/api/events/log' 17 | Vue.use(VueNativeSock, wsURL, { 18 | reconnection: true 19 | }) 20 | 21 | import TreeView from "vue-json-tree-view" 22 | Vue.use(TreeView) 23 | 24 | Vue.config.productionTip = false 25 | 26 | new Vue({ 27 | render: h => h(App) 28 | }).$mount('#app') 29 | -------------------------------------------------------------------------------- /src/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "requires": true, 3 | "lockfileVersion": 1, 4 | "dependencies": { 5 | "lodash": { 6 | "version": "4.17.11", 7 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", 8 | "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" 9 | }, 10 | "vue": { 11 | "version": "2.5.17", 12 | "resolved": "https://registry.npmjs.org/vue/-/vue-2.5.17.tgz", 13 | "integrity": "sha512-mFbcWoDIJi0w0Za4emyLiW72Jae0yjANHbCVquMKijcavBGypqlF7zHRgMa5k4sesdv7hv2rB4JPdZfR+TPfhQ==" 14 | }, 15 | "vue-json-tree-view": { 16 | "version": "2.1.4", 17 | "resolved": "https://registry.npmjs.org/vue-json-tree-view/-/vue-json-tree-view-2.1.4.tgz", 18 | "integrity": "sha512-Kn+x07oqnps3ojBQOplS1oAJheaO7Y8drNLN2pDnn7VWVMGVljuqrgamFAv1oqTsp/eWlbvtHJc81iSQ2gWSzw==", 19 | "requires": { 20 | "lodash": "^4.17.4", 21 | "vue": "^2.5.16" 22 | } 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/services/Api.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | 3 | export default() => { 4 | var options = {} 5 | if (process.env.VUE_APP_BASE_URL) { 6 | options.baseURL = process.env.VUE_APP_BASE_URL 7 | } 8 | 9 | return axios.create(options) 10 | } 11 | -------------------------------------------------------------------------------- /src/services/LanguageModelService.js: -------------------------------------------------------------------------------- 1 | import Api from '@/services/Api' 2 | 3 | export default { 4 | update_sentences(sentences) { 5 | return Api().post('/api/sentences', sentences, 6 | { headers: { 'Content-Type': 'application/json' } }) 7 | }, 8 | 9 | getSentences() { 10 | return Api().get('/api/sentences', 11 | { headers: { 'Accept': 'application/json' } }) 12 | }, 13 | 14 | update_slots(slots) { 15 | return Api().post('/api/slots', slots, 16 | { params: { 'overwrite_all': 'true' }, 17 | headers: { 'Content-Type': 'application/json' } }) 18 | }, 19 | 20 | getSlots() { 21 | return Api().get('/api/slots') 22 | }, 23 | 24 | train(noCache) { 25 | var params = {} 26 | if (noCache) { 27 | params['nocache'] = 'true' 28 | } 29 | 30 | return new Api().post('/api/train', '', 31 | { params: params }) 32 | }, 33 | 34 | reload() { 35 | return new Api().post('/api/reload', '') 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/services/PronounceService.js: -------------------------------------------------------------------------------- 1 | import Api from '@/services/Api' 2 | 3 | export default { 4 | lookupWord(word) { 5 | return Api().post('/api/lookup', word, 6 | { headers: { 'Content-Type': 'text/plain' } }) 7 | }, 8 | 9 | pronounce(pronounceString, pronounceType) { 10 | return Api().post('/api/pronounce', pronounceString, 11 | { params: { 'type': pronounceType }, 12 | headers: { 'Content-Type': 'text/plain' } }) 13 | }, 14 | 15 | download(pronounceString, pronounceType) { 16 | return Api().post('/api/pronounce', pronounceString, 17 | { params: { 'type': pronounceType, 18 | 'download': true }, 19 | 20 | headers: { 'Content-Type': 'text/plain' }, 21 | responseType: 'arraybuffer' }) 22 | }, 23 | 24 | getPhonemeExamples() { 25 | return Api().get('/api/phonemes') 26 | }, 27 | 28 | getUnknownWords() { 29 | return Api().get('/api/unknown-words') 30 | }, 31 | 32 | updateCustomWords(custom_words) { 33 | return Api().post('/api/custom-words', custom_words, 34 | { headers: { 'Content-Type': 'text/plain' } }) 35 | }, 36 | 37 | getCustomWords() { 38 | return Api().get('/api/custom-words') 39 | }, 40 | 41 | saySentence(sentence) { 42 | return Api().post('/api/text-to-speech', sentence, 43 | { headers: { 'Content-Type': 'text/plain' } }) 44 | }, 45 | } 46 | -------------------------------------------------------------------------------- /src/services/RhasspyService.js: -------------------------------------------------------------------------------- 1 | import Api from '@/services/Api' 2 | 3 | export default { 4 | restart() { 5 | return new Api().post('/api/restart', '') 6 | }, 7 | 8 | getProblems() { 9 | return new Api().get('/api/problems') 10 | }, 11 | 12 | getVersion() { 13 | return new Api().get('/api/version') 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/services/StateService.js: -------------------------------------------------------------------------------- 1 | import Api from '@/services/Api' 2 | 3 | export default { 4 | getActorStates() { 5 | return Api().get('/api/actor_states') 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/services/TranscribeService.js: -------------------------------------------------------------------------------- 1 | import Api from '@/services/Api' 2 | 3 | export default { 4 | transcribeWav(wavData, sendHass) { 5 | var params = {} 6 | if (!sendHass) { 7 | params['nohass'] = true 8 | } 9 | 10 | return Api().post('/api/speech-to-intent', wavData, 11 | { params: params, 12 | headers: { 'Content-Type': 'audio/wav' } }) 13 | }, 14 | 15 | getIntent(sentence, sendHass) { 16 | var params = {} 17 | if (!sendHass) { 18 | params['nohass'] = true 19 | } 20 | 21 | return Api().post('/api/text-to-intent', sentence, 22 | { params: params, 23 | headers: { 'Content-Type': 'text/plain' } }) 24 | }, 25 | 26 | startRecording() { 27 | return Api().post('/api/start-recording', '') 28 | }, 29 | 30 | stopRecording(sendHass) { 31 | var params = {} 32 | if (!sendHass) { 33 | params['nohass'] = true 34 | } 35 | 36 | return Api().post('/api/stop-recording', '', 37 | { params: params }) 38 | }, 39 | 40 | playRecording() { 41 | return Api().post('/api/play-recording', '') 42 | }, 43 | 44 | wakeup() { 45 | return Api().post('/api/listen-for-command') 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /tools/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BUILD_FROM 2 | FROM $BUILD_FROM 3 | 4 | # File Author / Maintainer 5 | MAINTAINER Michael Hansen 6 | 7 | ARG MAKE_THREADS=8 8 | 9 | COPY etc/qemu-arm-static /usr/bin/ 10 | COPY etc/qemu-aarch64-static /usr/bin/ 11 | 12 | COPY download/openfst-1.6.9.tar.gz / 13 | COPY download/opengrm-ngram-1.3.4.tar.gz / 14 | COPY download/phonetisaurus-2019.tar.gz / 15 | 16 | RUN apt-get update && \ 17 | apt-get install -y build-essential python3-dev checkinstall 18 | 19 | RUN cd / && tar -xf openfst-1.6.9.tar.gz && cd openfst-1.6.9/ && \ 20 | ./configure --prefix=/build --enable-far --enable-static=no --enable-bin=no --enable-shared --enable-ngram-fsts && \ 21 | make -j $MAKE_THREADS && \ 22 | make install 23 | 24 | ENV CPPFLAGS=-I/build/include 25 | ENV LDFLAGS=-L/build/lib 26 | 27 | RUN cd / && tar -xf opengrm-ngram-1.3.4.tar.gz && cd opengrm-ngram-1.3.4/ && \ 28 | CXXFLAGS="-I/build/include" LDFLAGS="-L/build/lib" \ 29 | ./configure --prefix=/build && \ 30 | make -j $MAKE_THREADS && \ 31 | make install 32 | 33 | RUN cd / && tar -xf phonetisaurus-2019.tar.gz && cd phonetisaurus/ && \ 34 | ./configure --prefix=/build \ 35 | --with-openfst-includes=/build/include \ 36 | --with-openfst-libs=/build/lib && \ 37 | make -j $MAKE_THREADS && \ 38 | make install 39 | 40 | RUN find /build -name '*.a' -delete 41 | RUN strip --strip-all /build/lib/*.so* -------------------------------------------------------------------------------- /tools/Makefile: -------------------------------------------------------------------------------- 1 | SHELL := bash 2 | .PHONY: docker deb 3 | 4 | BUILD_FROM ?= ubuntu:bionic 5 | BUILD_ARCH ?= amd64 6 | FRIENDLY_ARCH ?= amd64 7 | DOCKER_TAG := rhasspy-tools-build:${FRIENDLY_ARCH} 8 | 9 | # Expecting in download/ 10 | # openfst-1.6.9.tar.gz 11 | # opengrm-ngram-1.3.4.tar.gz 12 | # phonetisaurus-2019.tar.gz 13 | # python-openfst-1.6.9.tar.gz 14 | 15 | all: 16 | docker build -f Dockerfile \ 17 | --build-arg BUILD_FROM=${BUILD_ARCH}/${BUILD_FROM} \ 18 | -t ${DOCKER_TAG} . 19 | mkdir -p dist 20 | docker run -i ${DOCKER_TAG} \ 21 | tar -C /build -czf - . > \ 22 | dist/rhasspy-tools_${FRIENDLY_ARCH}.tar.gz 23 | 24 | test: 25 | rm -rf test-venv 26 | python3 -m venv test-venv 27 | tar -C test-venv -xf dist/rhasspy-tools_${FRIENDLY_ARCH}.tar.gz 28 | source test-venv/bin/activate && \ 29 | pip3 install wheel && \ 30 | pip3 install download/python-openfst-1.6.9.tar.gz && \ 31 | python3 -c 'import pywrapfst' 32 | --------------------------------------------------------------------------------