11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
24PROMEKI_NAMESPACE_BEGIN
29struct TranscriptListImpl;
68 PROMEKI_DATATYPE(TranscriptWord, DataTypeTranscriptWord, 1)
71 using List = ::promeki::List<TranscriptWord>;
74 TranscriptWord() = default;
86 TranscriptWord(String text, TimeStamp start, TimeStamp end,
float confidence = 1.0f)
87 : _text(std::move(text)), _start(start), _end(end), _confidence(confidence) {}
90 const String &text()
const {
return _text; }
93 const TimeStamp &start()
const {
return _start; }
96 const TimeStamp &end()
const {
return _end; }
99 float confidence()
const {
return _confidence; }
102 TimeStamp::Duration duration()
const {
return _end.value() - _start.value(); }
104 void setText(String v) { _text = std::move(v); }
105 void setStart(
const TimeStamp &v) { _start = v; }
106 void setEnd(
const TimeStamp &v) { _end = v; }
107 void setConfidence(
float v) { _confidence = v; }
109 bool operator==(
const TranscriptWord &o)
const {
110 return _text == o._text && _start == o._start && _end == o._end
111 && _confidence == o._confidence;
113 bool operator!=(
const TranscriptWord &o)
const {
return !(*
this == o); }
116 JsonObject toJson()
const;
119 String toString()
const;
122 Error writeToStream(DataStream &s)
const;
125 template <u
int32_t V>
static Result<TranscriptWord> readFromStream(DataStream &s);
131 float _confidence = 1.0f;
135DataStream &operator<<(DataStream &stream,
const TranscriptWord &word);
138DataStream &operator>>(DataStream &stream, TranscriptWord &word);
198 PROMEKI_DATATYPE(Transcript, DataTypeTranscript, 1)
204 explicit Transcript(TranscriptWord::List words);
214 Transcript(TranscriptWord::List words, String speaker, String language,
float confidence,
bool partial);
216 Transcript(const Transcript &);
217 Transcript(Transcript &&) noexcept;
219 Transcript &operator=(const Transcript &);
220 Transcript &operator=(Transcript &&) noexcept;
225 const TranscriptWord::List &words() const;
228 const String &speaker() const;
231 const String &language() const;
234 float confidence() const;
246 bool partial() const;
249 const Metadata &metadata() const;
259 const String &text() const;
265 TimeStamp start() const;
271 TimeStamp end() const;
274 TimeStamp::Duration duration() const;
277 bool isEmpty() const;
281 void setWords(TranscriptWord::List v);
282 void appendWord(TranscriptWord w);
283 void setSpeaker(String v);
284 void setLanguage(String v);
285 void setConfidence(
float v);
286 void setPartial(
bool v);
287 void setMetadata(Metadata v);
291 bool operator==(const Transcript &o) const;
292 bool operator!=(const Transcript &o)
const {
return !(*
this == o); }
295 JsonObject toJson()
const;
298 String toString()
const;
309 Error writeToStream(DataStream &s)
const;
312 template <u
int32_t V>
static Result<Transcript> readFromStream(DataStream &s);
315 SharedPtr<TranscriptImpl> _d;
346class TranscriptList {
349 explicit TranscriptList(List<Transcript> entries);
350 TranscriptList(
const TranscriptList &);
351 TranscriptList(TranscriptList &&) noexcept;
353 TranscriptList &operator=(const TranscriptList &);
354 TranscriptList &operator=(TranscriptList &&) noexcept;
359 bool isEmpty() const;
362 const Transcript &at(
size_t i) const;
365 const Transcript &operator[](
size_t i) const;
371 void append(const Transcript &t);
380 void reserve(
size_t n);
389 int64_t findActiveAt(const TimeStamp &t) const;
396 int64_t findNextAfter(const TimeStamp &t) const;
401 const List<Transcript> &entries() const;
405 bool operator==(const TranscriptList &o) const;
406 bool operator!=(const TranscriptList &o)
const {
return !(*
this == o); }
409 JsonObject toJson()
const;
412 String toString()
const;
415 SharedPtr<TranscriptListImpl> _d;