Skip to main content

Easy to use audio conversion using rvc

Project description

python-rvc-inference

A streamlined Python wrapper for fast inference with RVC. Specifically designed for inference tasks.

Introduction

This streamlined wrapper offers an efficient solution for integrating RVC into your Python projects, focusing primarily on rapid inference. Whether you're working on voice conversion applications or related projects, this tool simplifies the process while maintaining performance.

Key Features

  • Preloaded Models: Accelerate inference by loading models into memory beforehand, minimizing latency during runtime.
  • Batch Processing: Enhance efficiency by enabling batch processing, allowing for simultaneous conversion of multiple inputs, further optimizing throughput.
  • Support for Array Input and Output: Facilitate seamless integration with existing data pipelines by accepting and returning arrays, enhancing compatibility across various platforms and frameworks.

Getting Started

Prerequisites

  • You need to have ffmpeg and Python 3.10 installed.

  • In windows is needed to install Microsoft Visual C++ Build Tools, MSVC and Windows 10 SDK:

    • Go to the Visual Studio downloads page; Or maybe you already have Visual Studio Installer? Open it. If you have it already click modify.
    • Download and install the "Build Tools for Visual Studio" if you don't have it.
    • During installation, under "Workloads", select "C++ build tools" and ensure the latest versions of "MSVCv142 - VS 2019 C++ x64/x86 build tools" and "Windows 10 SDK" are selected ("Windows 11 SDK" if you are using Windows 11); OR go to individual components and find those two listed.
    • Complete the installation.

Installation

pip install infervcpy

Usage

Initialize the base class

from infervcpy import BaseLoader

converter = BaseLoader(only_cpu=False, hubert_path=None, rmvpe_path=None)

Define a tag and select the model along with other parameters.

converter.apply_conf(
        tag="yoimiya",
        file_model="model.pth",
        pitch_algo="rmvpe+",
        pitch_lvl=0,
        file_index="model.index",
        index_influence=0.66,
        respiration_median_filtering=3,
        envelope_ratio=0.25,
        consonant_breath_protection=0.33
    )

Select the audio or audios you want to convert.

# audio_files = ["audio.wav", "haha.mp3"]
audio_files = "myaudio.mp3"

# speakers_list = ["sunshine", "yoimiya"]
speakers_list = "yoimiya"

Perform inference

result = converter(
    audio_files,
    speakers_list,
    overwrite=False,
    parallel_workers=4
)

The result is a list with the paths of the converted files.

Unload models

converter.unload_models()

Preloading model (Reduces inference time)

The initial execution will preload the model for the tag. Subsequent calls to inference with the same tag will benefit from preloaded components, thereby reducing inference time.

result_array, sample_rate = converter.generate_from_cache(
    audio_data="myaudiofile_path.wav",
    tag="yoimiya",
)

The param audio_data can be a path or a tuple with (array_data, sampling_rate)

# array_data = np.array([-22, -22, -15, ..., 0, 0, 0], dtype=np.int16)
# source_sample_rate = 16000
data = (array_data, source_sample_rate)
result_array, sample_rate = converter.generate_from_cache(
    audio_data=data,
    tag="yoimiya",
)

The result in both cases will be (array, sample_rate), which you can save or play in a notebook

# Save
import soundfile as sf

sf.write(
    file="output_file.wav",
    samplerate=sample_rate,
    data=result_array
)
# Play; need to install ipython
from IPython.display import Audio

Audio(result_array, rate=sample_rate)

When settings or the tag are altered, the model requires reloading. To maintain multiple preloaded models, you can instantiate another BaseLoader object.

second_converter = BaseLoader()

Credits

  • RVC-Project
  • FFMPEG

License

This project is licensed under the BSD 2-Clause License.

Disclaimer

This software is provided for educational and research purposes only. The authors and contributors of this project do not endorse or encourage any misuse or unethical use of this software. Any use of this software for purposes other than those intended is solely at the user's own risk. The authors and contributors shall not be held responsible for any damages or liabilities arising from the use of this software inappropriately.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

infervcpy-0.2.tar.gz (32.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

infervcpy-0.2-py2.py3-none-any.whl (35.6 kB view details)

Uploaded Python 2Python 3

File details

Details for the file infervcpy-0.2.tar.gz.

File metadata

  • Download URL: infervcpy-0.2.tar.gz
  • Upload date:
  • Size: 32.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.11

File hashes

Hashes for infervcpy-0.2.tar.gz
Algorithm Hash digest
SHA256 da95f3fb60ac57bbf827ffc1660f255c9c9d29c1e5fae901fba4bdc4e0796b64
MD5 96cef35b3213352591446a4ceeb75e22
BLAKE2b-256 470b9db64a056c0292f060134ff29375b6c4d8e2bda68caaa1bb48707c188a08

See more details on using hashes here.

File details

Details for the file infervcpy-0.2-py2.py3-none-any.whl.

File metadata

  • Download URL: infervcpy-0.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 35.6 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.11

File hashes

Hashes for infervcpy-0.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 8035d693f143dcea791c7c17b27f2f0e4ed4bf5f1f1d3b9930b01d0f8735fa0f
MD5 a74cb088c7e5bbadbd3be8ee577d80f4
BLAKE2b-256 e1baae1c44c2840fd2f5e167f841b4b24fbd6289149aeabaa98aa0c98d50786e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page