gpt-sovits 0.2.0

A Rust implementation of GPT-SoVITS for high-performance voice synthesis and voice cloning
use std::{collections::HashMap, sync::LazyLock};

use crate::text::utils::*;
use std::path::PathBuf;

static ZN_DICT: LazyLock<HashMap<String, Vec<String>>> = LazyLock::new(|| {
    let word_dict_path = std::env::var("GPT_SOVITS_DICT_PATH").unwrap_or(".".to_string());
    let path = PathBuf::from(word_dict_path.as_str()).join("zh_word_dict.json");
    if path.is_file() {
        let zh_word_dict = std::fs::read_to_string(path).unwrap();
        serde_json::from_str(&zh_word_dict).unwrap()
    } else {
        serde_json::from_str(DEFAULT_ZH_WORD_DICT).unwrap()
    }
});
static EN_DICT: LazyLock<HashMap<String, Vec<String>>> = LazyLock::new(|| {
    let word_dict_path = std::env::var("GPT_SOVITS_DICT_PATH").unwrap_or(".".to_string());
    let path = PathBuf::from(word_dict_path.as_str()).join("en_word_dict.json");
    if path.is_file() {
        let en_word_dict = std::fs::read_to_string(path).unwrap();
        serde_json::from_str(&en_word_dict).unwrap()
    } else {
        HashMap::default()
    }
});

pub fn zh_word_dict(word: &str) -> Option<&'static [String]> {
    ZN_DICT.get(word).map(|s| s.as_slice())
}

pub fn en_word_dict(word: &str) -> Option<&'static [String]> {
    EN_DICT.get(word).map(|s| s.as_slice())
}