@onjmin/dtm 0.1.101 → 0.1.102

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/README.md CHANGED
@@ -75,6 +75,33 @@ const chordPlayer = studio.mountChordPlayer(chordEl, "| C | G | Am | F |", {
75
75
  chordPlayer.setVolume(65);
76
76
  ```
77
77
 
78
+ ### 「曲自体の音量」と「聴く人の音量」を分けて扱いたい場合
79
+
80
+ 上記の `masterVolume` / `volume` は**曲データが持つ音量**です(MML の `#volume=` と往復し、
81
+ `daw.loadMML()` を呼ぶたびにそのMMLの値で上書きされます)。SNS のフィードのように、
82
+ 1つの `studio` を複数の投稿・複数の埋め込みプレイヤーで共有し、かつ「読者が自分の好みで
83
+ サイト全体の音量を1つ調整したい」というケースでは、曲側の値をいじらずに
84
+ `studio.setMasterVolume()` を使ってください。これは `studio.masterGain`(全ての
85
+ `mountEditor` / `mountPlayer` / `mountChordPlayer` / `playSingingMML` インスタンスが
86
+ 最終的に合流する出力段の GainNode)を直接動かすため、曲データやモード切替・
87
+ `loadMML()` の影響を一切受けません。
88
+
89
+ ```ts
90
+ const studio = await createDtmStudio();
91
+
92
+ // 読者側の「サイト全体の音量」— 曲を跨いで一度だけ管理すればよい
93
+ studio.setMasterVolume(userPreferredVolume); // 0-100
94
+
95
+ // 曲側の masterVolume/volume には触れない(#volume= が持つ作曲者の意図をそのまま尊重する)
96
+ const daw = studio.mountEditor(editorEl, { initialMML: mml });
97
+ const player = studio.mountPlayer(playerEl, mml);
98
+ ```
99
+
100
+ `DawInstance.setMasterVolume` / `MmlPlayerOptions.masterVolume` と
101
+ `DtmStudio.setMasterVolume` は同名ですが別物です。前者は「曲自体の音量」(`#volume=`
102
+ と同期し、曲を読み込むたびに上書きされる)、後者は「聴く人の音量」(曲データと
103
+ 無関係に出力段へ一度だけ掛かる)という別レイヤーを担っています。
104
+
78
105
  ---
79
106
 
80
107
  ## 録音・動画エンコード用音声ストリームの取得 (`MediaStream`)
package/dist/index.d.mts CHANGED
@@ -1162,9 +1162,15 @@ type DawInstance = {
1162
1162
  applyPatch: (trackId: string, added: NoteData[], removed: NoteRemove[]) => void;
1163
1163
  /** リモートから受信した歌詞・UTAU設定を適用する。 */
1164
1164
  applyLyrics: (trackId: string, data: LyricSyncData) => void;
1165
- /** マスタ音量を 0-100 で変更する。 */
1165
+ /**
1166
+ * このDAWインスタンス自身が持つ「曲自体の音量」(`#volume=`)を 0-100 で変更する。
1167
+ * `getMML()`で出力・`loadMML()`で復元される、曲データの一部として永続化される値。
1168
+ * `loadMML()` を呼ぶたびにそのMMLの `#volume=` で上書きされるため、リスナー側の
1169
+ * 音量の好みを別途乗せたい場合は代わりに `DtmStudio.setMasterVolume`
1170
+ * (`studio.masterGain`、曲データと無関係な出力段ゲイン)を使うこと。
1171
+ */
1166
1172
  setMasterVolume: (volume: number) => void;
1167
- /** マスタ音量を 0-100 で変更する(`setMasterVolume` のエイリアス)。 */
1173
+ /** `setMasterVolume` のエイリアス。 */
1168
1174
  setVolume: (volume: number) => void;
1169
1175
  /** ドラム音量を 0-100 で変更する。 */
1170
1176
  setDrumVolume: (volume: number) => void;
@@ -2123,9 +2129,12 @@ type DtmStudioEngines = {
2123
2129
  type DtmStudioOptions = {
2124
2130
  /** 既存の AudioContext を使う(未指定なら内部生成)。 */
2125
2131
  audioContext?: AudioContext;
2126
- /** マスター音量 0-1(楽器・歌声)。既定 1。 */
2132
+ /**
2133
+ * マスター音量 0-100(楽器・歌声)。既定100。
2134
+ * ライブラリ内の他の音量パラメータ(`setMasterVolume` 等)と同じ0-100スケール。
2135
+ */
2127
2136
  masterVolume?: number;
2128
- /** ドラム音量 0-1。既定 1。 */
2137
+ /** ドラム音量 0-100。既定100。 */
2129
2138
  drumVolume?: number;
2130
2139
  /** マスタリバーブの掛かり具合 0-100。既定0(オフ)。全トラックへ一律で掛かる。 */
2131
2140
  reverbAmount?: number;
@@ -2351,9 +2360,18 @@ type DtmStudio = {
2351
2360
  * getDaw() で現在の DawInstance を取得できる(mountPresetSelect の getDaw に渡せる)。
2352
2361
  */
2353
2362
  mountModeSwitch: (target: HTMLElement, options: ModeSwitchOptions) => ModeSwitchInstance;
2354
- /** マスタ音量を 0-100 で変更する。 */
2363
+ /**
2364
+ * studio 全体(このstudioを共有する全ての mountEditor / mountPlayer / mountChordPlayer /
2365
+ * playSingingMML インスタンス)の出力段ゲインを 0-100 で変更する。
2366
+ *
2367
+ * これは「聴く人(リスナー)側の音量設定」用のノブで、曲データとは無関係に
2368
+ * オーディオグラフの最終段(`studio.masterGain`)に一度だけ掛かる。
2369
+ * `DawInstance.setMasterVolume` / `MmlPlayerOptions.masterVolume`(`#volume=`
2370
+ * と往復する“曲自体が持つ音量”)とは別物なので混同しないこと。
2371
+ * `daw.loadMML()` や `#volume=` の内容に一切影響されない。
2372
+ */
2355
2373
  setMasterVolume: (volume: number) => void;
2356
- /** マスタ音量を 0-100 で変更する(`setMasterVolume` のエイリアス)。 */
2374
+ /** `setMasterVolume` のエイリアス。 */
2357
2375
  setVolume: (volume: number) => void;
2358
2376
  /** マスタリバーブの掛かり具合を 0-100 で変更する。 */
2359
2377
  setReverbAmount: (amount: number) => void;
package/dist/index.d.ts CHANGED
@@ -1162,9 +1162,15 @@ type DawInstance = {
1162
1162
  applyPatch: (trackId: string, added: NoteData[], removed: NoteRemove[]) => void;
1163
1163
  /** リモートから受信した歌詞・UTAU設定を適用する。 */
1164
1164
  applyLyrics: (trackId: string, data: LyricSyncData) => void;
1165
- /** マスタ音量を 0-100 で変更する。 */
1165
+ /**
1166
+ * このDAWインスタンス自身が持つ「曲自体の音量」(`#volume=`)を 0-100 で変更する。
1167
+ * `getMML()`で出力・`loadMML()`で復元される、曲データの一部として永続化される値。
1168
+ * `loadMML()` を呼ぶたびにそのMMLの `#volume=` で上書きされるため、リスナー側の
1169
+ * 音量の好みを別途乗せたい場合は代わりに `DtmStudio.setMasterVolume`
1170
+ * (`studio.masterGain`、曲データと無関係な出力段ゲイン)を使うこと。
1171
+ */
1166
1172
  setMasterVolume: (volume: number) => void;
1167
- /** マスタ音量を 0-100 で変更する(`setMasterVolume` のエイリアス)。 */
1173
+ /** `setMasterVolume` のエイリアス。 */
1168
1174
  setVolume: (volume: number) => void;
1169
1175
  /** ドラム音量を 0-100 で変更する。 */
1170
1176
  setDrumVolume: (volume: number) => void;
@@ -2123,9 +2129,12 @@ type DtmStudioEngines = {
2123
2129
  type DtmStudioOptions = {
2124
2130
  /** 既存の AudioContext を使う(未指定なら内部生成)。 */
2125
2131
  audioContext?: AudioContext;
2126
- /** マスター音量 0-1(楽器・歌声)。既定 1。 */
2132
+ /**
2133
+ * マスター音量 0-100(楽器・歌声)。既定100。
2134
+ * ライブラリ内の他の音量パラメータ(`setMasterVolume` 等)と同じ0-100スケール。
2135
+ */
2127
2136
  masterVolume?: number;
2128
- /** ドラム音量 0-1。既定 1。 */
2137
+ /** ドラム音量 0-100。既定100。 */
2129
2138
  drumVolume?: number;
2130
2139
  /** マスタリバーブの掛かり具合 0-100。既定0(オフ)。全トラックへ一律で掛かる。 */
2131
2140
  reverbAmount?: number;
@@ -2351,9 +2360,18 @@ type DtmStudio = {
2351
2360
  * getDaw() で現在の DawInstance を取得できる(mountPresetSelect の getDaw に渡せる)。
2352
2361
  */
2353
2362
  mountModeSwitch: (target: HTMLElement, options: ModeSwitchOptions) => ModeSwitchInstance;
2354
- /** マスタ音量を 0-100 で変更する。 */
2363
+ /**
2364
+ * studio 全体(このstudioを共有する全ての mountEditor / mountPlayer / mountChordPlayer /
2365
+ * playSingingMML インスタンス)の出力段ゲインを 0-100 で変更する。
2366
+ *
2367
+ * これは「聴く人(リスナー)側の音量設定」用のノブで、曲データとは無関係に
2368
+ * オーディオグラフの最終段(`studio.masterGain`)に一度だけ掛かる。
2369
+ * `DawInstance.setMasterVolume` / `MmlPlayerOptions.masterVolume`(`#volume=`
2370
+ * と往復する“曲自体が持つ音量”)とは別物なので混同しないこと。
2371
+ * `daw.loadMML()` や `#volume=` の内容に一切影響されない。
2372
+ */
2355
2373
  setMasterVolume: (volume: number) => void;
2356
- /** マスタ音量を 0-100 で変更する(`setMasterVolume` のエイリアス)。 */
2374
+ /** `setMasterVolume` のエイリアス。 */
2357
2375
  setVolume: (volume: number) => void;
2358
2376
  /** マスタリバーブの掛かり具合を 0-100 で変更する。 */
2359
2377
  setReverbAmount: (amount: number) => void;
package/dist/index.js CHANGED
@@ -19156,9 +19156,9 @@ var createDtmStudio = async (options = {}) => {
19156
19156
  });
19157
19157
  const audioCtx = options.audioContext ?? new AudioContext({ sampleRate: 44100 });
19158
19158
  const masterGain = audioCtx.createGain();
19159
- masterGain.gain.value = options.masterVolume ?? 1;
19159
+ masterGain.gain.value = (options.masterVolume ?? 100) / 100;
19160
19160
  const drumGain = audioCtx.createGain();
19161
- drumGain.gain.value = options.drumVolume ?? 1;
19161
+ drumGain.gain.value = (options.drumVolume ?? 100) / 100;
19162
19162
  drumGain.connect(masterGain);
19163
19163
  let reverbDecaySec = options.reverbDecay ?? DEFAULT_REVERB_DECAY_SEC;
19164
19164
  const reverbPreDelay = audioCtx.createDelay(MAX_REVERB_PREDELAY_MS / 1e3);
package/dist/index.mjs CHANGED
@@ -19022,9 +19022,9 @@ var createDtmStudio = async (options = {}) => {
19022
19022
  });
19023
19023
  const audioCtx = options.audioContext ?? new AudioContext({ sampleRate: 44100 });
19024
19024
  const masterGain = audioCtx.createGain();
19025
- masterGain.gain.value = options.masterVolume ?? 1;
19025
+ masterGain.gain.value = (options.masterVolume ?? 100) / 100;
19026
19026
  const drumGain = audioCtx.createGain();
19027
- drumGain.gain.value = options.drumVolume ?? 1;
19027
+ drumGain.gain.value = (options.drumVolume ?? 100) / 100;
19028
19028
  drumGain.connect(masterGain);
19029
19029
  let reverbDecaySec = options.reverbDecay ?? DEFAULT_REVERB_DECAY_SEC;
19030
19030
  const reverbPreDelay = audioCtx.createDelay(MAX_REVERB_PREDELAY_MS / 1e3);
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "author": "onjmin",
3
3
  "license": "MIT",
4
4
  "name": "@onjmin/dtm",
5
- "version": "0.1.101",
5
+ "version": "0.1.102",
6
6
  "description": "MMLを中間言語に用いた、モバイルファーストなDAW / ピアノロール打ち込みコンポーネント",
7
7
  "homepage": "https://onjmin.github.io/dtm",
8
8
  "repository": {