@onjmin/dtm 2.1.8 → 2.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -17,6 +17,10 @@ declare function createAudioContext(): {
17
17
  declare function buildNameToKeyMapping(): Promise<Record<string, string>>;
18
18
  /** GM楽器名一覧(128音色)。トラック個別楽器のプルダウン選択肢に使う。 */
19
19
  declare const GM_INSTRUMENT_NAMES: string[];
20
+ /**
21
+ * 楽器名(または正規化名)からGMプログラム番号(0-127)を取得する。見つからなければ null。
22
+ */
23
+ declare const programOfInstrumentName: (name: string) => number | null;
20
24
 
21
25
  type MountChordPlayerOptions = {
22
26
  /** 使用する AudioContext(省略時は内部生成) */
@@ -312,6 +316,11 @@ type StructureFeatures = {
312
316
  climaxPeaks: number;
313
317
  /** メロディが鳴っていないステップに、サブメロの音が入っている比率(コール&レスポンス)。 */
314
318
  complementarity: number;
319
+ /**
320
+ * 音の進む向きが反転した割合(折り返しの多さ)。跳躍率も順次進行率も隣接2音しか
321
+ * 見ないので、「同じ方向へ流れ続ける旋律」と「上って下りる旋律」を区別できない。
322
+ */
323
+ turnRatio: number;
315
324
  };
316
325
  /**
317
326
  * コール&レスポンス。サブメロの**音の入り(オンセット)**のうち、メロディが休んで
@@ -349,6 +358,18 @@ type DensityFeatures = {
349
358
  notesPerBar: number;
350
359
  /** 8分音符以下の短い音が占める比率。曲の「刻みの細かさ」。 */
351
360
  shortNoteRatio: number;
361
+ /**
362
+ * 小節ごとの音数の変動係数(標準偏差÷平均)。歌っている小節だけを母数にする。
363
+ * {@link notesPerBar} は平均なので、どの小節に音が集まっているかを何も言わない。
364
+ */
365
+ barDensityCv: number;
366
+ /**
367
+ * 音数の「崖」の割合。直前の小節が3音以上あり、そこから**3割以下**へ落ちる
368
+ * 小節が、隣接する小節の組のうちどれだけあるか(参考曲は2%、初版の生成物は11%)。
369
+ * 人間の曲もフレーズの切れ目で音数を落とすが、5.9音→1.3音の落とし方はしない。
370
+ * **無音(0音)の小節は数えない**——間奏や落ちは構造として正しいため。
371
+ */
372
+ densityCliff: number;
352
373
  };
353
374
  type TensionFeatures = {
354
375
  /** B部(9〜12小節)がA部(1〜4小節)より緊張しているか。0〜1。 */
@@ -396,13 +417,9 @@ declare const featureDistance: (a: number[], b: number[]) => number;
396
417
  /**
397
418
  * 曲のセクション(イントロ・Aメロ・Bメロ・サビ・Cメロ・落ちサビ・間奏・アウトロ)。
398
419
  *
399
- * ## なぜ要るか
400
- *
401
- * 作曲マクロは長らく**16小節を A-A'-B-A'' という抽象的な形でしか作っていなかった**。
402
- * 「いま作っているのが曲のどこなのか」を持っていないので、どの小節も同じ密度・同じ音域で
403
- * 鳴り、イントロもサビも区別が付かない。人が聴いて最初に分かるのは和音や音程ではなく
404
- * **「ここはAメロだ」「サビに入った」というセクションの切り替わり**なので、そこが
405
- * 無いまま細部を詰めても「曲の一部を切り出したもの」にしかならない。
420
+ * 人が聴いて最初に分かるのは和音や音程ではなく**「ここはAメロだ」「サビに入った」という
421
+ * 切り替わり**なので、どの小節が何なのかを持っていないと、細部を詰めても
422
+ * 「曲の一部を切り出したもの」にしかならない。
406
423
  *
407
424
  * ## セクションごとに何を変えるか
408
425
  *
@@ -423,11 +440,10 @@ declare const featureDistance: (a: number[], b: number[]) => number;
423
440
  *
424
441
  * ## テンプレートによる曲構成
425
442
  *
426
- * 現代のJ-POPは「Aメロ→Bメロ→サビ」を2回繰り返し、Cメロを挟んでラスサビへ至る
427
- * 構成が王道(参考: ONLIVE Studio blog)。同じセクションの**繰り返し**が曲の基本
428
- * 構造であるため、{@link STRUCTURE_TEMPLATES} でプリセットの構成パターンを用意し、
429
- * {@link buildSectionPlan} が同一セクション種別の複数回出現を扱えるようにしてある。
430
- * 2回目以降は `restatement: true` が付き、compose側でメロディ・リズムを再現する。
443
+ * 現代のJ-POPは「Aメロ→Bメロ→サビ」を2回繰り返し、Cメロを挟んでラスサビへ至る構成が
444
+ * 王道。同じセクションの**繰り返し**が曲の基本構造なので、{@link STRUCTURE_TEMPLATES}
445
+ * に構成パターンを持ち、2回目以降には `restatement: true` を付ける(compose側が
446
+ * メロディ・リズムを1回目から再現する)。
431
447
  */
432
448
  /** セクションの種類。 */
433
449
  type SectionKind = "intro" | "verse" | "prechorus" | "chorus"
@@ -505,122 +521,39 @@ type PlacedSection = {
505
521
  declare const buildSectionPlan: (kinds: SectionKind[], templateName?: string) => PlacedSection[];
506
522
 
507
523
  /**
508
- * 自動作曲マクロ。シンプルモードの4トラック(メロディ/サブメロ/ベース/伴奏)へ
509
- * 16小節の曲を丸ごと組み立てる。
510
- *
511
- * ## 設計の根拠
512
- *
513
- * 「和音構成音を均等音価で並べる」素朴な自動生成は、**リズムが単調で機械的に聞こえる**。
514
- * この実装は、実際に人が聴いて評価した結果から逆算した次の基準を満たすように作ってある
515
- * ({@link ComposeStats} で毎回検算し、満たさない draw は引き直す)。
516
- *
517
- * - 音価は4種類以上を混在させる。メロディの音価のシャノンエントロピーが
518
- * {@link MIN_ENTROPY_BITS} を下回るものは「単調」とみなして採用しない。
519
- * - 休符を全体の {@link MIN_REST_RATIO}〜{@link MAX_REST_RATIO} 程度入れる。
520
- * - **順番が本質**: ①コード進行を決める →②先に各小節のリズム型を、隣接小節で変化を
521
- * つけて設計する →③その上に音を乗せる。
522
- * - **短いモチーフを1つ作り、変形で展開する**(反復/セクエンツ/オクターブ上げ)。
523
- * - **緩急**をつける。休符・ロングトーンの「緩」と16分音符の「急」を対比させる。
524
- *
525
- * ## 「どの曲も似ている」を潰すための設計
526
- *
527
- * 初版は品質基準こそ満たしていたが、**曲どうしの違い**が出ていなかった。300曲を生成して
528
- * 測ったところ、ベースの配置は1種類(全曲同一)、サブメロの配置も1種類、メロディの
529
- * 隣接音程は77%が2半音以内、16小節の役割配置は定数で固定——つまり「同じ設計図の上で
530
- * 音名だけが違う曲」を量産していた。そこで次を曲ごとの引きに変えてある。
531
- *
532
- * - **曲の骨格をランダムに組む**。{@link SECTION_FORMS} から4セクションぶんを引く。
533
- * 固定するのは「1小節目はモチーフ提示」「B部にクライマックスが1回」「16小節目は終止」
534
- * の3点だけで、残りの配置は曲ごとに変わる。
535
- * - **メロディの書法を曲ごとに引く**({@link MelodyStyle})。走句の形・つなぎの形・
536
- * ロングトーンの形・終止形・モチーフの原型・跳躍の混ぜ具合を、曲ごとに選び直す。
537
- * - **跳躍を積極的に使う**。順次進行だけのメロディは「歌いやすい」が「印象に残らない」。
538
- * 跳躍が隣接音程に占める比率を {@link MIN_LEAP_RATIO}〜{@link MAX_LEAP_RATIO} に収め、
539
- * **跳躍の直後は反行の順次進行で埋める**(gap fill)という古典的な定石で歌える形に保つ。
540
- * - **サブメロを対旋律にする**。初版は和音構成音を1小節に1〜2個置くだけで、旋律と
541
- * 呼べる形をしていなかった。メロディと反行(contrary motion)する輪郭を持たせ、
542
- * 置き方も曲ごとに変える。ただし**単音・低密度・長音価**という形は崩さない——
543
- * おまかせマスタリングの役割推定がこの3点でサブメロを判定するため。
544
- * - **ベースに奏法を持たせる**。ルート4分打ち固定をやめ、オルタネイト/ウォーキング/
545
- * 8分ドライブ/シンコペ等から曲ごとに引く。
546
- *
547
- * ## 強拍に何を置くか(重み3階層)
548
- *
549
- * 和音の構成音には重みがある(ルート・5度=最重要/3度・7度=重要/それ以外=経過音)。
550
- * 強拍(小節頭と3拍目)では重みの高い音へ着地させ、弱拍は隣接音でつなぐ。
551
- * さらに**その瞬間の和音によって、同じ音でも重要度が変わる**。半音上に和音構成音が
552
- * 来るスケール音は「アボイドノート」として重み0とし、強拍・長い音価では使わない
553
- * (弱拍の経過音としてだけ通す)。{@link toneWeight} 参照。
554
- *
555
- * ## 「基準を満たす」から「候補から選ぶ」へ
556
- *
557
- * ここまでの設計でも、**受け入れ基準そのものが曲の構造を測っていなかった**。
558
- * 16小節の順番をシャッフルして曲を破壊しても、7項目のうち5つは値が1つも動かない。
559
- * 順序を見ていたのは隣接2音までの2項目だけで、モチーフの配置も盛り上がりの位置も
560
- * フレーズの呼応も評価対象外だった。しきい値をいくら引き直しても改善しようがない。
561
- *
562
- * そこで次の3点を変えてある。
563
- *
564
- * - **順序に依存する指標を作った**({@link file://./compose-metrics.ts})。
565
- * 小節どうしの自己相似プロファイル、フレーズの息継ぎ、クライマックスの単峰性、
566
- * 緊張カーブ、メロディとサブメロのコール&レスポンス。採点の重みは
567
- * {@link WEIGHTS} のとおり構造側へ半分以上を配分している。
568
- * - **合否ではなく点数にした**。ハード制約({@link HARD})に触れたものだけを捨て、
569
- * 残りは {@link DRAW_COUNT} 本の候補から**点数最大のものを選ぶ**。初版は
570
- * 「しきい値を全部満たした最初の1本」を返していたので、構造が良くても休符率が
571
- * 0.09なら捨てるし、しきい値さえ満たせば1本目で確定していた。
572
- * - **しきい値を人間の曲から採った**({@link CORPUS_BANDS})。手で決めた定数をやめ、
573
- * 実際のMIDIから同じ指標を抽出した分布の中央50%を満点にしている。
574
- * 較正は `scripts/calibrate-corpus.ts`。
575
- *
576
- * さらに、指標に最適化した結果として全曲が同じ統計値へ寄るのを防ぐため、直近に作った
577
- * 曲との距離を加点している({@link ComposeOptions.recent})。
578
- *
579
- * ## 「調が固定に聞こえる」を潰したこと
580
- *
581
- * 曲の調({@link ROOT_SHIFTS})は曲ごとに12調へ散らしてあるのに、続けて聴くと
582
- * どれも同じ調子に聞こえる、という状態が長く残っていた。参考曲91本と生成物を
583
- * **同じ物差しで測って**原因を特定した(`scripts/compare-corpus.ts`)。
584
- *
585
- * - **メロディが調の外の音を1音も出せなかった。** 音の並びは最後まで音階の度数
586
- * ({@link MAJOR_SCALE})で持っていて、{@link nearestChordTone} が `E7` の `G#` を
587
- * 返しても `semitoneToDegree` がその場で `G` へ丸めていた。実測で非ダイアトニック音は
588
- * 40曲・約4000音を測って**0音**(参考曲は音数比で中央値4%・p75で11%)。
589
- * 進行にセカンダリドミナントを入れておきながら、旋律だけが調に留まっていた。
590
- * {@link applyChromatic} と、アボイドノートを半音上の和音構成音へ解決させる分岐
591
- * ({@link shapeBar})で、和音の変化音・半音の経過音を通すようにしてある。
592
- * - **和音の側にも調の外が無かった。** 進行の候補が全部ハ長調/イ短調の
593
- * ダイアトニックだったので、借用和音(サブドミナントマイナー・bVII・裏コード)を
594
- * 候補に足した。
595
- *
596
- * ## 帯の内側で、どこに居るか
597
- *
598
- * 目標帯({@link CORPUS_BANDS})は指標ごとに独立して採った**周辺分布**なので、
599
- * p25〜p75 を一律に満点にすると**全部の帯の端に同時に居座る曲**も満点を取れる。
600
- * 実測がまさにそれで、参考曲と生成物の中央値を並べると
601
- *
602
- * 1小節の音数 6.3 / 5.2  順次進行 0.50 / 0.36  休符率 0.07 / 0.18
603
- * 跳躍率 0.37 / 0.51  音域 19 / 23半音
604
- *
605
- * と、**どの項目も帯の内側なのに揃って同じ側へ寄っていた**——「スカスカで跳ねて
606
- * ばかりの曲」は、周辺分布だけ見れば全項目が人間の範囲に収まる。帯の内側にも
607
- * 中央値へ向かう傾斜を付け(`centeredBand`)、測っていたのに採点していなかった
608
- * 密度({@link file://./compose-metrics.ts} の `DensityFeatures`)と順次進行の比率を
609
- * 採点項目に足した。
610
- *
611
- * ただし**採点だけでは密度は動かない**。候補40本はどれも同じ分布から引いた
612
- * ものなので、選抜しても中央値は1音も動かなかった。曲ごとに狙いの密度と休符率を
613
- * 先に決めて、それに近いリズム型を引くようにしてある(`targetNotesPerBar` /
614
- * `targetRestRatio`)。
615
- *
616
- * ## サブメロの制約が外れたこと
617
- *
618
- * サブメロは長らく「単音・低密度・長音価」の形しか書けなかった。おまかせマスタリングの
619
- * 役割推定がその3点でサブメロを判定していたため、外すと伴奏と誤判定されて楽器が
620
- * 変わってしまうからで、**ツールの都合が音楽を縛っていた**。`daw.ts` が simple モードで
621
- * トラックIDをそのまま役割として使うようになった(推定はMIDI取り込みと advanced モード
622
- * 専用に退いた)ので、この制約は無くなった。合いの手・ハモリ・対旋律・保続音を
623
- * {@link SubStyle} として持たせてある。
524
+ * 自動作曲マクロ。コード進行・メロディ・サブメロ・ハモリ・ベース・伴奏・パッドを
525
+ * まとめて組み立てる。曲の長さは選んだセクションで決まる
526
+ * ({@link file://./compose-sections.ts})。
527
+ *
528
+ * ## 組み立ての順番
529
+ *
530
+ * ①セクションの設計図を作る →②コード進行を割り当てる →③**各小節のリズム型を先に
531
+ * 決める** →④その上に音を乗せる。音を先に置いて音価を均等割りすると、どうやっても
532
+ * 「同じ長さの音が延々と続く」機械的な曲になる。
533
+ *
534
+ * 音の側は**2小節のモチーフ**を1つ作り、反復・セクエンツ・オクターブ上げの3通りに
535
+ * 変形して展開する。小楽節は【問い2小節】+【答え2小節】で、答えは問いのリズムを
536
+ * 受けて着地音だけを変える。
537
+ *
538
+ * ## 引いて、測って、選ぶ
539
+ *
540
+ * {@link DRAW_COUNT} 本の候補を独立に引き、{@link HARD} に触れたものだけを捨てて、
541
+ * 残りから点数最大のものを返す({@link evaluate})。合否ではなく点数にしてあるのは
542
+ * 「構造は良いが休符率が 0.09 だったので捨てる」を避けるため。
543
+ *
544
+ * 採点の目標帯({@link CORPUS_BANDS})は**人間が書いたMIDIから実測した分布**で、手で
545
+ * 決めた定数ではない。較正は `scripts/calibrate-corpus.ts`。帯の内側にも中央値へ向かう
546
+ * 傾斜を付けてある(`centeredBand`)——周辺分布を一律に満点にすると、全項目が帯の端へ
547
+ * 同時に寄った曲(スカスカで跳ねてばかりの曲)も満点を取れてしまう。
548
+ *
549
+ * 指標に最適化した結果として全曲が同じ統計値へ寄るのを防ぐため、直近に作った曲との
550
+ * 距離も加点する({@link ComposeOptions.recent})。
551
+ *
552
+ * ## 測り直し
553
+ *
554
+ * 生成物と参考コーパスを同じ物差しで並べるスクリプトが `scripts/compare-*.ts` にある
555
+ * (特徴量・小節ごとの密度・リズムの語彙・完全一致の反復・音高)。ここを触ったら
556
+ * 前後を比べる。耳で確かめるときは `scripts/export-samples.ts` で .mid を書き出す。
624
557
  */
625
558
 
626
559
  type ComposedNote = {
@@ -727,6 +660,10 @@ type ComposeResult = {
727
660
  sections: PlacedSection[];
728
661
  /** 曲の長さ(小節)。セクションの選び方で変わる。 */
729
662
  bars: number;
663
+ /** 歌の割り当て(ハモリ・デュエット)。{@link VocalPlan} */
664
+ vocal: VocalPlan;
665
+ /** 調のふるまい(平行調・トニック回避)。{@link TonalPlan} */
666
+ tonal: TonalPlan;
730
667
  /** 曲に合わせて組み込みから自動選択されたドラムパターン名(DRUM_PATTERNS のキー)。 */
731
668
  drum: string;
732
669
  /** 曲に合わせて組み込みから自動選択された楽器プリセット名(INSTRUMENT_PRESETS のキー)。 */
@@ -736,12 +673,68 @@ type ComposeResult = {
736
673
  bass: ComposedNote[];
737
674
  /** ハモリトラック。メロディの3度/6度上。サビセクションでのみ鳴る。 */
738
675
  harmony: ComposedNote[];
676
+ /** 2声目のハモリ。{@link VocalPlan.harmony2} が true のときだけ中身が入る。 */
677
+ harmony2: ComposedNote[];
678
+ /**
679
+ * 主旋律のオクターブ下の重ね({@link VocalPlan.octaveLayer})。音高は主旋律の
680
+ * ままで、トラック側のオクターブ設定で下げる。要所だけなので主旋律の一部。
681
+ */
682
+ octave: ComposedNote[];
739
683
  /** コードパッド。ストリングス/シンセパッド的なロングトーン。Bメロ以降で鳴る。 */
740
684
  pad: ComposedNote[];
741
685
  stats: ComposeStats;
742
686
  };
743
687
  /** 音価のシャノンエントロピー(bit)。全部同じ音価なら 0 になる。 */
744
688
  declare const durationEntropy: (durations: number[]) => number;
689
+ /**
690
+ * 歌の割り当て。**歌入り作曲**が、どのトラックに誰の声を当てるかを決めるのに使う。
691
+ *
692
+ * 歌モノの定石として、ハモリはサビ(または Bメロ)から入り、デュエットでは
693
+ * 掛け合いで交互に歌う。どちらもトラックが潤沢な advanced モードでだけ展開する。
694
+ * **ユーザーの操作パラメータにはしない**——曲ごとに自動で引く。
695
+ */
696
+ type DuetStyle = "none"
697
+ /** セクションごとに交代(1番のAメロはA、2番のAメロはB)。 */
698
+ | "section"
699
+ /** Aメロ・Bメロで2小節ごとに交代(問い=A、答え=B)。 */
700
+ | "phrase"
701
+ /** サビで2小節ごとに交代する掛け合いサビ。 */
702
+ | "chorus"
703
+ /** Aメロだけ交代し、あとは1人が歌う。 */
704
+ | "verse";
705
+ type VocalPlan = {
706
+ /**
707
+ * 2人目が歌う区間 `[開始ステップ, 終了ステップ)`。**小節番号ではなく区間で持つ**
708
+ * ——小節線でぴったり交代すると受け渡しが機械的に聞こえるので、次の人が
709
+ * 手前から食い気味に入れるようにしてある。
710
+ */
711
+ duetSpans: [number, number][];
712
+ duetStyle: DuetStyle;
713
+ /** ハモリが入るセクション種別。 */
714
+ harmonyKinds: SectionKind[];
715
+ /**
716
+ * 2声目のハモリを鳴らすか。参考曲(チョウチン少女 ch12/ch11/ch13)では
717
+ * **1声目が下〜ユニゾン寄り、2声目が上**で主旋律を挟む形になっていた。
718
+ */
719
+ harmony2: boolean;
720
+ /** 主旋律のオクターブ下を重ねるか(ハモリではなく厚みの層)。 */
721
+ octaveLayer: boolean;
722
+ };
723
+ /** 曲の調のふるまい。 */
724
+ type TonalPlan = {
725
+ /**
726
+ * 平行調へ振ったセクション種別。ハ長調とイ短調は同じ音の集合なので、調号も
727
+ * 仲介の和音も要らずに明暗だけが入れ替わる(`keyShift` は 0 のまま)。
728
+ */
729
+ relativeKinds: SectionKind[];
730
+ /**
731
+ * 平行調なら 0、同主調なら ±3。平行調は調号が変わらないのが利点なので 0 のまま、
732
+ * 同主調(ハ長調→ハ短調)は主音を保ったまま調号が3つ変わるので ±3 になる。
733
+ */
734
+ relativeShift: number;
735
+ /** トニックを避けて浮遊感を出す曲か。主和音を鳴らさず、主音へも着地しない。 */
736
+ floating: boolean;
737
+ };
745
738
  /**
746
739
  * 16小節の曲を組み立てる。
747
740
  *
@@ -787,11 +780,14 @@ declare const CORPUS_BANDS: {
787
780
  melodyRange: Band;
788
781
  notesPerBar: Band;
789
782
  shortNoteRatio: Band;
783
+ barDensityCv: Band;
784
+ densityCliff: Band;
790
785
  sim1: Band;
791
786
  sim2: Band;
792
787
  sim4: Band;
793
788
  sim8: Band;
794
789
  phraseBreath: Band;
790
+ turnRatio: Band;
795
791
  climaxPosition: Band;
796
792
  climaxPeaks: Band;
797
793
  complementarity: Band;
@@ -2778,11 +2774,13 @@ declare const isPlausibleMidiTranscription: (midi: unknown, selectedIndices: num
2778
2774
  * ドラム(ch10 = channel 9)のノートはスキップする。
2779
2775
  */
2780
2776
  declare const extractMidiPlacementsByTrack: (midi: unknown, selectedIndices: number[], trackIds: string[]) => MidiExtraction;
2777
+ type ExportMidiTrack = {
2778
+ notes: Note[];
2779
+ volume: number;
2780
+ program?: number;
2781
+ };
2781
2782
  type ExportMidiOptions = {
2782
- tracks: {
2783
- notes: Note[];
2784
- volume: number;
2785
- }[];
2783
+ tracks: ExportMidiTrack[];
2786
2784
  getDrumPattern?: (currentBar: number) => DrumPattern | null;
2787
2785
  drumVolume?: number;
2788
2786
  bpm: number;
@@ -3612,4 +3610,4 @@ declare const encodeWavPCM16: (channels: Float32Array[], sampleRate: number) =>
3612
3610
  /** Float32Array のチャンクを1本へ連結する。 */
3613
3611
  declare const concatFloat32: (chunks: Float32Array[]) => Float32Array;
3614
3612
 
3615
- export { A4_HZ, A4_UNITS, type AddNoteOptions, type AnyDrumPattern, type ApplyChordOptions, BREATH_MARK, type Band, CENTS_PER_UNIT, COMPOSE_KEYS, COMPOSE_MOOD_GROUPS, CORPUS_BANDS, CORPUS_SIZE, type ChordPatternType, type ChordPlacement, type ChordPlayerInstance, type ComposeKeyTarget, type ComposeMoodGroup, type ComposeMoodId, type ComposeOptions, type ComposeResult, type ComposeStats, type ComposedNote, type ConsumedSyllable, type CoreEventHandlers, type CustomVocalDef, DAW_CSS, DEFAULT_BPM, DEFAULT_EDO, DEFAULT_GATE, DEFAULT_PAN, DEFAULT_PLAYBACK_VELOCITY, DEFAULT_SECTIONS, DEFAULT_STEPS_PER_BAR, DEFAULT_VELOCITY, DEFAULT_VOCAL_VOLUME, DRUM_FONT, DRUM_KEYS, DRUM_PATTERNS, type DawInstance, type DawMode, type DawOptions, type DawViewState, type DrumPattern, type DrumPatternDef, type DtmStudio, type DtmStudioEngines, type DtmStudioOptions, EDO31_NAMES, type Edo, type ExportMidiOptions, FADE_IN_MARK, FADE_OUT_MARK, type FadeScheduleParams, GLOBAL_STORAGE_KEYS, GM_INSTRUMENT_NAMES, type GlobalStorageKey, INSTRUMENT_PRESETS, type InstrumentPreset, KEY_COUNT, KOE_BASE_URL, KOE_VOICEBANKS, KOE_VOICEBANK_LABELS, KOE_VOICEBANK_TERMS, type KeyMode, type KoeVoiceOptions, LinkedList, type LoopConfig, type LoopPoint, type LyricSyllable, type LyricSyllableKind, type LyricSyncData, type LyricTrack, type LyricsConductor, MACRO_STORAGE_KEYS, MAJOR_KEY_IDS, MAX_VOCAL_VOLUME, MICRO_STEP, MINOR_KEY_IDS, MMLCore, type MMLDisplayToken, type MMLNotePlacement, MML_END_MARKER, type MacroStorageKey, type MetricNote, type MetricOptions, type MidiExtraction, type MidiNote, type MidiNotePlacement, MidiSearchClient, type MidiSearchConfig, type MidiTrackAnalysis, type MmlMeta, type MmlPlayback, type MmlPlayerInstance, type MmlPlayerOptions, type ModeSwitchInstance, type ModeSwitchOptions, type MountChordPlayerOptions, type MountEditorOptions, type MountPlayerOptions, type Note, type NoteData, type NoteRemove, type OctaveUnisonMode, PITCH_ENCODING_VERSION, PITCH_MAP, PITCH_RANGE_END, PITCH_RANGE_START, PORTAMENTO_MARK, PREWARM_NOTES, type ParseMMLOptions, type ParseMidiFn, type ParsedMML, type PianoRollInstance, type PianoRollOptions, type PicotuneSearchParams, type PicotuneSong, type PitchSegment, type PitchToken, type PlacedSection, type PlayChordsOptions, type PlayDrumEvent, type PlayMmlOptions, type PlayNoteEvent, type PlayNoteOptions, type PlayPlacementsOptions, type PlaySingingMmlOptions, type PlaybackCue, type PlaybackState, type PresetSelectInstance, type PresetSelectOptions, type PreviewSoundCallback, REST_MARK, type RenderConfig, type Renderer, type ResolvedComposeKey, SECTION_LABELS, SECTION_ORDER, SECTION_SPECS, STOP_MARK, type SectionKind, type SectionSpec, type Sequencer, type SequencerOptions, type SequencerTrack, type SingingVoices, type SingingVoicesOptions, type StreamPlaybackOptions, type StreamVoiceNote, type StreamVoiceNoteOptions, type StreamVoiceTrack, type StructureFeatures, type Synth, TIE_MARK, TIE_MERGE_MAX_SEC, TRACKS_ADVANCED, TRACKS_SIMPLE, type TensionFeatures, type TieSourceNote, type ToolMode, type TrackConfig, UNITS_PER_EDO31_DEGREE, UNITS_PER_OCTAVE, UNITS_PER_SEMITONE, type Units, VIBRATO_MIN_SEC, VOICE_IMAGES, VOICE_IMAGE_KEY, type VoiceExpression, type VoiceModel, type VoiceRegistry, addUnits, analyzeMidiTracks, applyHarmonicFilter, applyMonophonic, band, buildChordPlacements, buildDrumPatternJson, buildNameToKeyMapping, buildSectionPlan, buildStreamVoiceNotes, chromaticStep, collectPitchTokens, complementarity, composeSong, concatFloat32, createAudioContext, createDtmStudio, createKlattVoice, createKoeVoice, createLyricsConductor, createPianoRoll, createRenderer, createSequencer, createSingingVoices, createSynth, createVoiceRegistry, decodeMml, decomposeToMonophonic, displayKana, durationEntropy, encodeMml, encodeWavPCM16, exportMIDI, extractDrumPatternFromNotes, extractMidiDrumPattern, extractMidiPlacements, extractMidiPlacementsByTrack, featureDistance, featureVector, fifthToStep, fifthToUnits, formatMmlMeta, freqFromPitch, generateRandomPattern, getComposeKeyDescription, getDrumPatternKeys, getMidiBPM, icon, injectStyles, isChordHeavyTrack, isNaturalLetter, isPlausibleMidiTranscription, isValidHttpUrl, keyCountFor, koeUrl, midiNote, midiToUnits, mountChordPlayer, mountDAW, mountMmlPlayer, naturalStep, normalizeDrumPatterns, normalizeLyrics, panToStereo, parseCustomVocals, parseLyrics, parseMML, parseMmlMeta, pitchV1ToUnits, playChords, playMML, playNote, playPlacements, playSingingMML, readGlobalBool, readGlobalNumber, readGlobalSetting, readMacroSections, readMacroSetting, resolveComposeKey, resolveDrumPattern, resolveLoopPoint, semitonesToUnits, shiftNotes, showLoadingOverlay, spelledToUnits, spellingToUnits, stripCustomVocals, stripLyrics, stripMmlMeta, structureFeatures, syllablesToText, tensionFeatures, transposeNotes, units, unitsPerRow, unitsPerStep, unitsToHz, unitsToMidi, unitsToMidiDetune, unitsToPitchV1, vocalVolumeToGain, writeGlobalSetting, writeMacroSections, writeMacroSetting };
3613
+ export { A4_HZ, A4_UNITS, type AddNoteOptions, type AnyDrumPattern, type ApplyChordOptions, BREATH_MARK, type Band, CENTS_PER_UNIT, COMPOSE_KEYS, COMPOSE_MOOD_GROUPS, CORPUS_BANDS, CORPUS_SIZE, type ChordPatternType, type ChordPlacement, type ChordPlayerInstance, type ComposeKeyTarget, type ComposeMoodGroup, type ComposeMoodId, type ComposeOptions, type ComposeResult, type ComposeStats, type ComposedNote, type ConsumedSyllable, type CoreEventHandlers, type CustomVocalDef, DAW_CSS, DEFAULT_BPM, DEFAULT_EDO, DEFAULT_GATE, DEFAULT_PAN, DEFAULT_PLAYBACK_VELOCITY, DEFAULT_SECTIONS, DEFAULT_STEPS_PER_BAR, DEFAULT_VELOCITY, DEFAULT_VOCAL_VOLUME, DRUM_FONT, DRUM_KEYS, DRUM_PATTERNS, type DawInstance, type DawMode, type DawOptions, type DawViewState, type DrumPattern, type DrumPatternDef, type DtmStudio, type DtmStudioEngines, type DtmStudioOptions, EDO31_NAMES, type Edo, type ExportMidiOptions, type ExportMidiTrack, FADE_IN_MARK, FADE_OUT_MARK, type FadeScheduleParams, GLOBAL_STORAGE_KEYS, GM_INSTRUMENT_NAMES, type GlobalStorageKey, INSTRUMENT_PRESETS, type InstrumentPreset, KEY_COUNT, KOE_BASE_URL, KOE_VOICEBANKS, KOE_VOICEBANK_LABELS, KOE_VOICEBANK_TERMS, type KeyMode, type KoeVoiceOptions, LinkedList, type LoopConfig, type LoopPoint, type LyricSyllable, type LyricSyllableKind, type LyricSyncData, type LyricTrack, type LyricsConductor, MACRO_STORAGE_KEYS, MAJOR_KEY_IDS, MAX_VOCAL_VOLUME, MICRO_STEP, MINOR_KEY_IDS, MMLCore, type MMLDisplayToken, type MMLNotePlacement, MML_END_MARKER, type MacroStorageKey, type MetricNote, type MetricOptions, type MidiExtraction, type MidiNote, type MidiNotePlacement, MidiSearchClient, type MidiSearchConfig, type MidiTrackAnalysis, type MmlMeta, type MmlPlayback, type MmlPlayerInstance, type MmlPlayerOptions, type ModeSwitchInstance, type ModeSwitchOptions, type MountChordPlayerOptions, type MountEditorOptions, type MountPlayerOptions, type Note, type NoteData, type NoteRemove, type OctaveUnisonMode, PITCH_ENCODING_VERSION, PITCH_MAP, PITCH_RANGE_END, PITCH_RANGE_START, PORTAMENTO_MARK, PREWARM_NOTES, type ParseMMLOptions, type ParseMidiFn, type ParsedMML, type PianoRollInstance, type PianoRollOptions, type PicotuneSearchParams, type PicotuneSong, type PitchSegment, type PitchToken, type PlacedSection, type PlayChordsOptions, type PlayDrumEvent, type PlayMmlOptions, type PlayNoteEvent, type PlayNoteOptions, type PlayPlacementsOptions, type PlaySingingMmlOptions, type PlaybackCue, type PlaybackState, type PresetSelectInstance, type PresetSelectOptions, type PreviewSoundCallback, REST_MARK, type RenderConfig, type Renderer, type ResolvedComposeKey, SECTION_LABELS, SECTION_ORDER, SECTION_SPECS, STOP_MARK, type SectionKind, type SectionSpec, type Sequencer, type SequencerOptions, type SequencerTrack, type SingingVoices, type SingingVoicesOptions, type StreamPlaybackOptions, type StreamVoiceNote, type StreamVoiceNoteOptions, type StreamVoiceTrack, type StructureFeatures, type Synth, TIE_MARK, TIE_MERGE_MAX_SEC, TRACKS_ADVANCED, TRACKS_SIMPLE, type TensionFeatures, type TieSourceNote, type ToolMode, type TrackConfig, UNITS_PER_EDO31_DEGREE, UNITS_PER_OCTAVE, UNITS_PER_SEMITONE, type Units, VIBRATO_MIN_SEC, VOICE_IMAGES, VOICE_IMAGE_KEY, type VoiceExpression, type VoiceModel, type VoiceRegistry, addUnits, analyzeMidiTracks, applyHarmonicFilter, applyMonophonic, band, buildChordPlacements, buildDrumPatternJson, buildNameToKeyMapping, buildSectionPlan, buildStreamVoiceNotes, chromaticStep, collectPitchTokens, complementarity, composeSong, concatFloat32, createAudioContext, createDtmStudio, createKlattVoice, createKoeVoice, createLyricsConductor, createPianoRoll, createRenderer, createSequencer, createSingingVoices, createSynth, createVoiceRegistry, decodeMml, decomposeToMonophonic, displayKana, durationEntropy, encodeMml, encodeWavPCM16, exportMIDI, extractDrumPatternFromNotes, extractMidiDrumPattern, extractMidiPlacements, extractMidiPlacementsByTrack, featureDistance, featureVector, fifthToStep, fifthToUnits, formatMmlMeta, freqFromPitch, generateRandomPattern, getComposeKeyDescription, getDrumPatternKeys, getMidiBPM, icon, injectStyles, isChordHeavyTrack, isNaturalLetter, isPlausibleMidiTranscription, isValidHttpUrl, keyCountFor, koeUrl, midiNote, midiToUnits, mountChordPlayer, mountDAW, mountMmlPlayer, naturalStep, normalizeDrumPatterns, normalizeLyrics, panToStereo, parseCustomVocals, parseLyrics, parseMML, parseMmlMeta, pitchV1ToUnits, playChords, playMML, playNote, playPlacements, playSingingMML, programOfInstrumentName, readGlobalBool, readGlobalNumber, readGlobalSetting, readMacroSections, readMacroSetting, resolveComposeKey, resolveDrumPattern, resolveLoopPoint, semitonesToUnits, shiftNotes, showLoadingOverlay, spelledToUnits, spellingToUnits, stripCustomVocals, stripLyrics, stripMmlMeta, structureFeatures, syllablesToText, tensionFeatures, transposeNotes, units, unitsPerRow, unitsPerStep, unitsToHz, unitsToMidi, unitsToMidiDetune, unitsToPitchV1, vocalVolumeToGain, writeGlobalSetting, writeMacroSections, writeMacroSetting };