diff --git a/entrypoint.sh b/entrypoint.sh index c63d2db..5b4b0b2 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,7 +1,7 @@ #!/bin/bash echo "Installing piper for text to voice conversion..." -bash /app/piper/init-piper.sh +bash /app/piper/get-piper.sh echo "Bot starting..." python3 -u /app/main.py \ No newline at end of file diff --git a/main.py b/main.py index edfc88f..e6e72a8 100644 --- a/main.py +++ b/main.py @@ -107,11 +107,11 @@ def generate_settings_markup(chat_id: str) -> InlineKeyboardMarkup: return InlineKeyboardMarkup(inline_keyboard=keyboard) -async def text_to_voice(text: str, language: str = DEFAULT_VOICE_LANGUAGE) -> BytesIO: +async def text_to_voice(text: str, language: str = None) -> BytesIO: binary_path = "./piper/piper" if language is None: - language = detect(text[0:80]) + language = detect(text[0:100]) model_path = f"./piper/voices/{language}.onnx" @@ -441,4 +441,4 @@ if __name__ == "__main__": settings_callback, lambda c: c.data.startswith("setting_") ) - executor.start_polling(dp, skip_updates=True) + executor.start_polling(dp, skip_updates=True, fast=True) diff --git a/piper/get-piper.sh b/piper/get-piper.sh new file mode 100755 index 0000000..ca2e118 --- /dev/null +++ b/piper/get-piper.sh @@ -0,0 +1,73 @@ +#!/bin/bash + +source .env + +if [ "$ENABLE_TTS" = 1 ]; then + echo "Installing piper for text to voice conversion..." + echo "Downloading piper v0.0.2.." + wget -q https://github.com/rhasspy/piper/releases/download/v0.0.2/piper_amd64.tar.gz && \ + echo "Extracting piper" && \ + tar -xf piper_amd64.tar.gz && \ + rm piper_amd64.tar.gz && \ + chmod -R 777 ./piper/ && \ + mkdir piper/voices + + # Download voices for all or selected languages + if [[ "$VOICE_LANGUAGE_LIST" == "*" ]]; then + langs=( "en" "es" "fr" "it" "pt" "ca" "de" "nl" "no" ) + else + IFS=',' read -r -a langs <<< "$VOICE_LANGUAGE_LIST" + fi + + echo "Downloading tts voices from VOICE_LANGUAGE_LIST..." + echo "This can take a while..." + + for lang in "${langs[@]}"; do + case $lang in + "en" ) + voice_file="voice-en-us-ryan-high.tar.gz" + ;; + "es" ) + voice_file="voice-es-mls_10246-low.tar.gz" + ;; + "fr" ) + voice_file="voice-fr-siwis-medium.tar.gz" + ;; + "it" ) + voice_file="voice-it-riccardo_fasol-x-low.tar.gz" + ;; + "pt" ) + voice_file="voice-pt-br-edresson-low.tar.gz" + ;; + "ca" ) + voice_file="voice-ca-upc_ona-x-low.tar.gz" + ;; + "de" ) + voice_file="voice-de-thorsten-low.tar.gz" + ;; + "nl" ) + voice_file="voice-nl-rdh-medium.tar.gz" + ;; + "no" ) + voice_file="voice-no-talesyntese-medium.tar.gz" + ;; + * ) + echo "Ignoring unrecognized language code: $lang" + continue + ;; + esac + + echo "Downloading $lang voice..." + wget -q https://github.com/rhasspy/piper/releases/download/v0.0.2/$voice_file && \ + tar -xf $voice_file && \ + rm $voice_file && \ + mv $lang-*.onnx piper/voices/$lang.onnx && \ + mv $lang-*.onnx.json piper/voices/$lang.onnx.json + + echo "Done" + done + + echo "Done. Piper installed!" +else + echo "TTS Disabled. No work to do..." +fi diff --git a/piper/init-piper.sh b/piper/init-piper.sh deleted file mode 100755 index 0914e80..0000000 --- a/piper/init-piper.sh +++ /dev/null @@ -1,81 +0,0 @@ -#!/bin/bash - -source .env -if [ "$ENABLE_TTS" = 1 ]; then - echo "Installing piper for text to voice conversion..." - echo "Downloading piper v0.0.2.." - wget -q https://github.com/rhasspy/piper/releases/download/v0.0.2/piper_amd64.tar.gz - echo "Extracting piper" - tar -xf piper_amd64.tar.gz - - echo "Installing piper" - rm -rf piper_amd64 - rm piper_amd64.tar.gz - chmod -R 777 ./piper/ - mkdir piper/voices - - echo "Downloading tts voices from VOICE_LANGUAGE_LIST..." - echo "This can take a while..." - # Check if "en" is in $VOICE_LANGUAGE_LIST and download the english voice from the repo - for lang in $(echo $VOICE_LANGUAGE_LIST | tr "," " "); do - if [ "$lang" = "en" ] ; then - echo "Downloading english voice..." - wget -q https://github.com/rhasspy/piper/releases/download/v0.0.2/voice-en-us-ryan-high.tar.gz - tar -xf voice-en-us-ryan-high.tar.gz - mv en-us-ryan-high.onnx en.onnx - mv en-us-ryan-high.onnx.json en.onnx.json - rm -rf voice-en-us-ryan-high.tar.gz - echo "Done" - fi - if [ "$lang" = "es" ] ; then - echo "Downloading spanish voice..." - wget -q https://github.com/rhasspy/piper/releases/download/v0.0.2/voice-es-mls_10246-low.tar.gz - tar -xf voice-es-mls_10246-low.tar.gz - mv es-mls_10246-low.onnx es.onnx - mv es-mls_10246-low.onnx.json es.onnx.json - rm -rf voice-es-mls_10246-low.tar.gz - echo "Done" - fi - if [ "$lang" = "fr" ] ; then - echo "Downloading french voice..." - wget -q https://github.com/rhasspy/piper/releases/download/v0.0.2/voice-fr-siwis-medium.tar.gz - tar -xf voice-fr-siwis-medium.tar.gz - mv fr-siwis-medium.onnx fr.onnx - mv fr-siwis-medium.onnx.json fr.onnx.json - rm -rf voice-fr-siwis-medium.tar.gz - echo "Done" - fi - if [ "$lang" = "it" ]; then - echo "Downloading italian voice..." - wget -q https://github.com/rhasspy/piper/releases/download/v0.0.2/voice-it-riccardo_fasol-x-low.tar.gz - tar -xf voice-it-riccardo_fasol-x-low.tar.gz - mv it-riccardo_fasol-x-low.onnx it.onnx - mv it-riccardo_fasol-x-low.onnx.json it.onnx.json - rm -rf voice-it-riccardo_fasol-x-low.tar.gz - echo "Done" - fi - if [ "$lang" = "pt" ]; then - echo "Downloading portuguese voice..." - wget -q https://github.com/rhasspy/piper/releases/download/v0.0.2/voice-pt-br-edresson-low.tar.gz - tar -xf voice-pt-br-edresson-low.tar.gz - mv pt-br-edresson-low.onnx pt.onnx - mv pt-br-edresson-low.onnx.json pt.onnx.json - rm -rf voice-pt-br-edresson-low.tar.gz - echo "Done" - fi - if [ "$lang" = "ca" ] ; then - echo "Downloading catalan voice..." - wget -q https://github.com/rhasspy/piper/releases/download/v0.0.2/voice-ca-upc_ona-x-low.tar.gz - tar -xf voice-ca-upc_ona-x-low.tar.gz - mv ca-upc_ona-x-low.onnx ca.onnx - mv ca-upc_ona-x-low.onnx.json ca.onnx.json - rm -rf voice-ca-upc_ona-x-low.tar.gz - echo "Done" - fi - done - echo "Moving voices to piper/voices/" - mv *.onnx* piper/voices/ - echo "Done. Piper installed!" -else - echo "TTS Disabled. No work to do..." -fi \ No newline at end of file