Skip to content

About

Смена тембра голоса (RVC) без fairseq на Windows: ONNX вместо fairseq, обход кириллицы в faiss, проверка качества результата

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

rvc-studio

Python Tests No fairseq License

Смена тембра голоса (RVC) на Windows без fairseq — плюс честная проверка результата.

Интерфейс студии

RVC меняет тембр уже готового звука, а не синтезирует речь:

текст → синтез (edge-tts / silero) → wav → RVC → wav нужным голосом

Библиотека закрывает три вещи, на которых обычно всё встаёт.


1. fairseq на Windows не собирается

fairseq==0.12.2 под Windows с torch 2.x не компилируется — C++ расширения. В этом и стена.

Но fairseq нужен RVC ровно в одном месте — загрузке эмбеддера ContentVec:

# modules/vc/utils.py — единственный жёсткий импорт в рабочем пути
from fairseq import checkpoint_utils

Здесь он заменён на ONNX-версию той же модели. Тот же ContentVec, те же признаки, только без fairseq:

from rvc_studio.patch import OnnxContentVec

shim = OnnxContentVec("base_model/content_vec_500.onnx", device="cuda:0")
# подменяем load_hubert — см. patch.py

Подробный разбор и пошаговая инструкция: docs/fairseq.md.

2. Кириллица в путях ломает faiss — молча

faiss.read_index() открывает файл через C++ fopen, который не понимает не-ASCII пути. Файл на месте, а в логе «No such file or directory».

Опаснее всего то, что в готовых реализациях это обёрнуто в try/except: конвертация тихо идёт без индекса, лог чистый, результат просто хуже. Вы об этом не узнаете.

from rvc_studio.patch import read_index_unicode

index = read_index_unicode(r"E:\голоса\Персонаж\model.index")

3. Результат нечем проверить

Обычные способы врут:

Способ Почему не годится
ASR (Whisper) врёт на самом синтезе: «все системы запущены» → «все системы запрещены»
Усреднённые MFCC косинус 0.95+ на любой речи, порог бесполезен
Спектральный центроид «улучшается» и нужным тембром, и простым задавливанием верха
Разборчивость 48.8% против 46.9% — искажения не видно, а ухо слышит

Работают три метрики, и они в комплекте:

from rvc_studio import quality

report = quality.compare("in.wav", "out.wav")
for note in report["notes"]:
    print("•", note)

# • сигнал пересобран вокодером — конвертация действительно произошла
# • контур тона сохранён (корреляция 0.95)
# • форманты на месте — гласные не искажены
Метрика Норма Что означает
Корреляция формы волны |corr| < 0.3 сигнал пересобран вокодером
Контур тона > 0.9 содержание речи сохранено
Форманты (LPC) ΔF1 < 40, ΔF2 < 60 Гц гласные не искажены

Главное: если корреляция формы волны ~0.99 — это плохо. Сигнал прошёл насквозь, RVC не сработал. «Похоже на вход» — не хороший признак.

Разбор метрик и порогов: docs/quality.md.


Установка

pip install numpy                # минимум: метрики и разбор моделей работают без torch

# для самой конвертации
pip install torch torchaudio librosa scipy soundfile faiss-cpu onnxruntime \
            praat-parselmouth pyworld torchcrepe resampy tqdm

rvc_python вендорится, а не ставится: вы будете править его внутренности.

pip download rvc-python --no-deps -d tmp
unzip tmp/rvc_python-*.whl -d tmp/x
cp -r tmp/x/rvc_python libs/rvc_python

Командная строка

# что вообще есть в папке (torch не нужен)
python -m rvc_studio voices --voices-dir "E:\голоса"

# сконвертировать и сразу проверить
python -m rvc_studio convert --voice Narrator --input in.wav --output out.wav

# проверить уже готовую пару файлов
python -m rvc_studio doctor --input in.wav --output out.wav

# веб-интерфейс
python -m rvc_studio serve
  #  голос                 индекс    размер    замечание
──────────────────────────────────────────────────────────────
  1  Narrator              есть      42.1 МБ
  2  Child                 есть      38.4 МБ
  3  Old copy              —                   без индекса — похожесть будет хуже

Веб-интерфейс

Перетащить WAV, выбрать модель, подвигать ползунки, послушать «оригинал / результат» переключателем и сразу увидеть разбор: форма волны, контур тона, форманты, выводы человеческим языком.

Сервер на стандартной библиотеке — фреймворк ради одной страницы не нужен. Слушает только localhost.

Python API

from rvc_studio import RvcEngine, quality, find_voices, find_duplicates

# дубликаты — бесплатно и мгновенно
print(find_duplicates(find_voices(r"E:\голоса")))
# [['Child', 'Copy']]  — один голос под двумя именами

engine = RvcEngine(voices_dir=r"E:\голоса", lib_dir="libs/rvc_python")
engine.load_voice("Narrator")
engine.convert_file("in.wav", "out.wav", f0_up_key=-2, index_rate=0.5)

Движок создаётся один раз и держит внутри тяжёлые объекты — иначе будете ждать 8 секунд там, где нужно 1.6.

Операция (GTX 1650 SUPER, 4 ГБ, fp32, 40 кГц) Время
Создание движка 7–8 с
Загрузка голоса ~1.5 с
Конвертация 7.4 с звука, холодная 12 с
Конвертация, прогретая 1.6 с (×4.5 к реальному времени)

Подбор голоса: источник важнее ползунка

Транспонирование — плохая замена подходящему источнику. Низкий мужской синтез (~100 Гц) под детский голос требует +24 полутона и всё равно звучит натужно. Дешевле взять высокий источник.

итог = тон_источника × 2^(сдвиг / 12)

Меняйте тембр, а не высоту — иначе непонятно, что именно помогло. Пресеты живут в presets.json, пример — examples/presets.example.json.

Тесты

pip install numpy
python -m unittest discover -s tests -t .
# Ran 112 tests — OK

Метрики качества, разбор моделей, поиск дубликатов и раскладка отчётов проверяются без torch: сигналы синтезируются прямо в тестах.

Статья

Как это собиралось, на чём я спотыкался и почему привычные способы проверки врут: docs/article.md.


English

Voice conversion (RVC) on Windows without fairseq, with honest result verification.

  • No fairseq. It fails to build on Windows with torch 2.x. It is needed in exactly one place — loading the ContentVec embedder — which is replaced by an ONNX version of the same model (patch.py).
  • Cyrillic paths break faiss silently. faiss.read_index() uses a C++ fopen that cannot handle non-ASCII paths. Wrapped in try/except (as it is in most implementations), conversion quietly proceeds without the index and you never find out.
  • Verification that actually works. ASR lies on synthesized speech, MFCC gives 0.95 for any voice, spectral centroid is gamed by simply rolling off the top end. This uses waveform correlation (should be near zero — the vocoder rebuilds the signal), log-scale pitch contour correlation, and LPC formants.
  • Zero-dependency core. audio, quality, voices and report need only numpy — you can audit a model folder or check finished files without a GPU.

MIT licensed.


Оговорка

Инструмент для работы с моделями, на которые у вас есть права, и с голосами персонажей. Подделка речи реальных людей — не то, для чего это сделано.

Лицензия

MIT. См. LICENSE.

About

Смена тембра голоса (RVC) без fairseq на Windows: ONNX вместо fairseq, обход кириллицы в faiss, проверка качества результата

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages