@onjmin/dtm
    Preparing search index...

    Type Alias SingingVoices

    歌唱モデルをまとめて管理し、koeデモ式の「先読みストリーミング合成」で歌わせる高レベルヘルパ。

    再生開始時に startStream を呼ぶと、各音を全力で先回り合成しながら、 出来た音を AudioContext クロックの絶対時刻へ即スケジュールする。再生はオーディオスレッドが 担うため、合成中にメインスレッドがもたついても同期ズレ・音切れが起きない。スロットルは掛けない。

    典型的な使い方(呼び出し側=シーケンサ): await voices.loadModels(models); // .koe をfetch(ローディング表示) await voices.warm(tracks); // 先頭数音だけ先に合成(頭出しの貯金) seq.start(fromStep); // 楽器とUIはシーケンサ voices.startStream(tracks, seq.getStartTime()); // 歌声は同じアンカーで先読み合成

    type SingingVoices = {
        loadModels: (models: Iterable<string>) => Promise<void>;
        reset: () => void;
        startStream: (
            tracks: StreamVoiceTrack[],
            anchorTime: number,
            opts?: StreamPlaybackOptions,
        ) => void;
        stopStream: () => void;
        warm: (tracks: StreamVoiceTrack[], count?: number) => Promise<void>;
    }
    Index

    Properties

    loadModels: (models: Iterable<string>) => Promise<void>

    使用する歌唱モデル(.koe)をロードして完了を待つ。

    reset: () => void

    ストリーム停止+各モデルの内部状態を初期化する。

    startStream: (
        tracks: StreamVoiceTrack[],
        anchorTime: number,
        opts?: StreamPlaybackOptions,
    ) => void

    歌声のストリーミング再生を開始する。anchorTime は startSec=0 が鳴るべき AudioContextクロック秒(=シーケンサの開始時刻と一致させること)。 即座に return し、合成は裏で先回り進行する。

    stopStream: () => void

    進行中のストリームを中断し、スケジュール済みの発音をすべて止める(停止・一時停止・シーク)。

    warm: (tracks: StreamVoiceTrack[], count?: number) => Promise<void>

    各トラック先頭の数音を先に合成してキャッシュへ積む(頭出しの貯金)。 これで再生開始直後の密なフレーズでもアンダーランしにくくなる。count 既定 PREWARM_NOTES