Skip to content

Commit 87535bd

Browse files
committed
Preserve VibeVoice ASR turn text
1 parent b2cc6c3 commit 87535bd

7 files changed

Lines changed: 32 additions & 7 deletions

File tree

app/server/runtime.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,11 @@ std::string task_result_json_with_timing(
379379
const auto & segment = result.speech_segments[i];
380380
out << "{\"start_sample\":" << segment.span.start_sample
381381
<< ",\"end_sample\":" << segment.span.end_sample
382-
<< ",\"confidence\":" << segment.confidence << "}";
382+
<< ",\"confidence\":" << segment.confidence;
383+
if (!segment.text.empty()) {
384+
out << ",\"text\":" << json_quote(segment.text);
385+
}
386+
out << "}";
383387
}
384388
out << "]";
385389
}
@@ -394,7 +398,11 @@ std::string task_result_json_with_timing(
394398
out << "{\"start_sample\":" << turn.span.start_sample
395399
<< ",\"end_sample\":" << turn.span.end_sample
396400
<< ",\"speaker_id\":" << json_quote(turn.speaker_id)
397-
<< ",\"confidence\":" << turn.confidence << "}";
401+
<< ",\"confidence\":" << turn.confidence;
402+
if (!turn.text.empty()) {
403+
out << ",\"text\":" << json_quote(turn.text);
404+
}
405+
out << "}";
398406
}
399407
out << "]";
400408
}

app/workflow/file_sink.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,11 @@ std::string speech_segments_to_json(const std::vector<engine::runtime::SpeechSeg
3535
}
3636
out << "{\"start_sample\":" << segments[i].span.start_sample
3737
<< ",\"end_sample\":" << segments[i].span.end_sample
38-
<< ",\"confidence\":" << segments[i].confidence
39-
<< "}";
38+
<< ",\"confidence\":" << segments[i].confidence;
39+
if (!segments[i].text.empty()) {
40+
out << ",\"text\":" << quote_json(segments[i].text);
41+
}
42+
out << "}";
4043
}
4144
out << "]";
4245
return out.str();
@@ -52,8 +55,11 @@ std::string speaker_turns_to_json(const std::vector<engine::runtime::SpeakerTurn
5255
out << "{\"start_sample\":" << turns[i].span.start_sample
5356
<< ",\"end_sample\":" << turns[i].span.end_sample
5457
<< ",\"speaker_id\":" << quote_json(turns[i].speaker_id)
55-
<< ",\"confidence\":" << turns[i].confidence
56-
<< "}";
58+
<< ",\"confidence\":" << turns[i].confidence;
59+
if (!turns[i].text.empty()) {
60+
out << ",\"text\":" << quote_json(turns[i].text);
61+
}
62+
out << "}";
5763
}
5864
out << "]";
5965
return out.str();
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Speaker 1: Welcome back to the studio. The agenda today is simple: check the solar forecast, test the backup radios, and agree on tomorrow's route.
2+
Speaker 2: I reviewed the forecast this morning. The east ridge should stay clear, but the valley may get fog after sunrise.
3+
Speaker 3: The radios are charged and paired. I also labeled the spare batteries so nobody mixes fresh cells with used ones.
4+
Speaker 4: Good. I will update the route map, mark the fog zone, and send everyone the final plan before dinner.
1.28 MB
Binary file not shown.

include/engine/framework/runtime/session.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,14 @@ struct TimeSpan {
8989
struct SpeechSegment {
9090
TimeSpan span;
9191
float confidence = 0.0f;
92+
std::string text;
9293
};
9394

9495
struct SpeakerTurn {
9596
TimeSpan span;
9697
std::string speaker_id;
9798
float confidence = 0.0f;
99+
std::string text;
98100
};
99101

100102
struct WordTimestamp {

src/models/silero_vad/runtime.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,7 @@ runtime::TaskResult SileroRuntime::build_offline_result(
547547
result.speech_segments.push_back({
548548
{segment.start, segment.end},
549549
1.0f,
550+
{},
550551
});
551552
}
552553
return result;
@@ -601,7 +602,7 @@ runtime::StreamEvent SileroRuntime::build_stream_event(
601602
runtime::VoiceActivityEvent::Kind::SpeechEnd,
602603
speech_end,
603604
probability,
604-
runtime::SpeechSegment{{segment.start, segment.end}, probability},
605+
runtime::SpeechSegment{{segment.start, segment.end}, probability, {}},
605606
});
606607
}
607608
return event;
@@ -649,13 +650,15 @@ runtime::TaskResult SileroRuntime::finalize_stream(const SileroVADConfig & confi
649650
result.speech_segments.push_back({
650651
{segment.start, segment.end},
651652
config.threshold,
653+
{},
652654
});
653655
}
654656
const int64_t min_speech_samples = static_cast<int64_t>(kSampleRate) * config.min_speech_duration_ms / 1000;
655657
if (triggered_ && (current_sample_ - current_speech_start_) > min_speech_samples) {
656658
result.speech_segments.push_back({
657659
{current_speech_start_, current_sample_},
658660
config.threshold,
661+
{},
659662
});
660663
}
661664
engine::debug::timing_log_scalar("silero_vad.streaming.finalize_ms", engine::debug::elapsed_ms(total_start));

src/models/vibevoice_asr/session.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -968,10 +968,12 @@ runtime::TaskResult VibeVoiceASRSession::run_single(const VibeVoiceASRRequest &
968968
runtime::SpeechSegment speech_segment;
969969
speech_segment.span.start_sample = static_cast<int64_t>(segment.start_time * audio.sample_rate);
970970
speech_segment.span.end_sample = static_cast<int64_t>(segment.end_time * audio.sample_rate);
971+
speech_segment.text = segment.text;
971972
result.speech_segments.push_back(speech_segment);
972973
runtime::SpeakerTurn turn;
973974
turn.span = speech_segment.span;
974975
turn.speaker_id = segment.speaker_id;
976+
turn.text = segment.text;
975977
result.speaker_turns.push_back(std::move(turn));
976978
}
977979

0 commit comments

Comments
 (0)