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

Method run

src/models/heartmula/session.cpp:271–405  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

269std::string HeartMuLaSession::family() const {
270 return kFamily;
271}
272
273runtime::VoiceTaskKind HeartMuLaSession::task_kind() const {
274 return task_.task;
275}
276
277runtime::RunMode HeartMuLaSession::run_mode() const {
278 return task_.mode;
279}
280
281void HeartMuLaSession::prepare(const runtime::SessionPreparationRequest & request) {
282 (void) request;
283 mark_prepared();
284}
285
286runtime::TaskResult HeartMuLaSession::run(const runtime::TaskRequest & request) {
287 require_prepared("HeartMuLa run");
288 auto normalized_request = normalize_request_options(request);
289 runtime::validate_spec_backed_request_options(normalized_request.options, *contract_, "HeartMuLa");
290 const auto wall_start = Clock::now();
291 const auto heartmula_request = make_request(normalized_request);
292 const uint32_t seed = request_seed(normalized_request);
293 if (heartmula_request.options.infinite_mode) {
294 const auto chunks = engine::text::split_text_chunks(
295 heartmula_request.lyrics,
296 heartmula_request.options.text_chunk_size);
297 if (chunks.empty()) {
298 throw std::runtime_error("HeartMuLa infinite mode produced no text chunks");
299 }
300 engine::debug::trace_log_scalar("heartmula.infinite_mode", 1);
301 engine::debug::trace_log_scalar(
302 "heartmula.text_chunk_size",
303 heartmula_request.options.text_chunk_size);
304 engine::debug::trace_log_scalar("heartmula.infinite_text_chunk_count", static_cast<int64_t>(chunks.size()));
305 engine::debug::trace_log_scalar(
306 "heartmula.infinite_chunk_audio_length_ms",
307 heartmula_request.options.infinite_chunk_audio_length_ms);
308
309 runtime::AudioBuffer merged_audio;
310 double ar_ms = 0.0;
311 double codec_ms = 0.0;
312 int64_t total_frames = 0;
313 for (size_t index = 0; index < chunks.size(); ++index) {
314 const int64_t remaining_ms =
315 static_cast<int64_t>(heartmula_request.options.duration_seconds * 1000.0F) -
316 audio_duration_ms(merged_audio);
317 if (remaining_ms <= 0) {
318 break;
319 }
320 const uint64_t chunk_seed = static_cast<uint64_t>(seed) + static_cast<uint64_t>(index);
321 HeartMuLaPromptRequest chunk_request = heartmula_request;
322 chunk_request.lyrics = chunks[index];
323 chunk_request.options.infinite_mode = false;
324 chunk_request.options.duration_seconds =
325 static_cast<float>(std::min(heartmula_request.options.infinite_chunk_audio_length_ms, remaining_ms)) /
326 1000.0F;
327 engine::debug::trace_log_scalar("heartmula.infinite_chunk.index", static_cast<int64_t>(index));
328 engine::debug::trace_log_scalar(

Callers

nothing calls this directly

Calls 15

request_seedFunction · 0.85
split_text_chunksFunction · 0.85
minFunction · 0.85
append_audio_bufferFunction · 0.85
detokenize_codesMethod · 0.80
audio_duration_msFunction · 0.70
make_requestFunction · 0.50
trace_log_scalarFunction · 0.50
elapsed_msFunction · 0.50
timing_log_scalarFunction · 0.50

Tested by

no test coverage detected