# 음성 코어에 기여

## Voice Core에 기여하기&#x20;

기여자는 두 가지 방식으로 Voice Core를 개선할 수 있습니다:

* TTS 모델 개선
* 새로운 음성 데이터 기여

{% hint style="success" %}
현재 STT 모델은 Azure 서비스를 사용하고 있으므로, STT 모델에 대한 기여는 필요하지 않습니다. 정확도는 이미 최적이며, 추가적인 개선이 필요하지 않습니다.
{% endhint %}

### TTS 모델 개선

모델과 관련된 모든 파일은 **반드시** 제출해야 합니다. 생태계에서 지원하는 서비스 제공업체가 여러 개 있습니다. 아래에 그 목록과 요구사항이 나와 있습니다:

{% tabs %}
{% tab title="GPT-Sovits" %}

* **sovits.pth**: 이것은 기본 모델 파일입니다. 지정된 대로 이름이 "sovits.pth"인지 확인하세요.
* **reference1.wav**: .wav 형식의 참조 오디오 파일입니다. 파일 이름이 "config.json" 파일의 참조와 일치하는지 확인하세요.
* **gpt.ckpt**: 모델의 체크포인트 파일입니다. 이름이 "gpt.ckpt"인지 확인하세요.
* **config.json**: 이것은 모델의 구성 파일입니다. 이름이 반드시 "config.json"이어야 합니다.

다음은 완전한 모델의 샘플 폴더 제출 구조입니다.&#x20;

```
AudioModelSubmission/
├── sovits.pth                # 기본 모델 파일
├── reference1.wav            # 참조 오디오 파일 (config.json 기준 이름)     
├── gpt.ckpt                  # 모델의 체크포인트 파일
└── config.json               # 모델의 구성 파일

```

샘플 config.json 파일은 아래와 같습니다.&#x20;

```json
{
    "refFile": "Olyn.wav",
    "refText": "yet still, I stand, a testiment to the resilience of human spirit"
}

```

{% endtab %}

{% tab title="XTTS" %}

* **model.pth**: 이것은 기본 모델 파일입니다. 이름이 반드시 "model.pth"여야 합니다.
* **audio.wav**: 이것은 .wav 형식의 참조 오디오 파일입니다. 이름이 "audio.wav"인지 확인하세요.
* **vocab.json**: 이 JSON 파일에는 TTS 시스템이 사용하는 어휘가 포함되어 있습니다. 이름이 반드시 "vocab.json"이어야 합니다.
* **config.json**: 이것은 모델의 구성 파일입니다. 이름이 반드시 "config.json"이어야 합니다.

다음은 완전한 모델의 샘플 폴더 제출 구조입니다.&#x20;

```
AudioModelProject/
├── model.pth                # 기본 모델 파일
├── audio.wav                # 참조 오디오 파일
├── vocab.json               # TTS 시스템용 어휘 파일
└── config.json              # 모델의 구성 파일
```

샘플 config.json 파일은 아래와 같습니다.&#x20;

{% code overflow="wrap" lineNumbers="true" %}

