@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>;
        registerVoicebanks?: (banks: Record<string, string | Blob>) => void;
        reset: () => void;
        setVolume: (gain: number) => void;
        startStream: (
            tracks: StreamVoiceTrack[],
            anchorTime: number,
            opts?: StreamPlaybackOptions,
        ) => void;
        stopStream: () => void;
        warm: (
            tracks: StreamVoiceTrack[],
            count?: number,
            onProgress?: (done: number, total: number) => void,
        ) => Promise<void>;
    }
    Index

    Properties

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

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

    registerVoicebanks?: (banks: Record<string, string | Blob>) => void

    koe音源カタログへキーワード → .koe URL(または Blob)を追加・上書き登録する。 カスタムボーカル(@@key icon_url koe_url / DawOptions.customVocals)の音源を 再生前に流し込むために使う。同一キーへ同じ値を再登録した場合はロード済み キャッシュを保ったまま無視する。省略可能(外部注入の実装が無くても動くように)。

    reset: () => void

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

    setVolume: (gain: number) => void

    マスタ音量(0〜1のゲイン)をリアルタイムに反映する。 発音時にゲインを焼き込む方式だと再生中の音量変更が既にスケジュール済み・ ストリーミング中の音符に効かないため、全モデル共通の GainNode を介して 常時ライブ反映できるようにする。

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

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

    stopStream: () => void

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

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

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