@onjmin/dtm
    Preparing search index...

    Function prefetchSpeechPcm

    • 計画に出てくるユニットの PCM を、合成に先立って(合成と重ねて)取りに行く。

      URL 配信の音源は 1 ユニット = 1 回の Range 取得で、renderChunks はユニットを 逐次 await するため、何もしないとチャンクごとに「取得 → 合成」が交互に走り、 往復時間がまるごと合成時間に乗る(つくよみちゃん × r2.dev で 1 往復 約 115ms、 1 チャンク 6 ユニット ≈ 0.7 秒。WORLD 合成 約 0.4 秒と足すと 0.9 秒の音に 1.1 秒掛かり 実時間を割る)。先に取得を走らせておけば取得と合成が重なり、実時間を上回る。 koe のデモは音源が手元の Blob なのでこの問題が無い。

      getPcm は呼び出し側のキャッシュ付きのもの(同じ関数を renderChunks にも 見せること)。取得は計画の順(先頭チャンクのぶんが先に揃う)。失敗は握りつぶす (合成側が改めて同じ取得を待ち、そこで扱う)。

      Parameters

      • plan: UtauTTSPlan
      • getPcm: (alias: string) => Promise<unknown>
      • concurrency: number = 6

      Returns void