@onjmin/dtm
    Preparing search index...

    Type Alias SpeechHandle

    単発の語り 1 回ぶんのハンドル。

    type SpeechHandle = {
        durationSec: number;
        ended: Promise<void>;
        morae: SpeechMora[];
        position: () => number;
        shiftSec: number;
        startTime: number;
        stop: () => void;
    }
    Index

    Properties

    durationSec: number

    語りが音を占める長さ(秒)。

    ended: Promise<void>

    鳴り終わった(または止められた)ときに解決する。

    morae: SpeechMora[]

    モーラ列(口パク・字幕送り用)。時刻は startTime 基準の秒で、計画どおりの値 ("shift" のずれは含まない。ずれた後のモーラは shiftSec だけ遅れて鳴る)。

    position: () => number

    今の再生位置(morae と同じ軸の秒。最初のモーラが 0、鳴る前は負)。 実際に置いた音から測るので、合成待ちで空いた間は進まず、単調に増える。 字幕送り・口パクは morae.filter((m) => m.startSec <= handle.position()) のように これと比べれば、"shift" のずれがあっても音と揃う。

    shiftSec: number

    lateChunks: "shift" で、最初のチャンクを置いたあとに後続を後ろへずらした合計(秒。 読むたびに今の値を返す)。0 なら計画どおり。"skip" では常に 0。 まだ鳴っていないモーラは startTime + shiftSec + mora.startSec 以降に鳴る。

    startTime: number

    最初のモーラが鳴る AudioContext クロック秒。 awaitRender: false かつ lateChunks: "shift" で最初のチャンクがまだ無いうちは 見込みで、最初のチャンクが届いて置かれた時点で確定する(読むたびに今の値を返す)。 それ以外では返った時点で確定している。

    stop: () => void

    この発話だけを即停止する(他の語り・歌には触らない)。