````json
```json
{
    "output_path": "output",
    "logger_uri": null,
    "run_name": "run",
    "project_name": null,
    "run_description": "\ud83d\udc38Coqui trainer run.",
    "print_step": 25,
    "plot_step": 100,
    "model_param_stats": false,
    "wandb_entity": null,
    "dashboard_logger": "tensorboard",
    "save_on_interrupt": true,
    "log_model_step": null,
    "save_step": 10000,
    "save_n_checkpoints": 5,
    "save_checkpoints": true,
    "save_all_best": false,
    "save_best_after": 10000,
    "target_loss": null,
    "print_eval": false,
    "test_delay_epochs": 0,
    "run_eval": true,
    "run_eval_steps": null,
    "distributed_backend": "nccl",
    "distributed_url": "tcp://localhost:54321",
    "mixed_precision": false,
    "precision": "fp16",
    "epochs": 1000,
    "batch_size": 32,
    "eval_batch_size": 16,
    "grad_clip": 0.0,
    "scheduler_after_epoch": true,
    "lr": 0.001,
    "optimizer": "radam",
    "optimizer_params": null,
    "lr_scheduler": null,
    "lr_scheduler_params": {},
    "use_grad_scaler": false,
    "allow_tf32": false,
    "cudnn_enable": true,
    "cudnn_deterministic": false,
    "cudnn_benchmark": false,
    "training_seed": 54321,
    "model": "xtts",
    "num_loader_workers": 0,
    "num_eval_loader_workers": 0,
    "use_noise_augment": false,
    "audio": {
        "sample_rate": 22050,
        "output_sample_rate": 24000
    },
    "use_phonemes": false,
    "phonemizer": null,
    "phoneme_language": null,
    "compute_input_seq_cache": false,
    "text_cleaner": null,
    "enable_eos_bos_chars": false,
    "test_sentences_file": "",
    "phoneme_cache_path": null,
    "characters": null,
    "add_blank": false,
    "batch_group_size": 0,
    "loss_masking": null,
    "min_audio_len": 1,
    "max_audio_len": Infinity,
    "min_text_len": 1,
    "max_text_len": Infinity,
    "compute_f0": false,
    "compute_energy": false,
    "compute_linear_spec": false,
    "precompute_num_workers": 0,
    "start_by_longest": false,
    "shuffle": false,
    "drop_last": false,
    "datasets": [
        {
            "formatter": "",
            "dataset_name": "",
            "path": "",
            "meta_file_train": "",
            "ignored_speakers": null,
            "language": "",
            "phonemizer": "",
            "meta_file_val": "",
            "meta_file_attn_mask": ""
        }
    ],
    "test_sentences": [],
    "eval_split_max_size": null,
    "eval_split_size": 0.01,
    "use_speaker_weighted_sampler": false,
    "speaker_weighted_sampler_alpha": 1.0,
    "use_language_weighted_sampler": false,
    "language_weighted_sampler_alpha": 1.0,
    "use_length_weighted_sampler": false,
    "length_weighted_sampler_alpha": 1.0,
    "model_args": {
        "gpt_batch_size": 1,
        "enable_redaction": false,
        "kv_cache": true,
        "gpt_checkpoint": null,
        "clvp_checkpoint": null,
        "decoder_checkpoint": null,
        "num_chars": 255,
        "tokenizer_file": "",
        "gpt_max_audio_tokens": 605,
        "gpt_max_text_tokens": 402,
        "gpt_max_prompt_tokens": 70,
        "gpt_layers": 30,
        "gpt_n_model_channels": 1024,
        "gpt_n_heads": 16,
        "gpt_number_text_tokens": 6681,
        "gpt_start_text_token": null,
        "gpt_stop_text_token": null,
        "gpt_num_audio_tokens": 1026,
        "gpt_start_audio_token": 1024,
        "gpt_stop_audio_token": 1025,
        "gpt_code_stride_len": 1024,
        "gpt_use_masking_gt_prompt_approach": true,
        "gpt_use_perceiver_resampler": true,
        "input_sample_rate": 22050,
        "output_sample_rate": 24000,
        "output_hop_length": 256,
        "decoder_input_dim": 1024,
        "d_vector_dim": 512,
        "cond_d_vector_in_each_upsampling_layer": true,
        "duration_const": 102400
    },
    "model_dir": null,
    "languages": [
        "en",
        "es",
        "fr",
        "de",
        "it",
        "pt",
        "pl",
        "tr",
        "ru",
        "nl",
        "cs",
        "ar",
        "zh-cn",
        "hu",
        "ko",
        "ja",
        "hi"
    ],
    "temperature": 0.75,
    "length_penalty": 1.0,
    "repetition_penalty": 5.0,
    "top_k": 50,
    "top_p": 0.85,
    "num_gpt_outputs": 1,
    "gpt_cond_len": 30,
    "gpt_cond_chunk_len": 4,
    "max_ref_len": 30,
    "sound_norm_refs": false
}
```
````

{% endcode %}
{% endtab %}
{% endtabs %}

음성 모델을 제출하려면 Voice Core를 선택하세요

<figure><img src="/files/18f3ee96bd0f11f329b4637e22f60686996b379b" alt=""><figcaption></figcaption></figure>

그다음 "I got a Voice Model"을 선택하고 위에 제공된 지침에 따라 모델 파일을 업로드하세요.

<figure><img src="/files/d037e8a00b8ac03824821ab7cd9afde1604a306b" alt=""><figcaption></figcaption></figure>

### 새로운 음성 데이터 기여

* 제출하는 음성 데이터는 공유할 권리가 있는 합법적으로 획득한 것이어야 합니다.
* 획득한 음성 데이터는 진본 출처에서 얻은 것이어야 합니다.&#x20;
* 음성 데이터는 배경 소음이 없어야 하며, 오디오에는 학습할 음성만 포함되어야 합니다.&#x20;
* 음성 데이터는 .wav 형식으로 생성되어야 합니다.&#x20;


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://whitepaper.virtuals.io/virtuals-protocol-whitepaper-ko/builders-hub/virtuals/agent-contribution/contribute-to-voice-core.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
