@onjmin/dtm
    Preparing search index...

    Type Alias DtmStudio

    type DtmStudio = {
        audioContext: AudioContext;
        createMediaStreamDestination: () => MediaStreamAudioDestinationNode;
        defaultPreset: string;
        dispose: () => void;
        getAudioStreamTrack: () => MediaStreamTrack;
        loadPreset: (presetKey: string, trackIds?: string[]) => Promise<void>;
        masterGain: GainNode;
        mountChordPlayer: (
            target: HTMLElement,
            chords: string,
            options?: Omit<MountChordPlayerOptions, "studio">,
        ) => ChordPlayerInstance;
        mountEditor: (
            target: HTMLElement,
            options?: MountEditorOptions,
        ) => DawInstance;
        mountModeSwitch: (
            target: HTMLElement,
            options: ModeSwitchOptions,
        ) => ModeSwitchInstance;
        mountPlayer: (
            target: HTMLElement,
            mml: string,
            options?: MountPlayerOptions,
        ) => MmlPlayerInstance;
        mountPresetSelect: (
            target: HTMLElement,
            options: PresetSelectOptions,
        ) => PresetSelectInstance;
        planSpeech: (
            text: string,
            options?: SpeechPlanDetailOptions & { model?: string },
        ) => Promise<SpeechPlanInfo | null>;
        play: (
            mml: string,
            options?: Omit<
                PlayMmlOptions,
                "audioContext"
                | "destination"
                | "onPlayNote"
                | "onPlayDrum"
                | "synth",
            >,
        ) => MmlPlayback;
        playChords: (
            chordStr: string,
            options?: Omit<
                PlayChordsOptions,
                "audioContext"
                | "destination"
                | "onPlayNote"
                | "onPlayDrum"
                | "synth",
            >,
        ) => MmlPlayback;
        playDrumEvent: (e: PlayDrumEvent) => void;
        playNote: (
            options: {
                duration?: number;
                instrument?: string;
                pitchUnits: Units;
                volume?: number;
            },
        ) => Promise<void>;
        playNoteEvent: (e: PlayNoteEvent) => void;
        playSingingMML: (
            mml: string,
            options?: Omit<
                PlaySingingMmlOptions,
                "audioContext"
                | "destination"
                | "onPlayNote"
                | "onPlayDrum"
                | "synth",
            >,
        ) => Promise<MmlPlayback>;
        prepareSpeech: (
            models?: Iterable<string>,
            options?: SpeechPrepareOptions,
        ) => Promise<void>;
        setDelayAmount: (amount: number) => void;
        setMasterCompression: (amount: number) => void;
        setMasterVolume: (volume: number) => void;
        setReverbAmount: (amount: number) => void;
        setReverbDecay: (seconds: number) => void;
        setReverbPreDelay: (ms: number) => void;
        setVolume: (volume: number) => void;
        singingVoices: SingingVoices;
        speak: (
            text: string,
            options?: SpeakOptions & { model?: string },
        ) => Promise<SpeechHandle | null>;
        startTour: () => void;
        startWavRecording: () => void;
        stopWavRecording: () => Promise<Blob>;
    }
    Index

    Properties

    audioContext: AudioContext

    内部で使用している AudioContext。

    createMediaStreamDestination: () => MediaStreamAudioDestinationNode

    録画・録音用の MediaStreamAudioDestinationNode を生成/取得する。 masterGain が接続され、その stream から音声トラックを取得できます。

    defaultPreset: string

    既定の楽器プリセットキー(options.defaultPreset ?? "retro_game")。

    dispose: () => void

    AudioContext を閉じ、生成物を破棄する。

    getAudioStreamTrack: () => MediaStreamTrack

    録画・録音用の Audio MediaStreamTrack を取得する。 MediaRecorder のストリーム合成(canvas + audio)に使えます。

    loadPreset: (presetKey: string, trackIds?: string[]) => Promise<void>

    楽器プリセットを(指定トラックぶん)ロードする。

    masterGain: GainNode

    マスターゲインノード(全音色の最終出力先)。

    mountChordPlayer: (
        target: HTMLElement,
        chords: string,
        options?: Omit<MountChordPlayerOptions, "studio">,
    ) => ChordPlayerInstance

    コード進行再生専用プレイヤー(UI)をマウントする

    mountEditor: (target: HTMLElement, options?: MountEditorOptions) => DawInstance

    編集UI(mountDAW)を音・歌声込みでマウントする。

    mountModeSwitch: (
        target: HTMLElement,
        options: ModeSwitchOptions,
    ) => ModeSwitchInstance

    モード切替UI(SIMPLE/ADVANCED)を target に差し込み、編集UIのマウントごと面倒を見る。 切替時に「最新MML取り込み→destroy→新トラック構成で再マウント→MML復元」まで内部で行う。 getDaw() で現在の DawInstance を取得できる(mountPresetSelect の getDaw に渡せる)。

    mountPlayer: (
        target: HTMLElement,
        mml: string,
        options?: MountPlayerOptions,
    ) => MmlPlayerInstance

    再生専用UI(mountMmlPlayer)を音・歌声込みでマウントする。

    mountPresetSelect: (
        target: HTMLElement,
        options: PresetSelectOptions,
    ) => PresetSelectInstance

    楽器プリセット選択UI(INSTRUMENT)を target に差し込む。 変更時に内部で setInstrument+loadPreset(再生中なら一旦停止→再開)まで配線する。 編集UIの外側に独自配置したいライブラリ利用者向け(mountEditor の presetUI と同等)。

    planSpeech: (
        text: string,
        options?: SpeechPlanDetailOptions & { model?: string },
    ) => Promise<SpeechPlanInfo | null>

    読み上げの計画だけを行い、長さ(秒)とモーラ列を返す(鳴らさない)。台本の各行の 長さを先に知って時間軸を組む用途。model 省略時は DEFAULT_SPEECH_MODEL。 未知のモデル・読みが取れない本文では null。

    play: (
        mml: string,
        options?: Omit<
            PlayMmlOptions,
            "audioContext"
            | "destination"
            | "onPlayNote"
            | "onPlayDrum"
            | "synth",
        >,
    ) => MmlPlayback

    UIなしで高品質な楽器再生(SoundFont)を行う

    playChords: (
        chordStr: string,
        options?: Omit<
            PlayChordsOptions,
            "audioContext"
            | "destination"
            | "onPlayNote"
            | "onPlayDrum"
            | "synth",
        >,
    ) => MmlPlayback

    SoundFontを用いたコード進行再生を行う

    playDrumEvent: (e: PlayDrumEvent) => void

    SoundFontへ PlayDrumEvent を鳴らす(headless API の onPlayDrum フック用)

    playNote: (
        options: {
            duration?: number;
            instrument?: string;
            pitchUnits: Units;
            volume?: number;
        },
    ) => Promise<void>

    SoundFontを用いた単音再生を行う

    playNoteEvent: (e: PlayNoteEvent) => void

    SoundFontへ PlayNoteEvent を鳴らす(headless API の onPlayNote フック用)

    playSingingMML: (
        mml: string,
        options?: Omit<
            PlaySingingMmlOptions,
            "audioContext"
            | "destination"
            | "onPlayNote"
            | "onPlayDrum"
            | "synth",
        >,
    ) => Promise<MmlPlayback>

    UIなしで高品質な楽器再生(SoundFont)+歌声合成を行う

    prepareSpeech: (
        models?: Iterable<string>,
        options?: SpeechPrepareOptions,
    ) => Promise<void>

    読み上げに必要なもの(TTS アセットと音源マニフェスト)を先に取得する。 models 省略時は DEFAULT_SPEECH_MODEL だけ。

    setDelayAmount: (amount: number) => void

    マスタディレイの掛かり具合を 0-100 で変更する。

    setMasterCompression: (amount: number) => void

    マスタバスのグルーコンプレッサー量を 0-100 で変更する。

    setMasterVolume: (volume: number) => void

    studio 全体(このstudioを共有する全ての mountEditor / mountPlayer / mountChordPlayer / playSingingMML インスタンス)の出力段ゲインを 0-100 で変更する。

    これは「聴く人(リスナー)側の音量設定」用のノブで、曲データとは無関係に オーディオグラフの最終段(studio.masterGain)に一度だけ掛かる。 DawInstance.setMasterVolume / MmlPlayerOptions.masterVolume(#volume= と往復する“曲自体が持つ音量”)とは別物なので混同しないこと。 daw.loadMML() や #volume= の内容に一切影響されない。

    setReverbAmount: (amount: number) => void

    マスタリバーブの掛かり具合を 0-100 で変更する。

    setReverbDecay: (seconds: number) => void

    マスタリバーブのDecay(残響の長さ)を秒で変更する。

    setReverbPreDelay: (ms: number) => void

    マスタリバーブのPre Delayをmsで変更する。

    setVolume: (volume: number) => void

    setMasterVolume のエイリアス。

    singingVoices: SingingVoices

    歌声合成ヘルパ(klatt + koe音源)。

    speak: (
        text: string,
        options?: SpeakOptions & { model?: string },
    ) => Promise<SpeechHandle | null>

    本文を koe 音源で読み上げる(MML を介さない単発の語り。セリフ・ナレーション用)。 model 省略時は DEFAULT_SPEECH_MODEL。ブラウザの自動再生ポリシーのため、 最初の呼び出しはユーザー操作のコールスタック内から行うこと。 音量はマスタ(setMasterVolume)に従う。 初回は TTS アセット約 45MB を取得する(prepareSpeech で先に済ませられる)。 読み上げできない(未知のモデル・読みが取れない本文)ときは null。

    セリフには awaitRender: "first-chunk" を勧める。最初のチャンクが出来た時点で解決し、 頭を欠かさずに鳴り出す(合成が追いつかなければ後続を後ろへずらす=lateChunks: "shift")。 文字送りを声と揃えるなら、戻り値の startTime(最初のモーラの時刻)から始め、 position() と morae を比べて進める。合成の遅い音源で行の途中に間が空くなら minBufferSec(0.3〜0.5 秒ほど)を足す。

    既定(awaitRender 省略=false)は頭が欠ける。 計画が出来しだい時刻を決めるので速いが、 最初のチャンクの合成が間に合わなかったぶんを飛ばして途中から鳴らす(実測で速い音源でも 0〜450ms、遅い音源では 3.3 秒の行の 2.3 秒が欠けた)。既定は互換のため変えていない。

    startTour: () => void

    直近にマウントした編集UIでガイドツアーを開始する。 自動再生(tour.autoStart)を切っていても、独自の「使い方」ボタンから呼べる。 編集UIが1つも無いときは何もしない。

    startWavRecording: () => void

    WAV書き出し用の録音を開始する(マスタバス最終段=リバーブ/ディレイ/コンプ/ リミッター/フェード適用後のPCMをそのままタップする)。 呼び出し側で再生(daw.play() 等)を開始し、曲が終わったら stopWavRecording を呼ぶ想定。 実際の再生と同じ経路を録るため等速(曲の長さ分だけ実時間がかかる)。

    stopWavRecording: () => Promise<Blob>

    startWavRecording で開始した録音を止め、16bit PCM WAVのBlobを返す。