Oven logo

Oven

pyworld0.3.4

Published

PyWorld: a Python wrapper for WORLD vocoder

pip install pyworld

Package Downloads

Weekly DownloadsMonthly Downloads

Project URLs

Requires Python

Dependencies

    PyWORLD - A Python wrapper of WORLD Vocoder

    LinuxWindows
    Build StatusBuild Status

    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 and the official website of WORLD Vocoder

    APIs

    Vocoder Functions

    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

    # Convert speech into features (using default arguments)
    f0, sp, ap = pw.wav2world(x, fs)
    

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

    Installation

    Using Pip

    pip install pyworld

    Building from Source

    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).
    (It seems to me that using virtualenv or conda is the best practice.)

    Installation Validation

    You can validate installation by running

    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.)

    Environment/Dependencies

    • Operating systems
      • Linux Ubuntu 14.04+
      • Windows (thanks to 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.
    • 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.
      (I failed to build it on Cython 0.20.1post0)
      It'll require you to download Cython form http://cython.org/
      Unzip it, and python setup.py install it.
      (I tried pip install Cython but the upgrade didn't seem correct)
      (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):
    import matplotlib
    matplotlib.use('Agg')
    
    1. 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
    2. 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).

    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.
    1. Another way to install pyworld is via
      python setup.py install
      • Add --user if you don't have root access
      • Add --record install.txt to track the installation dir
    2. If you just want to try out some experiments, execute
      python setup.py build_ext --inplace
      Then you can use PyWorld from this directory.
      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.
      Alternatively you can copy/symlink the compiled files using pip, e.g. pip install -e .

    Acknowledgement

    Thank all contributors (tats-u, wuaalb, r9y9, rikrd, kudan2510) for making this repo better and sotelo whose world.py inspired this repo.