MCPcopy Create free account
hub / github.com/0xShug0/audio.cpp / synthesize_voice_clone_impl

Method synthesize_voice_clone_impl

src/models/chatterbox/tts.cpp:144–314  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

142}
143
144ChatterboxVoiceCloneOutputs ChatterboxTtsComponent::synthesize_voice_clone_impl(
145 const std::string & text,
146 const ChatterboxConditionalsOutputs & conds,
147 const ChatterboxVoiceCloneConfig & config) const {
148 ChatterboxVoiceCloneOutputs outputs;
149 outputs.normalized_text = normalize_chatterbox_tts_text(text);
150 const std::string language = normalize_chatterbox_language_code(config.language);
151 outputs.text_tokens = chatterbox_language_uses_multilingual_t3(language)
152 ? encode_chatterbox_multilingual_text(*tokenizer_, outputs.normalized_text, language)
153 : encode_chatterbox_english_text(*tokenizer_, outputs.normalized_text);
154 outputs.text_tokens.insert(outputs.text_tokens.begin(), chatterbox_english_start_token_id(*tokenizer_));
155 outputs.text_tokens.push_back(chatterbox_english_stop_token_id(*tokenizer_));
156
157 outputs.prompt_prep_gen_ms = conds.gen_ms;
158 outputs.prompt_prep_gen_prompt_mel_ms = conds.gen.prompt_mel_ms;
159 outputs.prompt_prep_gen_speaker_ms = conds.gen.speaker_ms;
160 outputs.prompt_prep_gen_tokenizer_ms = conds.gen.tokenizer_ms;
161 outputs.prompt_prep_voice_encoder_ms = conds.voice_encoder_ms;
162 outputs.prompt_prep_tokenizer_ms = conds.tokenizer_ms;
163
164 T3GenerateRequest request;
165 request.speaker_embedding = conds.t3.speaker_embedding;
166 request.cond_prompt_speech_tokens = conds.t3.cond_prompt_speech_tokens;
167 request.emotion_adv = conds.t3.emotion_adv;
168 request.text_tokens = outputs.text_tokens;
169 request.max_new_tokens = config.max_new_tokens;
170 request.stop_on_eos = config.stop_on_eos;
171 request.do_sample = config.do_sample;
172 request.temperature = config.temperature;
173 request.top_p = config.top_p;
174 request.min_p = config.min_p;
175 request.repetition_penalty = config.repetition_penalty;
176 request.guidance_scale = config.guidance_scale;
177 request.seed = config.seed;
178
179 const auto t3_memory_before = capture_backend_memory_snapshot(execution_context_);
180 const auto t3_started = std::chrono::steady_clock::now();
181 const auto t3_outputs = t3_.generate_speech_tokens(request);
182 outputs.t3_ms =
183 engine::debug::elapsed_ms(t3_started);
184 const auto t3_memory_after = capture_backend_memory_snapshot(execution_context_);
185 if (t3_memory_after.available) {
186 outputs.cuda_memory_total_bytes = t3_memory_after.total_bytes;
187 } else if (t3_memory_before.available) {
188 outputs.cuda_memory_total_bytes = t3_memory_before.total_bytes;
189 }
190 outputs.t3_prefix_cache_build_ms = t3_outputs.prefix_cache_build_ms;
191 outputs.t3_decoder_cache_clone_ms = t3_outputs.decoder_cache_clone_ms;
192 outputs.t3_prefill_runner_ms = t3_outputs.prefill_runner_ms;
193 outputs.t3_decode_runner_ms = t3_outputs.decode_runner_ms;
194 outputs.t3_logits_ms = t3_outputs.logits_ms;
195 outputs.t3_sampling_ms = t3_outputs.sampling_ms;
196 outputs.t3_next_embed_ms = t3_outputs.next_embed_ms;
197 outputs.t3_cuda_memory_used_before_bytes = t3_memory_before.used_bytes;
198 outputs.t3_cuda_memory_used_after_bytes = t3_memory_after.used_bytes;
199 engine::debug::timing_log_scalar("chatterbox.voice_clone.t3.total_ms", outputs.t3_ms);
200 engine::debug::timing_log_scalar("chatterbox.voice_clone.t3.prefix_cache.build_ms", outputs.t3_prefix_cache_build_ms);
201 engine::debug::timing_log_scalar("chatterbox.voice_clone.t3.decoder_cache.clone_ms", outputs.t3_decoder_cache_clone_ms);

Callers

nothing calls this directly

Tested by

no test coverage detected