pyworld


Namepyworld JSON
Version 0.3.4 PyPI version JSON
download
home_pagehttps://github.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder
SummaryPyWorld: a Python wrapper for WORLD vocoder
upload_time2023-07-20 15:36:03
maintainer
docs_urlNone
authorPyworld Contributors
requires_python
license
keywords vocoder
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI
coveralls test coverage No coveralls.
            # PyWORLD - A Python wrapper of WORLD Vocoder


| **`Linux`** | **`Windows`** |
|-----------------|-----------|
| [![Build Status](https://app.travis-ci.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder.svg?branch=master)](https://app.travis-ci.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder) | [![Build Status](https://ci.appveyor.com/api/projects/status/github/JeremyCCHsu/Python-Wrapper-for-World-Vocoder?svg=true)](https://ci.appveyor.com/project/JeremyCCHsu/python-wrapper-for-world-vocoder) |




WORLD Vocoder is a fast and high-quality vocoder
which parameterizes speech into three components:

  1. `f0`: Pitch contour
  2. `sp`: Harmonic spectral envelope
  3. `ap`: Aperiodic spectral envelope (relative to the harmonic spectral envelope)

It can also (re)synthesize speech using these features (see examples below).

For more information, please visit Dr. Morise's [WORLD repository](https://github.com/mmorise/World)
and the [official website of WORLD Vocoder](http://ml.cs.yamanashi.ac.jp/world/english)


## APIs

### Vocoder Functions
```python
import pyworld as pw
_f0, t = pw.dio(x, fs)    # raw pitch extractor
f0 = pw.stonemask(x, _f0, t, fs)  # pitch refinement
sp = pw.cheaptrick(x, f0, t, fs)  # extract smoothed spectrogram
ap = pw.d4c(x, f0, t, fs)         # extract aperiodicity

y = pw.synthesize(f0, sp, ap, fs) # synthesize an utterance using the parameters
```


### Utility
```python
# Convert speech into features (using default arguments)
f0, sp, ap = pw.wav2world(x, fs)
```
<br/>

You can change the default arguments of the function, too.
See more info using `help`.


## Installation

### Using Pip
`pip install pyworld`
<br/>

### Building from Source
```bash
git clone https://github.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder.git
cd Python-Wrapper-for-World-Vocoder
git submodule update --init
pip install -U pip
pip install -r requirements.txt
pip install .
```
It will automatically `git clone` Morise's World Vocoder (C++ version).<br/>
(It seems to me that using `virtualenv` or `conda` is the best practice.)<br/>
<br/>

### Installation Validation
You can validate installation by running
```bash
cd demo
python demo.py
```
to see if you get results in `test/` direcotry.
(Please avoid writing and executing codes in the `Python-Wrapper-for-World-Vocoder` folder for now.)<br/>

### Environment/Dependencies
- Operating systems
  - Linux Ubuntu 14.04+
  - Windows (thanks to [wuaalb](https://github.com/wuaalb))
  - WSL
- Python
  - 3.7+

You can install dependencies these by `pip install -r requirements.txt`



## Notice
- WORLD vocoder is designed for speech sampled ≥ 16 kHz.
  Applying WORLD to 8 kHz speech will fail.
  See a possible workaround [here](https://github.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder/issues/54).
- When the SNR is low, extracting pitch using `harvest` instead of `dio`
  is a better option.


## Troubleshooting
1. Upgrade your Cython version to 0.24.<br/>
   (I failed to build it on Cython 0.20.1post0)<br/>
   It'll require you to download Cython form http://cython.org/<br/>
   Unzip it, and `python setup.py install` it.<br/>
   (I tried `pip install Cython` but the upgrade didn't seem correct)<br/>
   (Again, add `--user` if you don't have root access.)
2. Upon executing `demo/demo.py`, the following code might be needed in some environments (e.g. when you're working on a remote Linux server):<br/>

 ```python
 import matplotlib
 matplotlib.use('Agg')
 ```
3. If you encounter `library not found: sndfile` error upon executing `demo.py`,
   you might have to install it by `apt-get install libsoundfile1`.
   You can also replace `pysoundfile` with `scipy` or `librosa`, but some modification is needed:
   - librosa:
     - load(fiilename, dtype=np.float64)
     - output.write_wav(filename, wav, fs)
     - remember to pass `dtype` argument to ensure that the method gives you a `double`.
   - scipy:
     - You'll have to write a customized utility function based on the following methods
     - scipy.io.wavfile.read (but this gives you `short`)
     - scipy.io.wavfile.write

4. If you have installation issue on Windows, I probably could not provide
   much help because my development environment is Ubuntu
   and Windows Subsystem for Linux ([read this if you are interested in installing it](https://github.com/JeremyCCHsu/wsl)).


### Other Installation Suggestions
1. Use `pip install .` is safer and you can easily uninstall pyworld by `pip uninstall pyworld`
  - For Mac users: You might need to do `MACOSX_DEPLOYMENT_TARGET=10.9 pip install .` See [issue](https://github.com/SeanNaren/warp-ctc/issues/129#issuecomment-502349652).
2. Another way to install pyworld is via<br/>
   `python setup.py install`<br/>
   - Add `--user` if you don't have root access<br/>
   - Add `--record install.txt` to track the installation dir<br/>
3. If you just want to try out some experiments, execute<br/>
  `python setup.py build_ext --inplace`<br/>
  Then you can use PyWorld from this directory.<br/>
  You can also copy the resulting **pyworld.so** (pyworld.{arch}.pyd on Windows) file to
  `~/.local/lib/python2.7/site-packages` (or corresponding Windows directory)
  so that you can use it everywhere like an installed package.<br/>
  Alternatively you can copy/symlink the compiled files using pip, e.g. `pip install -e .`



## Acknowledgement
Thank all contributors ([tats-u](https://github.com/tats-u), [wuaalb](https://github.com/wuaalb), [r9y9](https://github.com/r9y9), [rikrd](https://github.com/rikrd), [kudan2510](https://github.com/kundan2510)) for making this repo better and [sotelo](https://github.com/sotelo) whose [world.py](https://github.com/sotelo/world.py) inspired this repo.<br/>

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder",
    "name": "pyworld",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "vocoder",
    "author": "Pyworld Contributors",
    "author_email": "jeremycchsu@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/1f/a0/94bef26b6e270cf8a0c795c906fcb6dddf6095b48f390b4729185d7c1eeb/pyworld-0.3.4.tar.gz",
    "platform": null,
    "description": "# PyWORLD - A Python wrapper of WORLD Vocoder\n\n\n| **`Linux`** | **`Windows`** |\n|-----------------|-----------|\n| [![Build Status](https://app.travis-ci.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder.svg?branch=master)](https://app.travis-ci.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder) | [![Build Status](https://ci.appveyor.com/api/projects/status/github/JeremyCCHsu/Python-Wrapper-for-World-Vocoder?svg=true)](https://ci.appveyor.com/project/JeremyCCHsu/python-wrapper-for-world-vocoder) |\n\n\n\n\nWORLD Vocoder is a fast and high-quality vocoder\nwhich parameterizes speech into three components:\n\n  1. `f0`: Pitch contour\n  2. `sp`: Harmonic spectral envelope\n  3. `ap`: Aperiodic spectral envelope (relative to the harmonic spectral envelope)\n\nIt can also (re)synthesize speech using these features (see examples below).\n\nFor more information, please visit Dr. Morise's [WORLD repository](https://github.com/mmorise/World)\nand the [official website of WORLD Vocoder](http://ml.cs.yamanashi.ac.jp/world/english)\n\n\n## APIs\n\n### Vocoder Functions\n```python\nimport pyworld as pw\n_f0, t = pw.dio(x, fs)    # raw pitch extractor\nf0 = pw.stonemask(x, _f0, t, fs)  # pitch refinement\nsp = pw.cheaptrick(x, f0, t, fs)  # extract smoothed spectrogram\nap = pw.d4c(x, f0, t, fs)         # extract aperiodicity\n\ny = pw.synthesize(f0, sp, ap, fs) # synthesize an utterance using the parameters\n```\n\n\n### Utility\n```python\n# Convert speech into features (using default arguments)\nf0, sp, ap = pw.wav2world(x, fs)\n```\n<br/>\n\nYou can change the default arguments of the function, too.\nSee more info using `help`.\n\n\n## Installation\n\n### Using Pip\n`pip install pyworld`\n<br/>\n\n### Building from Source\n```bash\ngit clone https://github.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder.git\ncd Python-Wrapper-for-World-Vocoder\ngit submodule update --init\npip install -U pip\npip install -r requirements.txt\npip install .\n```\nIt will automatically `git clone` Morise's World Vocoder (C++ version).<br/>\n(It seems to me that using `virtualenv` or `conda` is the best practice.)<br/>\n<br/>\n\n### Installation Validation\nYou can validate installation by running\n```bash\ncd demo\npython demo.py\n```\nto see if you get results in `test/` direcotry.\n(Please avoid writing and executing codes in the `Python-Wrapper-for-World-Vocoder` folder for now.)<br/>\n\n### Environment/Dependencies\n- Operating systems\n  - Linux Ubuntu 14.04+\n  - Windows (thanks to [wuaalb](https://github.com/wuaalb))\n  - WSL\n- Python\n  - 3.7+\n\nYou can install dependencies these by `pip install -r requirements.txt`\n\n\n\n## Notice\n- WORLD vocoder is designed for speech sampled \u2265 16 kHz.\n  Applying WORLD to 8 kHz speech will fail.\n  See a possible workaround [here](https://github.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder/issues/54).\n- When the SNR is low, extracting pitch using `harvest` instead of `dio`\n  is a better option.\n\n\n## Troubleshooting\n1. Upgrade your Cython version to 0.24.<br/>\n   (I failed to build it on Cython 0.20.1post0)<br/>\n   It'll require you to download Cython form http://cython.org/<br/>\n   Unzip it, and `python setup.py install` it.<br/>\n   (I tried `pip install Cython` but the upgrade didn't seem correct)<br/>\n   (Again, add `--user` if you don't have root access.)\n2. Upon executing `demo/demo.py`, the following code might be needed in some environments (e.g. when you're working on a remote Linux server):<br/>\n\n ```python\n import matplotlib\n matplotlib.use('Agg')\n ```\n3. If you encounter `library not found: sndfile` error upon executing `demo.py`,\n   you might have to install it by `apt-get install libsoundfile1`.\n   You can also replace `pysoundfile` with `scipy` or `librosa`, but some modification is needed:\n   - librosa:\n     - load(fiilename, dtype=np.float64)\n     - output.write_wav(filename, wav, fs)\n     - remember to pass `dtype` argument to ensure that the method gives you a `double`.\n   - scipy:\n     - You'll have to write a customized utility function based on the following methods\n     - scipy.io.wavfile.read (but this gives you `short`)\n     - scipy.io.wavfile.write\n\n4. If you have installation issue on Windows, I probably could not provide\n   much help because my development environment is Ubuntu\n   and Windows Subsystem for Linux ([read this if you are interested in installing it](https://github.com/JeremyCCHsu/wsl)).\n\n\n### Other Installation Suggestions\n1. Use `pip install .` is safer and you can easily uninstall pyworld by `pip uninstall pyworld`\n  - For Mac users: You might need to do `MACOSX_DEPLOYMENT_TARGET=10.9 pip install .` See [issue](https://github.com/SeanNaren/warp-ctc/issues/129#issuecomment-502349652).\n2. Another way to install pyworld is via<br/>\n   `python setup.py install`<br/>\n   - Add `--user` if you don't have root access<br/>\n   - Add `--record install.txt` to track the installation dir<br/>\n3. If you just want to try out some experiments, execute<br/>\n  `python setup.py build_ext --inplace`<br/>\n  Then you can use PyWorld from this directory.<br/>\n  You can also copy the resulting **pyworld.so** (pyworld.{arch}.pyd on Windows) file to\n  `~/.local/lib/python2.7/site-packages` (or corresponding Windows directory)\n  so that you can use it everywhere like an installed package.<br/>\n  Alternatively you can copy/symlink the compiled files using pip, e.g. `pip install -e .`\n\n\n\n## Acknowledgement\nThank all contributors ([tats-u](https://github.com/tats-u), [wuaalb](https://github.com/wuaalb), [r9y9](https://github.com/r9y9), [rikrd](https://github.com/rikrd), [kudan2510](https://github.com/kundan2510)) for making this repo better and [sotelo](https://github.com/sotelo) whose [world.py](https://github.com/sotelo/world.py) inspired this repo.<br/>\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "PyWorld: a Python wrapper for WORLD vocoder",
    "version": "0.3.4",
    "project_urls": {
        "Homepage": "https://github.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder"
    },
    "split_keywords": [
        "vocoder"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1fa094bef26b6e270cf8a0c795c906fcb6dddf6095b48f390b4729185d7c1eeb",
                "md5": "f3fb39699227cdfaabab2b45a6834962",
                "sha256": "106c70ee7a7d8c9ba488d8022f2033706929a40f0264256b8e87da5aab98303a"
            },
            "downloads": -1,
            "filename": "pyworld-0.3.4.tar.gz",
            "has_sig": false,
            "md5_digest": "f3fb39699227cdfaabab2b45a6834962",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 251990,
            "upload_time": "2023-07-20T15:36:03",
            "upload_time_iso_8601": "2023-07-20T15:36:03.662725Z",
            "url": "https://files.pythonhosted.org/packages/1f/a0/94bef26b6e270cf8a0c795c906fcb6dddf6095b48f390b4729185d7c1eeb/pyworld-0.3.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-07-20 15:36:03",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "JeremyCCHsu",
    "github_project": "Python-Wrapper-for-World-Vocoder",
    "travis_ci": true,
    "coveralls": false,
    "github_actions": false,
    "appveyor": true,
    "requirements": [],
    "lcname": "pyworld"
}
        
Elapsed time: 0.94863s