diff --git a/.github/workflows/aux_tests.yml b/.github/workflows/aux_tests.yml
index d5fe1bb3..59ba572d 100644
--- a/.github/workflows/aux_tests.yml
+++ b/.github/workflows/aux_tests.yml
@@ -22,25 +22,22 @@ jobs:
experimental: [false]
steps:
- uses: actions/checkout@v2
- - uses: actions/cache@v1
- with:
- path: ~/.cache/pip
- key: ${{ runner.os }}-pip-${{ matrix.python-version }}-${{ hashFiles('**/setup.py') }}
- name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v2
+ uses: coqui-ai/setup-python@pip-cache-key-py-ver
with:
python-version: ${{ matrix.python-version }}
architecture: x64
+ cache: 'pip'
+ cache-dependency-path: 'requirements*'
- name: check OS
run: cat /etc/os-release
- name: Install dependencies
run: |
- sudo apt update
- sudo apt install -y git make
- sudo apt install -y python3-wheel gcc
+ sudo apt-get update
+ sudo apt-get install -y git make gcc
make system-deps
- - name: Upgrade pip
- run: python3 -m pip install --upgrade pip
+ - name: Install/upgrade Python setup deps
+ run: python3 -m pip install --upgrade pip setuptools wheel
- name: Install TTS
run: |
python3 -m pip install .[all]
diff --git a/.github/workflows/pypi-release.yml b/.github/workflows/pypi-release.yml
index d31e71cf..02faa7f6 100644
--- a/.github/workflows/pypi-release.yml
+++ b/.github/workflows/pypi-release.yml
@@ -7,7 +7,7 @@ defaults:
shell:
bash
jobs:
- build-package:
+ build-sdist:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
@@ -23,10 +23,63 @@ jobs:
with:
python-version: 3.8
- run: |
- python -m pip install -U pip setuptools twine toml
- python -c 'import toml; c = toml.load("pyproject.toml"); print("\n".join(c["build-system"]["requires"]))' | pip install -r /dev/stdin
+ python -m pip install -U pip setuptools wheel build
- run: |
- python setup.py sdist
+ python -m build
+ - run: |
+ pip install dist/*.tar.gz
+ - uses: actions/upload-artifact@v2
+ with:
+ name: sdist
+ path: dist/*.tar.gz
+ build-wheels:
+ runs-on: ubuntu-20.04
+ strategy:
+ matrix:
+ python-version: ["3.6", "3.7", "3.8", "3.9"]
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-python@v2
+ with:
+ python-version: ${{ matrix.python-version }}
+ - run: |
+ python -m pip install -U pip setuptools wheel build
+ - run: |
+ python -m build
+ - run: |
+ python -m pip install dist/*.whl
+ - uses: actions/upload-artifact@v2
+ with:
+ name: wheel-${{ matrix.python-version }}
+ path: dist/*.whl
+ publish-artifacts:
+ runs-on: ubuntu-20.04
+ needs: [build-sdist, build-wheels]
+ steps:
+ - run: |
+ mkdir dist
+ - uses: actions/download-artifact@v2
+ with:
+ name: "sdist"
+ path: "dist/"
+ - uses: actions/download-artifact@v2
+ with:
+ name: "wheel-3.6"
+ path: "dist/"
+ - uses: actions/download-artifact@v2
+ with:
+ name: "wheel-3.7"
+ path: "dist/"
+ - uses: actions/download-artifact@v2
+ with:
+ name: "wheel-3.8"
+ path: "dist/"
+ - uses: actions/download-artifact@v2
+ with:
+ name: "wheel-3.9"
+ path: "dist/"
+ - run: |
+ ls -lh dist/
- name: Setup PyPI config
run: |
cat << EOF > ~/.pypirc
@@ -34,5 +87,10 @@ jobs:
username=__token__
password=${{ secrets.PYPI_TOKEN }}
EOF
+ - uses: actions/setup-python@v2
+ with:
+ python-version: 3.8
- run: |
- twine upload --repository pypi dist/*.tar.gz
+ python -m pip install twine
+ - run: |
+ twine upload --repository pypi dist/*
diff --git a/.github/workflows/style_check.yml b/.github/workflows/style_check.yml
index 4a30c26d..8d1e1af4 100644
--- a/.github/workflows/style_check.yml
+++ b/.github/workflows/style_check.yml
@@ -22,25 +22,22 @@ jobs:
experimental: [false]
steps:
- uses: actions/checkout@v2
- - uses: actions/cache@v1
- with:
- path: ~/.cache/pip
- key: ${{ runner.os }}-pip-${{ matrix.python-version }}-${{ hashFiles('**/setup.py') }}
- name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v2
+ uses: coqui-ai/setup-python@pip-cache-key-py-ver
with:
python-version: ${{ matrix.python-version }}
architecture: x64
+ cache: 'pip'
+ cache-dependency-path: 'requirements*'
- name: check OS
run: cat /etc/os-release
- name: Install dependencies
run: |
- sudo apt update
- sudo apt install -y git make
- sudo apt install -y python3-wheel gcc
+ sudo apt-get update
+ sudo apt-get install -y git make gcc
make system-deps
- - name: Upgrade pip
- run: python3 -m pip install --upgrade pip
+ - name: Install/upgrade Python setup deps
+ run: python3 -m pip install --upgrade pip setuptools wheel
- name: Install TTS
run: |
python3 -m pip install .[all]
diff --git a/.github/workflows/tts_tests.yml b/.github/workflows/tts_tests.yml
index d05dca90..e352a117 100644
--- a/.github/workflows/tts_tests.yml
+++ b/.github/workflows/tts_tests.yml
@@ -22,25 +22,22 @@ jobs:
experimental: [false]
steps:
- uses: actions/checkout@v2
- - uses: actions/cache@v1
- with:
- path: ~/.cache/pip
- key: ${{ runner.os }}-pip-${{ matrix.python-version }}-${{ hashFiles('**/setup.py') }}
- name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v2
+ uses: coqui-ai/setup-python@pip-cache-key-py-ver
with:
python-version: ${{ matrix.python-version }}
architecture: x64
+ cache: 'pip'
+ cache-dependency-path: 'requirements*'
- name: check OS
run: cat /etc/os-release
- name: Install dependencies
run: |
- sudo apt update
- sudo apt install -y git make
- sudo apt install -y python3-wheel gcc
+ sudo apt-get update
+ sudo apt-get install -y --no-install-recommends git make gcc
make system-deps
- - name: Upgrade pip
- run: python3 -m pip install --upgrade pip
+ - name: Install/upgrade Python setup deps
+ run: python3 -m pip install --upgrade pip setuptools wheel
- name: Install TTS
run: |
python3 -m pip install .[all]
diff --git a/.github/workflows/vocoder_tests.yml b/.github/workflows/vocoder_tests.yml
index 69e74dbf..24ae9e3f 100644
--- a/.github/workflows/vocoder_tests.yml
+++ b/.github/workflows/vocoder_tests.yml
@@ -22,25 +22,22 @@ jobs:
experimental: [false]
steps:
- uses: actions/checkout@v2
- - uses: actions/cache@v1
- with:
- path: ~/.cache/pip
- key: ${{ runner.os }}-pip-${{ matrix.python-version }}-${{ hashFiles('**/setup.py') }}
- name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v2
+ uses: coqui-ai/setup-python@pip-cache-key-py-ver
with:
python-version: ${{ matrix.python-version }}
architecture: x64
+ cache: 'pip'
+ cache-dependency-path: 'requirements*'
- name: check OS
run: cat /etc/os-release
- name: Install dependencies
run: |
- sudo apt update
- sudo apt install -y git make
- sudo apt install -y python3-wheel gcc
+ sudo apt-get update
+ sudo apt-get install -y git make gcc
make system-deps
- - name: Upgrade pip
- run: python3 -m pip install --upgrade pip
+ - name: Install/upgrade Python setup deps
+ run: python3 -m pip install --upgrade pip setuptools wheel
- name: Install TTS
run: |
python3 -m pip install .[all]
diff --git a/.github/workflows/zoo_tests.yml b/.github/workflows/zoo_tests.yml
index 0dc4457b..f973dd0e 100644
--- a/.github/workflows/zoo_tests.yml
+++ b/.github/workflows/zoo_tests.yml
@@ -22,25 +22,22 @@ jobs:
experimental: [false]
steps:
- uses: actions/checkout@v2
- - uses: actions/cache@v1
- with:
- path: ~/.cache/pip
- key: ${{ runner.os }}-pip-${{ matrix.python-version }}-${{ hashFiles('**/setup.py') }}
- name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v2
+ uses: coqui-ai/setup-python@pip-cache-key-py-ver
with:
python-version: ${{ matrix.python-version }}
architecture: x64
+ cache: 'pip'
+ cache-dependency-path: 'requirements*'
- name: check OS
run: cat /etc/os-release
- name: Install dependencies
run: |
- sudo apt update
- sudo apt install -y git make
- sudo apt install -y python3-wheel gcc
+ sudo apt-get update
+ sudo apt-get install -y git make gcc
make system-deps
- - name: Upgrade pip
- run: python3 -m pip install --upgrade pip
+ - name: Install/upgrade Python setup deps
+ run: python3 -m pip install --upgrade pip setuptools wheel
- name: Install TTS
run: |
python3 -m pip install .[all]
diff --git a/README.md b/README.md
index fd9cd27c..4686ac67 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
#
🐸TTS is a library for advanced Text-to-Speech generation. It's built on the latest research, was designed to achieve the best trade-off among ease-of-training, speed and quality.
-🐸TTS comes with [pretrained models](https://github.com/coqui-ai/TTS/wiki/Released-Models), tools for measuring dataset quality and already used in **20+ languages** for products and research projects.
+🐸TTS comes with pretrained models, tools for measuring dataset quality and already used in **20+ languages** for products and research projects.
[](https://github.com/coqui-ai/TTS/actions)
[](https://badge.fury.io/py/TTS)
@@ -135,6 +135,66 @@ $ make install
If you are on Windows, 👑@GuyPaddock wrote installation instructions [here](https://stackoverflow.com/questions/66726331/how-can-i-run-mozilla-tts-coqui-tts-training-with-cuda-on-a-windows-system).
+## Use TTS
+
+### Single Speaker Models
+
+- List provided models:
+
+ ```
+ $ tts --list_models
+ ```
+
+- Run TTS with default models:
+
+ ```
+ $ tts --text "Text for TTS"
+ ```
+
+- Run a TTS model with its default vocoder model:
+
+ ```
+ $ tts --text "Text for TTS" --model_name "//
+ ```
+
+- Run with specific TTS and vocoder models from the list:
+
+ ```
+ $ tts --text "Text for TTS" --model_name "//" --vocoder_name "//" --output_path
+ ```
+
+- Run your own TTS model (Using Griffin-Lim Vocoder):
+
+ ```
+ $ tts --text "Text for TTS" --model_path path/to/model.pth.tar --config_path path/to/config.json --out_path output/path/speech.wav
+ ```
+
+- Run your own TTS and Vocoder models:
+ ```
+ $ tts --text "Text for TTS" --model_path path/to/config.json --config_path path/to/model.pth.tar --out_path output/path/speech.wav
+ --vocoder_path path/to/vocoder.pth.tar --vocoder_config_path path/to/vocoder_config.json
+ ```
+
+### Multi-speaker Models
+
+- List the available speakers and choose as among them:
+
+ ```
+ $ tts --model_name "//" --list_speaker_idxs
+ ```
+
+- Run the multi-speaker TTS model with the target speaker ID:
+
+ ```
+ $ tts --text "Text for TTS." --out_path output/path/speech.wav --model_name "//" --speaker_idx
+ ```
+
+- Run your own multi-speaker TTS model:
+
+ ```
+ $ tts --text "Text for TTS" --out_path output/path/speech.wav --model_path path/to/config.json --config_path path/to/model.pth.tar --speakers_file_path path/to/speaker.json --speaker_idx
+ ```
+
## Directory Structure
```
|- notebooks/ (Jupyter Notebooks for model evaluation, parameter selection and data analysis.)
diff --git a/TTS/bin/synthesize.py b/TTS/bin/synthesize.py
index fb2e41b4..bf7de798 100755
--- a/TTS/bin/synthesize.py
+++ b/TTS/bin/synthesize.py
@@ -23,72 +23,76 @@ def str2bool(v):
def main():
- # pylint: disable=bad-option-value
- parser = argparse.ArgumentParser(
- description="""Synthesize speech on command line.\n\n"""
- """You can either use your trained model or choose a model from the provided list.\n\n"""
- """If you don't specify any models, then it uses LJSpeech based English model.\n\n"""
- """
- # Example Runs:
+ description = """Synthesize speech on command line.
- ## Single Speaker Models
+You can either use your trained model or choose a model from the provided list.
- - list provided models
+If you don't specify any models, then it uses LJSpeech based English model.
+
+## Example Runs
+
+### Single Speaker Models
+
+- List provided models:
```
- $ ./TTS/bin/synthesize.py --list_models
+ $ tts --list_models
```
- - run tts with default models.
+- Run TTS with default models:
```
- $ ./TTS/bin synthesize.py --text "Text for TTS"
+ $ tts --text "Text for TTS"
```
- - run a tts model with its default vocoder model.
+- Run a TTS model with its default vocoder model:
```
- $ ./TTS/bin synthesize.py --text "Text for TTS" --model_name "//
+ $ tts --text "Text for TTS" --model_name "//
```
- - run with specific tts and vocoder models from the list
+- Run with specific TTS and vocoder models from the list:
```
- $ ./TTS/bin/synthesize.py --text "Text for TTS" --model_name "//" --vocoder_name "//" --output_path
+ $ tts --text "Text for TTS" --model_name "//" --vocoder_name "//" --output_path
```
- - run your own TTS model (Using Griffin-Lim Vocoder)
+- Run your own TTS model (Using Griffin-Lim Vocoder):
```
- $ ./TTS/bin/synthesize.py --text "Text for TTS" --model_path path/to/model.pth.tar --config_path path/to/config.json --out_path output/path/speech.wav
+ $ tts --text "Text for TTS" --model_path path/to/model.pth.tar --config_path path/to/config.json --out_path output/path/speech.wav
```
- - run your own TTS and Vocoder models
+- Run your own TTS and Vocoder models:
```
- $ ./TTS/bin/synthesize.py --text "Text for TTS" --model_path path/to/config.json --config_path path/to/model.pth.tar --out_path output/path/speech.wav
+ $ tts --text "Text for TTS" --model_path path/to/config.json --config_path path/to/model.pth.tar --out_path output/path/speech.wav
--vocoder_path path/to/vocoder.pth.tar --vocoder_config_path path/to/vocoder_config.json
```
- ## MULTI-SPEAKER MODELS
+### Multi-speaker Models
- - list the available speakers and choose as among them.
+- List the available speakers and choose as among them:
```
- $ ./TTS/bin/synthesize.py --model_name "//" --list_speaker_idxs
+ $ tts --model_name "//" --list_speaker_idxs
```
- - run the multi-speaker TTS model with the target speaker ID.
+- Run the multi-speaker TTS model with the target speaker ID:
```
- $ ./TTS/bin/synthesize.py --text "Text for TTS." --out_path output/path/speech.wav --model_name "//" --speaker_idx
+ $ tts --text "Text for TTS." --out_path output/path/speech.wav --model_name "//" --speaker_idx
```
- - run your own multi-speaker TTS model.
+- Run your own multi-speaker TTS model:
```
- $ ./TTS/bin/synthesize.py --text "Text for TTS" --out_path output/path/speech.wav --model_path path/to/config.json --config_path path/to/model.pth.tar --speakers_file_path path/to/speaker.json --speaker_idx
+ $ tts --text "Text for TTS" --out_path output/path/speech.wav --model_path path/to/config.json --config_path path/to/model.pth.tar --speakers_file_path path/to/speaker.json --speaker_idx
```
- """,
+ """
+ # We remove Markdown code formatting programmatically here to allow us to copy-and-paste from main README to keep
+ # documentation in sync more easily.
+ parser = argparse.ArgumentParser(
+ description=description.replace(" ```\n", ""),
formatter_class=RawTextHelpFormatter,
)
@@ -98,7 +102,7 @@ def main():
nargs="?",
const=True,
default=False,
- help="list available pre-trained tts and vocoder models.",
+ help="list available pre-trained TTS and vocoder models.",
)
parser.add_argument("--text", type=str, default=None, help="Text to generate speech.")
@@ -107,7 +111,7 @@ def main():
"--model_name",
type=str,
default="tts_models/en/ljspeech/tacotron2-DDC",
- help="Name of one of the pre-trained tts models in format //",
+ help="Name of one of the pre-trained TTS models in format //",
)
parser.add_argument(
"--vocoder_name",