@onjmin/dtm
    Preparing search index...

    Type Alias BackingAudio

    type BackingAudio = {
        arm: (mediaSec: number) => Promise<void>;
        clear: () => void;
        destroy: () => void;
        getLoaded: () => BackingLoaded | null;
        isLoaded: () => boolean;
        load: (src: string | File) => Promise<BackingLoaded>;
        rebase: (
            line: { atTime: number; mediaSec: number },
            options?: { snap?: boolean },
        ) => void;
        setMuted: (muted: boolean) => void;
        setVolume: (volume: number) => void;
        start: (options: BackingStartOptions) => void;
        startRolling: (
            options: {
                endSec?: number;
                mediaSec: number;
                rangeStartSec?: number;
                timeoutSec?: number;
            },
        ) => Promise<BackingRoll | null>;
        stop: () => void;
    }
    Index

    Properties

    arm: (mediaSec: number) => Promise<void>

    再生開始の直前に呼ぶ準備。YouTubeのように「鳴り始めるまで待ちが要る」音源が 目的位置をバッファするための猶予で、他の音源では何もしない。

    clear: () => void

    読み込み済みの音源を破棄する(再生中なら止める)。

    destroy: () => void
    getLoaded: () => BackingLoaded | null
    isLoaded: () => boolean

    読み込み済みなら true。

    load: (src: string | File) => Promise<BackingLoaded>

    音源を読み込む。URL文字列(mp3/wav/YouTube)またはアップロードされたファイル。

    rebase: (
        line: { atTime: number; mediaSec: number },
        options?: { snap?: boolean },
    ) => void

    鳴らしたまま、合わせる先(時刻と音源位置の対応)だけ差し替える。 startRolling の実測で打ち込み側の開始時刻がずれたときに、 音源をそこへ合わせ直すために使う。

    setMuted: (muted: boolean) => void
    setVolume: (volume: number) => void

    0-100。

    start: (options: BackingStartOptions) => void
    startRolling: (
        options: {
            endSec?: number;
            mediaSec: number;
            rangeStartSec?: number;
            timeoutSec?: number;
        },
    ) => Promise<BackingRoll | null>

    音源を今すぐ鳴らし始め、本当に音が進み出すまで待ってから、 「その瞬間の時計(getAudioTime と同じ絶対秒)と、そのとき音源がいた位置」を返す。

    再生要求から実際に鳴り出すまでの遅れは環境依存で事前に読めない (YouTubeのバッファ、<audio> のデコード、初回再生のウォームアップ等)。 呼び出し側はこの実測値を見て、打ち込み側の開始時刻を決められる。

    待ち合わせるのは待たないと直しようがない音源だけ(YouTube)。

    • デコード済み(buffer)… 予約がサンプル単位で正確。null。
    • <audio> 直再生 … 予約してから実測で詰めるほうが精度が出る(実測で数ms)。 待ち合わせると、待った時点で音源が先行してしまい、戻す手段が seek(=毎回100ms前後の立ち上がりを伴う)しか無くなる。null。
    • 時間内に鳴り始めなかった … null(呼び出し側は従来どおり予約で始める)。
    stop: () => void