@onjmin/dtm 0.1.83 → 0.1.84
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 +1 -1
- package/dist/index.d.mts +80 -4
- package/dist/index.d.ts +80 -4
- package/dist/index.js +696 -296
- package/dist/index.mjs +695 -296
- package/dist/voice-worker.js +175 -13
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -371,7 +371,7 @@ const cp = mountChordPlayer(document.getElementById("chord-app"), "| C | G | Am
|
|
|
371
371
|
|
|
372
372
|
- モデルに `klatt` を指定すると内蔵フォルマント合成(音源ロード不要)。
|
|
373
373
|
- 内蔵 UTAU 音源(@onjmin/koe)キーワード:
|
|
374
|
-
`tsukuyomi` / `rino` / `roze` / `ruko_male` / `ruko_female` / `teto` / `shiyo` / `rei` / `mgroid` / `motroid` / `nynroid`。
|
|
374
|
+
`tsukuyomi` / `rino` / `roze` / `uc` / `ruko_male` / `ruko_female` / `teto` / `shiyo` / `rei` / `mgroid` / `motroid` / `nynroid`。
|
|
375
375
|
- `createDtmStudio` を使えば歌声は自動で配線されます。低レベル API で使う場合は
|
|
376
376
|
`createSingingVoices` の戻り値を `mountDAW` / `mountMmlPlayer` の `singingVoices` に渡してください。
|
|
377
377
|
|
package/dist/index.d.mts
CHANGED
|
@@ -129,6 +129,24 @@ declare const resolveDrumPattern: (name: string, dict: Record<string, DrumPatter
|
|
|
129
129
|
declare const DRUM_PATTERNS: Record<string, DrumPatternDef<DrumPattern>>;
|
|
130
130
|
declare const getDrumPatternKeys: (name: string, dict: Record<string, AnyDrumPattern | DrumPatternDef>) => number[];
|
|
131
131
|
|
|
132
|
+
/**
|
|
133
|
+
* 自動ビブラート(ロングトーンに自動で掛けるピッチLFO)の定数と曲線生成。
|
|
134
|
+
*
|
|
135
|
+
* メインスレッド({@link file://./lyrics.ts} の local backend)とWorker
|
|
136
|
+
* ({@link file://./voice-worker.ts})の両方から使う共通ロジックなのでここへ切り出す。
|
|
137
|
+
* 実際のLFOは koe の `Worldline.renderNote` が受け取る `CurveInput`(関数)として渡す
|
|
138
|
+
* だけで、koe自身は「ビブラートとは何か」を知らない — 表現の中身はdtm側の責務。
|
|
139
|
+
*/
|
|
140
|
+
/**
|
|
141
|
+
* 自動ビブラートを掛ける最短ノート長(秒)。テンポに関わらず一定(実時間基準)。
|
|
142
|
+
* ビブラート(5.5Hz程度)が最低1周期以上揺れきるには ~180ms 要るが、聴感上わかる
|
|
143
|
+
* 「歌っぽさ」を出すには2周期分は欲しいため、余裕を見て350msを既定閾値とする。
|
|
144
|
+
* これより短い音符は対象外(1周期も揺れきらず、ただの音程ブレとして不自然に響く)。
|
|
145
|
+
* beat/BPM基準ではなくms基準にしているのは、同じ「1拍」でもテンポが変われば実時間の
|
|
146
|
+
* 長さが変わり、ビブラートが自然に聞こえるかどうかは実時間側に依存するため。
|
|
147
|
+
*/
|
|
148
|
+
declare const VIBRATO_MIN_SEC = 0.35;
|
|
149
|
+
|
|
132
150
|
/**
|
|
133
151
|
* MML歌詞拡張 — 解析・正規化・同期(ヘッドレス)と、任意の歌唱合成ヘルパ。
|
|
134
152
|
*
|
|
@@ -259,12 +277,12 @@ type VoiceModel = {
|
|
|
259
277
|
* (モデル内部状態に依存しないので、同一モデルを複数トラックで共有しても干渉しない)。
|
|
260
278
|
* 合成不能(該当音素なし・無声)なら null。klatt 等の軽量モデルは未実装でよい。
|
|
261
279
|
*/
|
|
262
|
-
renderToCache?: (syllable: LyricSyllable, prevVowel: string, pitch: number, durationMs: number) => Promise<string | null>;
|
|
280
|
+
renderToCache?: (syllable: LyricSyllable, prevVowel: string, pitch: number, durationMs: number, vibrato?: boolean) => Promise<string | null>;
|
|
263
281
|
/**
|
|
264
282
|
* {@link renderToCache} 済みのバッファを絶対時刻 t0(AudioContextクロック秒)へスケジュールする。
|
|
265
283
|
* t0 は未来の任意時刻でよく、再生はオーディオスレッドが担うのでメインスレッドのもたつきに影響されない。
|
|
266
284
|
*/
|
|
267
|
-
scheduleCached?: (key: string, t0: number, peak: number, pan: number) => void;
|
|
285
|
+
scheduleCached?: (key: string, t0: number, peak: number, pan: number, reverbSend?: number) => void;
|
|
268
286
|
/** スケジュール済みの発音をすべて即停止する(停止・一時停止・シーク時)。 */
|
|
269
287
|
stopAll?: () => void;
|
|
270
288
|
};
|
|
@@ -277,7 +295,7 @@ type VoiceModel = {
|
|
|
277
295
|
* 戻り値の VoiceModel は (音節, PlayNoteEvent) を受け取り、
|
|
278
296
|
* `ctx.currentTime + e.when` のタイミングで destination へ発音する。
|
|
279
297
|
*/
|
|
280
|
-
declare const createKlattVoice: (ctx: AudioContext, destination: AudioNode) => VoiceModel;
|
|
298
|
+
declare const createKlattVoice: (ctx: AudioContext, destination: AudioNode, reverbBus?: AudioNode) => VoiceModel;
|
|
281
299
|
/** koe音源(.koe)が置かれているパブリックバケットのベースURL */
|
|
282
300
|
declare const KOE_BASE_URL = "https://pub-12482a6b5cbc4c9e906b2e1904cabae5.r2.dev";
|
|
283
301
|
/**
|
|
@@ -334,6 +352,12 @@ type KoeVoiceOptions = {
|
|
|
334
352
|
* 省略時は従来どおりメインスレッドで合成する(後方互換)。
|
|
335
353
|
*/
|
|
336
354
|
voiceWorkerUrl?: string;
|
|
355
|
+
/**
|
|
356
|
+
* マスタリバーブのバス(センド先)。指定時のみ、ノートごとの `reverbSend` に応じて
|
|
357
|
+
* ドライ経路とは別にこのノードへ送る。未指定ならリバーブ送りは常にスキップされる
|
|
358
|
+
* (=トラックごとの `r` トークンを書いてもリバーブが掛からない)。
|
|
359
|
+
*/
|
|
360
|
+
reverbBus?: AudioNode;
|
|
337
361
|
};
|
|
338
362
|
/**
|
|
339
363
|
* @onjmin/koe の音源(UTAU由来 .koe)で1音節を歌う {@link VoiceModel} を生成する。
|
|
@@ -368,6 +392,17 @@ type StreamVoiceTrack = {
|
|
|
368
392
|
volume: number;
|
|
369
393
|
/** ステレオ定位 -1〜+1。 */
|
|
370
394
|
pan: number;
|
|
395
|
+
/**
|
|
396
|
+
* 自動ビブラート ON/OFF。ONでも全ノートには掛からず、{@link VIBRATO_MIN_SEC} 以上の
|
|
397
|
+
* ロングトーンにだけ自動適用される(短い音符は不自然になるため対象外)。
|
|
398
|
+
*/
|
|
399
|
+
vibrato?: boolean;
|
|
400
|
+
/**
|
|
401
|
+
* マスタリバーブへのセンド量 0-1。既定0(マスタリバーブが掛からない)。
|
|
402
|
+
* マスタリバーブ自体のつまみ(残響の質・量)とは独立に、このトラックをどれだけ
|
|
403
|
+
* リバーブバスへ送るかを個別に決める。
|
|
404
|
+
*/
|
|
405
|
+
reverbSend?: number;
|
|
371
406
|
/** 発音順(startSec昇順)の歌唱ノート列。 */
|
|
372
407
|
notes: StreamVoiceNote[];
|
|
373
408
|
};
|
|
@@ -458,6 +493,13 @@ type SingingVoicesOptions = {
|
|
|
458
493
|
* 省略時は従来どおりメインスレッドで合成する。
|
|
459
494
|
*/
|
|
460
495
|
voiceWorkerUrl?: string;
|
|
496
|
+
/**
|
|
497
|
+
* マスタリバーブのバス(センド先)。指定すると、各歌詞トラックの `reverb`(`r`トークン)
|
|
498
|
+
* に応じて klatt/koe いずれの音源もこのノードへセンドできるようになる。未指定なら
|
|
499
|
+
* トラック側で `r` を指定してもリバーブは掛からない(studio.ts がマスタの
|
|
500
|
+
* Convolver 入力を渡す想定)。
|
|
501
|
+
*/
|
|
502
|
+
reverbBus?: AudioNode;
|
|
461
503
|
};
|
|
462
504
|
/**
|
|
463
505
|
* klatt と koe音源を一括で扱う {@link SingingVoices} を生成する。
|
|
@@ -562,6 +604,8 @@ type LyricSyncData = {
|
|
|
562
604
|
vocalGate: number;
|
|
563
605
|
vocalPan: number;
|
|
564
606
|
vocalOctave: number;
|
|
607
|
+
vocalVibrato?: boolean;
|
|
608
|
+
vocalReverb?: number;
|
|
565
609
|
};
|
|
566
610
|
/** パッチ送受信用ノートデータ(ローカルIDを持たない)。 */
|
|
567
611
|
type NoteData = {
|
|
@@ -639,6 +683,11 @@ type PlayNoteEvent = {
|
|
|
639
683
|
syllable?: LyricSyllable;
|
|
640
684
|
/** syllable を歌う合成モデル名("klatt" 等)。syllable とセットで届く */
|
|
641
685
|
voiceModel?: string;
|
|
686
|
+
/**
|
|
687
|
+
* マスタリバーブへのセンド量 0-1(既定0)。歌詞トラックの個別リバーブ設定を
|
|
688
|
+
* 反映する。合成側はドライ経路とは別にこの割合だけリバーブバスへ送ればよい。
|
|
689
|
+
*/
|
|
690
|
+
reverbSend?: number;
|
|
642
691
|
};
|
|
643
692
|
type LyricSyllable = {
|
|
644
693
|
/** 表示用かな("きょ" 等。長音は置換後の母音かな) */
|
|
@@ -678,6 +727,20 @@ type LyricTrack = {
|
|
|
678
727
|
* MMLでは `@@n klatt o-1 …` のように o トークンで付与する。
|
|
679
728
|
*/
|
|
680
729
|
octave?: number;
|
|
730
|
+
/**
|
|
731
|
+
* 自動ビブラート ON/OFF。既定false。
|
|
732
|
+
* ONでも全ノートに掛かるわけではなく、一定の長さ以上(ロングトーン)のノートにだけ
|
|
733
|
+
* 自動で適用される(短い音符は1周期も揺れきらず不自然になるため対象外)。
|
|
734
|
+
* MMLでは `@@n klatt b1 …` のように b トークンで付与する。
|
|
735
|
+
*/
|
|
736
|
+
vibrato?: boolean;
|
|
737
|
+
/**
|
|
738
|
+
* このボーカルトラック個別のリバーブセンド量 0-100。既定0(マスタリバーブの影響を受けない)。
|
|
739
|
+
* マスタリバーブのつまみ(全トラック共通の残響そのもの)とは別軸で、
|
|
740
|
+
* 「このトラックをどれだけリバーブバスへ送るか」を個別に決める。
|
|
741
|
+
* MMLでは `@@n klatt r50 …` のように r トークンで付与する。
|
|
742
|
+
*/
|
|
743
|
+
reverb?: number;
|
|
681
744
|
/** 正規化済み音節列 */
|
|
682
745
|
syllables: LyricSyllable[];
|
|
683
746
|
/**
|
|
@@ -775,6 +838,13 @@ type DawOptions = {
|
|
|
775
838
|
masterVolume?: number;
|
|
776
839
|
/** ドラム音量 0-100。既定80。 */
|
|
777
840
|
drumVolume?: number;
|
|
841
|
+
/**
|
|
842
|
+
* マスタリバーブの掛かり具合 0-100。既定0(オフ)。
|
|
843
|
+
* 全トラック(楽器・歌唱とも)に一律で掛かるマスタエフェクト。
|
|
844
|
+
*/
|
|
845
|
+
reverbAmount?: number;
|
|
846
|
+
/** マスタリバーブのつまみが動かされたときに呼ばれる(0-100)。実際の音声処理は呼び出し側(studio)が担う。 */
|
|
847
|
+
onReverbChange?: (amount: number) => void;
|
|
778
848
|
parseMidi?: ParseMidiFn;
|
|
779
849
|
/**
|
|
780
850
|
* 動作モード({@link DawMode})。
|
|
@@ -864,6 +934,8 @@ type DawInstance = {
|
|
|
864
934
|
setVolume: (volume: number) => void;
|
|
865
935
|
/** ドラム音量を 0-100 で変更する。 */
|
|
866
936
|
setDrumVolume: (volume: number) => void;
|
|
937
|
+
/** マスタリバーブの掛かり具合を 0-100 で変更する。 */
|
|
938
|
+
setReverbAmount: (amount: number) => void;
|
|
867
939
|
/** リモートから受信したトラック個別楽器を適用する(`onTrackInstrumentChange` は発火しない)。 */
|
|
868
940
|
applyTrackInstrument: (trackIndex: number, instrumentName: string) => void;
|
|
869
941
|
/**
|
|
@@ -1732,6 +1804,8 @@ type DtmStudioOptions = {
|
|
|
1732
1804
|
masterVolume?: number;
|
|
1733
1805
|
/** ドラム音量 0-1。既定 1。 */
|
|
1734
1806
|
drumVolume?: number;
|
|
1807
|
+
/** マスタリバーブの掛かり具合 0-100。既定0(オフ)。全トラックへ一律で掛かる。 */
|
|
1808
|
+
reverbAmount?: number;
|
|
1735
1809
|
/**
|
|
1736
1810
|
* 最終出力先の AudioNode。未指定時は audioCtx.destination(スピーカー)。
|
|
1737
1811
|
* MediaStreamAudioDestinationNode や GainNode を指定できます。
|
|
@@ -1931,6 +2005,8 @@ type DtmStudio = {
|
|
|
1931
2005
|
setMasterVolume: (volume: number) => void;
|
|
1932
2006
|
/** マスタ音量を 0-100 で変更する(`setMasterVolume` のエイリアス)。 */
|
|
1933
2007
|
setVolume: (volume: number) => void;
|
|
2008
|
+
/** マスタリバーブの掛かり具合を 0-100 で変更する。 */
|
|
2009
|
+
setReverbAmount: (amount: number) => void;
|
|
1934
2010
|
/** AudioContext を閉じ、生成物を破棄する。 */
|
|
1935
2011
|
dispose: () => void;
|
|
1936
2012
|
};
|
|
@@ -2006,4 +2082,4 @@ declare const createSynth: (ctx: AudioContext, destination?: AudioNode, tone?: S
|
|
|
2006
2082
|
|
|
2007
2083
|
declare const VOICE_IMAGES: Record<string, string>;
|
|
2008
2084
|
|
|
2009
|
-
export { type AddNoteOptions, type AnyDrumPattern, type ApplyChordOptions, type ChordPatternType, type ChordPlacement, type ChordPlayerInstance, type ConsumedSyllable, type CoreEventHandlers, type CustomVocalDef, DAW_CSS, DEFAULT_BPM, DEFAULT_GATE, DEFAULT_PAN, DEFAULT_PLAYBACK_VELOCITY, 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, type ExportMidiOptions, GM_INSTRUMENT_NAMES, INSTRUMENT_PRESETS, type InstrumentPreset, KOE_BASE_URL, KOE_VOICEBANKS, KOE_VOICEBANK_LABELS, KOE_VOICEBANK_TERMS, type KoeVoiceOptions, LinkedList, type LoopConfig, type LoopPoint, type LyricSyllable, type LyricSyncData, type LyricTrack, type LyricsConductor, MAX_VOCAL_VOLUME, MMLCore, type MMLDisplayToken, type MMLNotePlacement, MML_END_MARKER, type MidiExtraction, 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, PITCH_MAP, PREWARM_NOTES, type ParseMMLOptions, type ParseMidiFn, type ParsedMML, type PianoRollInstance, type PianoRollOptions, type PicotuneSearchParams, type PicotuneSong, type PitchToken, type PlayChordsOptions, type PlayDrumEvent, type PlayMmlOptions, type PlayNoteEvent, type PlayNoteOptions, type PlayPlacementsOptions, type PlaySingingMmlOptions, type PlaybackCue, type PlaybackState, type PresetSelectInstance, type PresetSelectOptions, type PreviewSoundCallback, type RenderConfig, type Sequencer, type SequencerOptions, type SequencerTrack, type SingingVoices, type SingingVoicesOptions, type StreamPlaybackOptions, type StreamVoiceNote, type StreamVoiceTrack, type Synth, TRACKS_ADVANCED, TRACKS_SIMPLE, type ToolMode, type TrackConfig, VOICE_IMAGES, VOICE_IMAGE_KEY, type VoiceModel, type VoiceRegistry, analyzeMidiTracks, applyHarmonicFilter, applyMonophonic, buildChordPlacements, buildDrumPatternJson, buildNameToKeyMapping, collectPitchTokens, createAudioContext, createDtmStudio, createKlattVoice, createKoeVoice, createLyricsConductor, createPianoRoll, createSequencer, createSingingVoices, createSynth, createVoiceRegistry, decodeMml, decomposeToMonophonic, drawGrid, drawHeader, drawKeyboard, drawNotes, drawSelectedNotes, drawSelectionRect, encodeMml, exportMIDI, extractDrumPatternFromNotes, extractMidiDrumPattern, extractMidiPlacements, extractMidiPlacementsByTrack, formatMmlMeta, freqFromPitch, generateRandomPattern, getDrawOffset, getDrumPatternKeys, getGridCanvas, getGridContext, getGridPosition, getHeaderCanvas, getMidiBPM, getRenderConfig, getXY, icon, init, injectStyles, isChordHeavyTrack, isPlausibleMidiTranscription, isValidHttpUrl, koeUrl, mountChordPlayer, mountDAW, mountMmlPlayer, normalizeDrumPatterns, normalizeLyrics, onClick, panToStereo, parseCustomVocals, parseLyrics, parseMML, parseMmlMeta, playChords, playMML, playNote, playPlacements, playSingingMML, resolveDrumPattern, resolveLoopPoint, setBackgroundActive, setDrawOffset, shiftNotes, showLoadingOverlay, stripCustomVocals, stripLyrics, stripMmlMeta, vocalVolumeToGain };
|
|
2085
|
+
export { type AddNoteOptions, type AnyDrumPattern, type ApplyChordOptions, type ChordPatternType, type ChordPlacement, type ChordPlayerInstance, type ConsumedSyllable, type CoreEventHandlers, type CustomVocalDef, DAW_CSS, DEFAULT_BPM, DEFAULT_GATE, DEFAULT_PAN, DEFAULT_PLAYBACK_VELOCITY, 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, type ExportMidiOptions, GM_INSTRUMENT_NAMES, INSTRUMENT_PRESETS, type InstrumentPreset, KOE_BASE_URL, KOE_VOICEBANKS, KOE_VOICEBANK_LABELS, KOE_VOICEBANK_TERMS, type KoeVoiceOptions, LinkedList, type LoopConfig, type LoopPoint, type LyricSyllable, type LyricSyncData, type LyricTrack, type LyricsConductor, MAX_VOCAL_VOLUME, MMLCore, type MMLDisplayToken, type MMLNotePlacement, MML_END_MARKER, type MidiExtraction, 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, PITCH_MAP, PREWARM_NOTES, type ParseMMLOptions, type ParseMidiFn, type ParsedMML, type PianoRollInstance, type PianoRollOptions, type PicotuneSearchParams, type PicotuneSong, type PitchToken, type PlayChordsOptions, type PlayDrumEvent, type PlayMmlOptions, type PlayNoteEvent, type PlayNoteOptions, type PlayPlacementsOptions, type PlaySingingMmlOptions, type PlaybackCue, type PlaybackState, type PresetSelectInstance, type PresetSelectOptions, type PreviewSoundCallback, type RenderConfig, type Sequencer, type SequencerOptions, type SequencerTrack, type SingingVoices, type SingingVoicesOptions, type StreamPlaybackOptions, type StreamVoiceNote, type StreamVoiceTrack, type Synth, TRACKS_ADVANCED, TRACKS_SIMPLE, type ToolMode, type TrackConfig, VIBRATO_MIN_SEC, VOICE_IMAGES, VOICE_IMAGE_KEY, type VoiceModel, type VoiceRegistry, analyzeMidiTracks, applyHarmonicFilter, applyMonophonic, buildChordPlacements, buildDrumPatternJson, buildNameToKeyMapping, collectPitchTokens, createAudioContext, createDtmStudio, createKlattVoice, createKoeVoice, createLyricsConductor, createPianoRoll, createSequencer, createSingingVoices, createSynth, createVoiceRegistry, decodeMml, decomposeToMonophonic, drawGrid, drawHeader, drawKeyboard, drawNotes, drawSelectedNotes, drawSelectionRect, encodeMml, exportMIDI, extractDrumPatternFromNotes, extractMidiDrumPattern, extractMidiPlacements, extractMidiPlacementsByTrack, formatMmlMeta, freqFromPitch, generateRandomPattern, getDrawOffset, getDrumPatternKeys, getGridCanvas, getGridContext, getGridPosition, getHeaderCanvas, getMidiBPM, getRenderConfig, getXY, icon, init, injectStyles, isChordHeavyTrack, isPlausibleMidiTranscription, isValidHttpUrl, koeUrl, mountChordPlayer, mountDAW, mountMmlPlayer, normalizeDrumPatterns, normalizeLyrics, onClick, panToStereo, parseCustomVocals, parseLyrics, parseMML, parseMmlMeta, playChords, playMML, playNote, playPlacements, playSingingMML, resolveDrumPattern, resolveLoopPoint, setBackgroundActive, setDrawOffset, shiftNotes, showLoadingOverlay, stripCustomVocals, stripLyrics, stripMmlMeta, vocalVolumeToGain };
|
package/dist/index.d.ts
CHANGED
|
@@ -129,6 +129,24 @@ declare const resolveDrumPattern: (name: string, dict: Record<string, DrumPatter
|
|
|
129
129
|
declare const DRUM_PATTERNS: Record<string, DrumPatternDef<DrumPattern>>;
|
|
130
130
|
declare const getDrumPatternKeys: (name: string, dict: Record<string, AnyDrumPattern | DrumPatternDef>) => number[];
|
|
131
131
|
|
|
132
|
+
/**
|
|
133
|
+
* 自動ビブラート(ロングトーンに自動で掛けるピッチLFO)の定数と曲線生成。
|
|
134
|
+
*
|
|
135
|
+
* メインスレッド({@link file://./lyrics.ts} の local backend)とWorker
|
|
136
|
+
* ({@link file://./voice-worker.ts})の両方から使う共通ロジックなのでここへ切り出す。
|
|
137
|
+
* 実際のLFOは koe の `Worldline.renderNote` が受け取る `CurveInput`(関数)として渡す
|
|
138
|
+
* だけで、koe自身は「ビブラートとは何か」を知らない — 表現の中身はdtm側の責務。
|
|
139
|
+
*/
|
|
140
|
+
/**
|
|
141
|
+
* 自動ビブラートを掛ける最短ノート長(秒)。テンポに関わらず一定(実時間基準)。
|
|
142
|
+
* ビブラート(5.5Hz程度)が最低1周期以上揺れきるには ~180ms 要るが、聴感上わかる
|
|
143
|
+
* 「歌っぽさ」を出すには2周期分は欲しいため、余裕を見て350msを既定閾値とする。
|
|
144
|
+
* これより短い音符は対象外(1周期も揺れきらず、ただの音程ブレとして不自然に響く)。
|
|
145
|
+
* beat/BPM基準ではなくms基準にしているのは、同じ「1拍」でもテンポが変われば実時間の
|
|
146
|
+
* 長さが変わり、ビブラートが自然に聞こえるかどうかは実時間側に依存するため。
|
|
147
|
+
*/
|
|
148
|
+
declare const VIBRATO_MIN_SEC = 0.35;
|
|
149
|
+
|
|
132
150
|
/**
|
|
133
151
|
* MML歌詞拡張 — 解析・正規化・同期(ヘッドレス)と、任意の歌唱合成ヘルパ。
|
|
134
152
|
*
|
|
@@ -259,12 +277,12 @@ type VoiceModel = {
|
|
|
259
277
|
* (モデル内部状態に依存しないので、同一モデルを複数トラックで共有しても干渉しない)。
|
|
260
278
|
* 合成不能(該当音素なし・無声)なら null。klatt 等の軽量モデルは未実装でよい。
|
|
261
279
|
*/
|
|
262
|
-
renderToCache?: (syllable: LyricSyllable, prevVowel: string, pitch: number, durationMs: number) => Promise<string | null>;
|
|
280
|
+
renderToCache?: (syllable: LyricSyllable, prevVowel: string, pitch: number, durationMs: number, vibrato?: boolean) => Promise<string | null>;
|
|
263
281
|
/**
|
|
264
282
|
* {@link renderToCache} 済みのバッファを絶対時刻 t0(AudioContextクロック秒)へスケジュールする。
|
|
265
283
|
* t0 は未来の任意時刻でよく、再生はオーディオスレッドが担うのでメインスレッドのもたつきに影響されない。
|
|
266
284
|
*/
|
|
267
|
-
scheduleCached?: (key: string, t0: number, peak: number, pan: number) => void;
|
|
285
|
+
scheduleCached?: (key: string, t0: number, peak: number, pan: number, reverbSend?: number) => void;
|
|
268
286
|
/** スケジュール済みの発音をすべて即停止する(停止・一時停止・シーク時)。 */
|
|
269
287
|
stopAll?: () => void;
|
|
270
288
|
};
|
|
@@ -277,7 +295,7 @@ type VoiceModel = {
|
|
|
277
295
|
* 戻り値の VoiceModel は (音節, PlayNoteEvent) を受け取り、
|
|
278
296
|
* `ctx.currentTime + e.when` のタイミングで destination へ発音する。
|
|
279
297
|
*/
|
|
280
|
-
declare const createKlattVoice: (ctx: AudioContext, destination: AudioNode) => VoiceModel;
|
|
298
|
+
declare const createKlattVoice: (ctx: AudioContext, destination: AudioNode, reverbBus?: AudioNode) => VoiceModel;
|
|
281
299
|
/** koe音源(.koe)が置かれているパブリックバケットのベースURL */
|
|
282
300
|
declare const KOE_BASE_URL = "https://pub-12482a6b5cbc4c9e906b2e1904cabae5.r2.dev";
|
|
283
301
|
/**
|
|
@@ -334,6 +352,12 @@ type KoeVoiceOptions = {
|
|
|
334
352
|
* 省略時は従来どおりメインスレッドで合成する(後方互換)。
|
|
335
353
|
*/
|
|
336
354
|
voiceWorkerUrl?: string;
|
|
355
|
+
/**
|
|
356
|
+
* マスタリバーブのバス(センド先)。指定時のみ、ノートごとの `reverbSend` に応じて
|
|
357
|
+
* ドライ経路とは別にこのノードへ送る。未指定ならリバーブ送りは常にスキップされる
|
|
358
|
+
* (=トラックごとの `r` トークンを書いてもリバーブが掛からない)。
|
|
359
|
+
*/
|
|
360
|
+
reverbBus?: AudioNode;
|
|
337
361
|
};
|
|
338
362
|
/**
|
|
339
363
|
* @onjmin/koe の音源(UTAU由来 .koe)で1音節を歌う {@link VoiceModel} を生成する。
|
|
@@ -368,6 +392,17 @@ type StreamVoiceTrack = {
|
|
|
368
392
|
volume: number;
|
|
369
393
|
/** ステレオ定位 -1〜+1。 */
|
|
370
394
|
pan: number;
|
|
395
|
+
/**
|
|
396
|
+
* 自動ビブラート ON/OFF。ONでも全ノートには掛からず、{@link VIBRATO_MIN_SEC} 以上の
|
|
397
|
+
* ロングトーンにだけ自動適用される(短い音符は不自然になるため対象外)。
|
|
398
|
+
*/
|
|
399
|
+
vibrato?: boolean;
|
|
400
|
+
/**
|
|
401
|
+
* マスタリバーブへのセンド量 0-1。既定0(マスタリバーブが掛からない)。
|
|
402
|
+
* マスタリバーブ自体のつまみ(残響の質・量)とは独立に、このトラックをどれだけ
|
|
403
|
+
* リバーブバスへ送るかを個別に決める。
|
|
404
|
+
*/
|
|
405
|
+
reverbSend?: number;
|
|
371
406
|
/** 発音順(startSec昇順)の歌唱ノート列。 */
|
|
372
407
|
notes: StreamVoiceNote[];
|
|
373
408
|
};
|
|
@@ -458,6 +493,13 @@ type SingingVoicesOptions = {
|
|
|
458
493
|
* 省略時は従来どおりメインスレッドで合成する。
|
|
459
494
|
*/
|
|
460
495
|
voiceWorkerUrl?: string;
|
|
496
|
+
/**
|
|
497
|
+
* マスタリバーブのバス(センド先)。指定すると、各歌詞トラックの `reverb`(`r`トークン)
|
|
498
|
+
* に応じて klatt/koe いずれの音源もこのノードへセンドできるようになる。未指定なら
|
|
499
|
+
* トラック側で `r` を指定してもリバーブは掛からない(studio.ts がマスタの
|
|
500
|
+
* Convolver 入力を渡す想定)。
|
|
501
|
+
*/
|
|
502
|
+
reverbBus?: AudioNode;
|
|
461
503
|
};
|
|
462
504
|
/**
|
|
463
505
|
* klatt と koe音源を一括で扱う {@link SingingVoices} を生成する。
|
|
@@ -562,6 +604,8 @@ type LyricSyncData = {
|
|
|
562
604
|
vocalGate: number;
|
|
563
605
|
vocalPan: number;
|
|
564
606
|
vocalOctave: number;
|
|
607
|
+
vocalVibrato?: boolean;
|
|
608
|
+
vocalReverb?: number;
|
|
565
609
|
};
|
|
566
610
|
/** パッチ送受信用ノートデータ(ローカルIDを持たない)。 */
|
|
567
611
|
type NoteData = {
|
|
@@ -639,6 +683,11 @@ type PlayNoteEvent = {
|
|
|
639
683
|
syllable?: LyricSyllable;
|
|
640
684
|
/** syllable を歌う合成モデル名("klatt" 等)。syllable とセットで届く */
|
|
641
685
|
voiceModel?: string;
|
|
686
|
+
/**
|
|
687
|
+
* マスタリバーブへのセンド量 0-1(既定0)。歌詞トラックの個別リバーブ設定を
|
|
688
|
+
* 反映する。合成側はドライ経路とは別にこの割合だけリバーブバスへ送ればよい。
|
|
689
|
+
*/
|
|
690
|
+
reverbSend?: number;
|
|
642
691
|
};
|
|
643
692
|
type LyricSyllable = {
|
|
644
693
|
/** 表示用かな("きょ" 等。長音は置換後の母音かな) */
|
|
@@ -678,6 +727,20 @@ type LyricTrack = {
|
|
|
678
727
|
* MMLでは `@@n klatt o-1 …` のように o トークンで付与する。
|
|
679
728
|
*/
|
|
680
729
|
octave?: number;
|
|
730
|
+
/**
|
|
731
|
+
* 自動ビブラート ON/OFF。既定false。
|
|
732
|
+
* ONでも全ノートに掛かるわけではなく、一定の長さ以上(ロングトーン)のノートにだけ
|
|
733
|
+
* 自動で適用される(短い音符は1周期も揺れきらず不自然になるため対象外)。
|
|
734
|
+
* MMLでは `@@n klatt b1 …` のように b トークンで付与する。
|
|
735
|
+
*/
|
|
736
|
+
vibrato?: boolean;
|
|
737
|
+
/**
|
|
738
|
+
* このボーカルトラック個別のリバーブセンド量 0-100。既定0(マスタリバーブの影響を受けない)。
|
|
739
|
+
* マスタリバーブのつまみ(全トラック共通の残響そのもの)とは別軸で、
|
|
740
|
+
* 「このトラックをどれだけリバーブバスへ送るか」を個別に決める。
|
|
741
|
+
* MMLでは `@@n klatt r50 …` のように r トークンで付与する。
|
|
742
|
+
*/
|
|
743
|
+
reverb?: number;
|
|
681
744
|
/** 正規化済み音節列 */
|
|
682
745
|
syllables: LyricSyllable[];
|
|
683
746
|
/**
|
|
@@ -775,6 +838,13 @@ type DawOptions = {
|
|
|
775
838
|
masterVolume?: number;
|
|
776
839
|
/** ドラム音量 0-100。既定80。 */
|
|
777
840
|
drumVolume?: number;
|
|
841
|
+
/**
|
|
842
|
+
* マスタリバーブの掛かり具合 0-100。既定0(オフ)。
|
|
843
|
+
* 全トラック(楽器・歌唱とも)に一律で掛かるマスタエフェクト。
|
|
844
|
+
*/
|
|
845
|
+
reverbAmount?: number;
|
|
846
|
+
/** マスタリバーブのつまみが動かされたときに呼ばれる(0-100)。実際の音声処理は呼び出し側(studio)が担う。 */
|
|
847
|
+
onReverbChange?: (amount: number) => void;
|
|
778
848
|
parseMidi?: ParseMidiFn;
|
|
779
849
|
/**
|
|
780
850
|
* 動作モード({@link DawMode})。
|
|
@@ -864,6 +934,8 @@ type DawInstance = {
|
|
|
864
934
|
setVolume: (volume: number) => void;
|
|
865
935
|
/** ドラム音量を 0-100 で変更する。 */
|
|
866
936
|
setDrumVolume: (volume: number) => void;
|
|
937
|
+
/** マスタリバーブの掛かり具合を 0-100 で変更する。 */
|
|
938
|
+
setReverbAmount: (amount: number) => void;
|
|
867
939
|
/** リモートから受信したトラック個別楽器を適用する(`onTrackInstrumentChange` は発火しない)。 */
|
|
868
940
|
applyTrackInstrument: (trackIndex: number, instrumentName: string) => void;
|
|
869
941
|
/**
|
|
@@ -1732,6 +1804,8 @@ type DtmStudioOptions = {
|
|
|
1732
1804
|
masterVolume?: number;
|
|
1733
1805
|
/** ドラム音量 0-1。既定 1。 */
|
|
1734
1806
|
drumVolume?: number;
|
|
1807
|
+
/** マスタリバーブの掛かり具合 0-100。既定0(オフ)。全トラックへ一律で掛かる。 */
|
|
1808
|
+
reverbAmount?: number;
|
|
1735
1809
|
/**
|
|
1736
1810
|
* 最終出力先の AudioNode。未指定時は audioCtx.destination(スピーカー)。
|
|
1737
1811
|
* MediaStreamAudioDestinationNode や GainNode を指定できます。
|
|
@@ -1931,6 +2005,8 @@ type DtmStudio = {
|
|
|
1931
2005
|
setMasterVolume: (volume: number) => void;
|
|
1932
2006
|
/** マスタ音量を 0-100 で変更する(`setMasterVolume` のエイリアス)。 */
|
|
1933
2007
|
setVolume: (volume: number) => void;
|
|
2008
|
+
/** マスタリバーブの掛かり具合を 0-100 で変更する。 */
|
|
2009
|
+
setReverbAmount: (amount: number) => void;
|
|
1934
2010
|
/** AudioContext を閉じ、生成物を破棄する。 */
|
|
1935
2011
|
dispose: () => void;
|
|
1936
2012
|
};
|
|
@@ -2006,4 +2082,4 @@ declare const createSynth: (ctx: AudioContext, destination?: AudioNode, tone?: S
|
|
|
2006
2082
|
|
|
2007
2083
|
declare const VOICE_IMAGES: Record<string, string>;
|
|
2008
2084
|
|
|
2009
|
-
export { type AddNoteOptions, type AnyDrumPattern, type ApplyChordOptions, type ChordPatternType, type ChordPlacement, type ChordPlayerInstance, type ConsumedSyllable, type CoreEventHandlers, type CustomVocalDef, DAW_CSS, DEFAULT_BPM, DEFAULT_GATE, DEFAULT_PAN, DEFAULT_PLAYBACK_VELOCITY, 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, type ExportMidiOptions, GM_INSTRUMENT_NAMES, INSTRUMENT_PRESETS, type InstrumentPreset, KOE_BASE_URL, KOE_VOICEBANKS, KOE_VOICEBANK_LABELS, KOE_VOICEBANK_TERMS, type KoeVoiceOptions, LinkedList, type LoopConfig, type LoopPoint, type LyricSyllable, type LyricSyncData, type LyricTrack, type LyricsConductor, MAX_VOCAL_VOLUME, MMLCore, type MMLDisplayToken, type MMLNotePlacement, MML_END_MARKER, type MidiExtraction, 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, PITCH_MAP, PREWARM_NOTES, type ParseMMLOptions, type ParseMidiFn, type ParsedMML, type PianoRollInstance, type PianoRollOptions, type PicotuneSearchParams, type PicotuneSong, type PitchToken, type PlayChordsOptions, type PlayDrumEvent, type PlayMmlOptions, type PlayNoteEvent, type PlayNoteOptions, type PlayPlacementsOptions, type PlaySingingMmlOptions, type PlaybackCue, type PlaybackState, type PresetSelectInstance, type PresetSelectOptions, type PreviewSoundCallback, type RenderConfig, type Sequencer, type SequencerOptions, type SequencerTrack, type SingingVoices, type SingingVoicesOptions, type StreamPlaybackOptions, type StreamVoiceNote, type StreamVoiceTrack, type Synth, TRACKS_ADVANCED, TRACKS_SIMPLE, type ToolMode, type TrackConfig, VOICE_IMAGES, VOICE_IMAGE_KEY, type VoiceModel, type VoiceRegistry, analyzeMidiTracks, applyHarmonicFilter, applyMonophonic, buildChordPlacements, buildDrumPatternJson, buildNameToKeyMapping, collectPitchTokens, createAudioContext, createDtmStudio, createKlattVoice, createKoeVoice, createLyricsConductor, createPianoRoll, createSequencer, createSingingVoices, createSynth, createVoiceRegistry, decodeMml, decomposeToMonophonic, drawGrid, drawHeader, drawKeyboard, drawNotes, drawSelectedNotes, drawSelectionRect, encodeMml, exportMIDI, extractDrumPatternFromNotes, extractMidiDrumPattern, extractMidiPlacements, extractMidiPlacementsByTrack, formatMmlMeta, freqFromPitch, generateRandomPattern, getDrawOffset, getDrumPatternKeys, getGridCanvas, getGridContext, getGridPosition, getHeaderCanvas, getMidiBPM, getRenderConfig, getXY, icon, init, injectStyles, isChordHeavyTrack, isPlausibleMidiTranscription, isValidHttpUrl, koeUrl, mountChordPlayer, mountDAW, mountMmlPlayer, normalizeDrumPatterns, normalizeLyrics, onClick, panToStereo, parseCustomVocals, parseLyrics, parseMML, parseMmlMeta, playChords, playMML, playNote, playPlacements, playSingingMML, resolveDrumPattern, resolveLoopPoint, setBackgroundActive, setDrawOffset, shiftNotes, showLoadingOverlay, stripCustomVocals, stripLyrics, stripMmlMeta, vocalVolumeToGain };
|
|
2085
|
+
export { type AddNoteOptions, type AnyDrumPattern, type ApplyChordOptions, type ChordPatternType, type ChordPlacement, type ChordPlayerInstance, type ConsumedSyllable, type CoreEventHandlers, type CustomVocalDef, DAW_CSS, DEFAULT_BPM, DEFAULT_GATE, DEFAULT_PAN, DEFAULT_PLAYBACK_VELOCITY, 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, type ExportMidiOptions, GM_INSTRUMENT_NAMES, INSTRUMENT_PRESETS, type InstrumentPreset, KOE_BASE_URL, KOE_VOICEBANKS, KOE_VOICEBANK_LABELS, KOE_VOICEBANK_TERMS, type KoeVoiceOptions, LinkedList, type LoopConfig, type LoopPoint, type LyricSyllable, type LyricSyncData, type LyricTrack, type LyricsConductor, MAX_VOCAL_VOLUME, MMLCore, type MMLDisplayToken, type MMLNotePlacement, MML_END_MARKER, type MidiExtraction, 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, PITCH_MAP, PREWARM_NOTES, type ParseMMLOptions, type ParseMidiFn, type ParsedMML, type PianoRollInstance, type PianoRollOptions, type PicotuneSearchParams, type PicotuneSong, type PitchToken, type PlayChordsOptions, type PlayDrumEvent, type PlayMmlOptions, type PlayNoteEvent, type PlayNoteOptions, type PlayPlacementsOptions, type PlaySingingMmlOptions, type PlaybackCue, type PlaybackState, type PresetSelectInstance, type PresetSelectOptions, type PreviewSoundCallback, type RenderConfig, type Sequencer, type SequencerOptions, type SequencerTrack, type SingingVoices, type SingingVoicesOptions, type StreamPlaybackOptions, type StreamVoiceNote, type StreamVoiceTrack, type Synth, TRACKS_ADVANCED, TRACKS_SIMPLE, type ToolMode, type TrackConfig, VIBRATO_MIN_SEC, VOICE_IMAGES, VOICE_IMAGE_KEY, type VoiceModel, type VoiceRegistry, analyzeMidiTracks, applyHarmonicFilter, applyMonophonic, buildChordPlacements, buildDrumPatternJson, buildNameToKeyMapping, collectPitchTokens, createAudioContext, createDtmStudio, createKlattVoice, createKoeVoice, createLyricsConductor, createPianoRoll, createSequencer, createSingingVoices, createSynth, createVoiceRegistry, decodeMml, decomposeToMonophonic, drawGrid, drawHeader, drawKeyboard, drawNotes, drawSelectedNotes, drawSelectionRect, encodeMml, exportMIDI, extractDrumPatternFromNotes, extractMidiDrumPattern, extractMidiPlacements, extractMidiPlacementsByTrack, formatMmlMeta, freqFromPitch, generateRandomPattern, getDrawOffset, getDrumPatternKeys, getGridCanvas, getGridContext, getGridPosition, getHeaderCanvas, getMidiBPM, getRenderConfig, getXY, icon, init, injectStyles, isChordHeavyTrack, isPlausibleMidiTranscription, isValidHttpUrl, koeUrl, mountChordPlayer, mountDAW, mountMmlPlayer, normalizeDrumPatterns, normalizeLyrics, onClick, panToStereo, parseCustomVocals, parseLyrics, parseMML, parseMmlMeta, playChords, playMML, playNote, playPlacements, playSingingMML, resolveDrumPattern, resolveLoopPoint, setBackgroundActive, setDrawOffset, shiftNotes, showLoadingOverlay, stripCustomVocals, stripLyrics, stripMmlMeta, vocalVolumeToGain };
|