@onjmin/dtm 0.1.101 → 1.0.0
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 +27 -0
- package/dist/index.d.mts +24 -6
- package/dist/index.d.ts +24 -6
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/package.json +3 -1
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
2132
|
+
/**
|
|
2133
|
+
* マスター音量 0-100(楽器・歌声)。既定100。
|
|
2134
|
+
* ライブラリ内の他の音量パラメータ(`setMasterVolume` 等)と同じ0-100スケール。
|
|
2135
|
+
*/
|
|
2127
2136
|
masterVolume?: number;
|
|
2128
|
-
/** ドラム音量 0-
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
2132
|
+
/**
|
|
2133
|
+
* マスター音量 0-100(楽器・歌声)。既定100。
|
|
2134
|
+
* ライブラリ内の他の音量パラメータ(`setMasterVolume` 等)と同じ0-100スケール。
|
|
2135
|
+
*/
|
|
2127
2136
|
masterVolume?: number;
|
|
2128
|
-
/** ドラム音量 0-
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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 ??
|
|
19159
|
+
masterGain.gain.value = (options.masterVolume ?? 100) / 100;
|
|
19160
19160
|
const drumGain = audioCtx.createGain();
|
|
19161
|
-
drumGain.gain.value = options.drumVolume ??
|
|
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 ??
|
|
19025
|
+
masterGain.gain.value = (options.masterVolume ?? 100) / 100;
|
|
19026
19026
|
const drumGain = audioCtx.createGain();
|
|
19027
|
-
drumGain.gain.value = options.drumVolume ??
|
|
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.
|
|
5
|
+
"version": "1.0.0",
|
|
6
6
|
"description": "MMLを中間言語に用いた、モバイルファーストなDAW / ピアノロール打ち込みコンポーネント",
|
|
7
7
|
"homepage": "https://onjmin.github.io/dtm",
|
|
8
8
|
"repository": {
|
|
@@ -63,6 +63,8 @@
|
|
|
63
63
|
"build": "rimraf dist && tsup && biome format src --write",
|
|
64
64
|
"check": "biome check src --write",
|
|
65
65
|
"patch": "pnpm version patch",
|
|
66
|
+
"minor": "pnpm version minor",
|
|
67
|
+
"major": "pnpm version major",
|
|
66
68
|
"publish-dangerous-dont-use-this-command": "pnpm publish --access public"
|
|
67
69
|
}
|
|
68
70
|
}
|