Skip to content

WASM/JS オプション間の関係性

概要

SongConfigのオプションには以下の関係性があります:

  • 排他: 同時に有効にしても片方のみ機能
  • 依存: 親オプションが有効でないと子オプションは無視される
  • 優先: 特殊な値(0など)が他の設定をオーバーライド
  • 干渉: 特定の組み合わせでバリデーションエラー

1. 依存関係 (親→子)

1.1 Call System

親オプション子オプション説明
callEnabled=trueintroChantChantセクションの種類
callEnabled=truemixPatternMIXセクションの種類
callEnabled=truecallDensityコーラスでのコール密度
callEnabled=truecallNotesEnabledコールをMIDIノートとして出力

1.2 Arpeggio

親オプション子オプション説明
arpeggioEnabled=truearpeggioPatternUp/Down/UpDown/Random
arpeggioEnabled=truearpeggioSpeedEighth/Sixteenth/Triplet
arpeggioEnabled=truearpeggioOctaveRange1-3オクターブ
arpeggioEnabled=truearpeggioGateゲート長(0-100)
arpeggioEnabled=truearpeggioSyncChordコード変更と同期

1.3 Humanization

親オプション子オプション説明
humanize=truehumanizeTimingタイミング揺れ(0-100)
humanize=truehumanizeVelocityベロシティ揺れ(0-100)

1.4 Chord Extensions

親オプション子オプション説明
chordExtSus=truechordExtSusProbSus確率(0-100)
chordExt7th=truechordExt7thProb7th確率(0-100)
chordExt9th=truechordExt9thProb9th確率(0-100)

1.5 Modulation

親オプション子オプション説明
modulationTiming != NonemodulationSemitones転調量(1-4)

注意: modulationTiming=Noneの場合、modulationSemitonesはバリデーションされない。

1.6 Vocal (skipVocalによる排他)

条件有効なオプション
skipVocal=falseすべてのvocal関連オプション
skipVocal=truevocal関連オプションは全て無視

1.7 MelodyTemplate選択

vocalStyleデフォルトテンプレート
Standard (1)PlateauTalk (1)
Vocaloid (2)RunUpTarget (2)
Idol (4)PlateauTalk (1)
Ballad (5)SparseAnchor (5)
Rock (6)RunUpTarget (2)
CityPop (7)PlateauTalk (1)
Anime (8)HookRepeat (4)

2. CompositionStyle による分岐

compositionStyleの値によって有効なオプションが変わります:


3. 優先順位 (特殊値によるオーバーライド)

オプション特殊値動作
bpm0スタイルプリセットのデフォルトBPMを使用
seed0ランダムシードを自動生成
melodyTemplate0VocalStylePresetのデフォルトテンプレートを使用
targetDurationSeconds0formIdで指定した構造パターンを使用

フローチャート


4. 相互干渉 (バリデーションエラー)

4.1 エラーコード一覧

エラー原因
INVALID_STYLEstylePresetId >= 17
INVALID_CHORDchordProgressionId >= 22
INVALID_FORMformId >= 11
INVALID_ATTITUDEスタイルで許可されていないvocalAttitude
INVALID_VOCAL_RANGEvocalLow > vocalHigh または範囲外(36-96)
INVALID_BPMbpm != 0 かつ bpm < 40 または bpm > 240
INVALID_MODULATIONmodulationTiming != None かつ modulationSemitones が1-4範囲外
DURATION_TOO_SHORTcallEnabled=true かつ targetDurationSeconds が最小秒数未満

4.2 スタイル × Attitude の組み合わせ

各スタイルプリセットにはallowedAttitudesビットフラグがあり、許可されていないAttitudeを指定するとエラー:

typescript
// 例: スタイルがCleanとExpressiveのみ許可している場合
allowedAttitudes = ATTITUDE_CLEAN | ATTITUDE_EXPRESSIVE  // 0b011 = 3

vocalAttitude = 2 (Raw) → INVALID_ATTITUDE エラー

4.3 Call × Duration の干渉

introChantmixPatternBPM=120での最小秒数目安
NoneNone制限なし
GachikoiNone~24秒
NoneTiger~20秒
GachikoiTiger~40秒

5. 推奨組み合わせパターン

5.1 シンプルなポップ (デフォルト)

javascript
{
  stylePresetId: 0,
  compositionStyle: 0,  // MelodyLead
  drumsEnabled: true,
  arpeggioEnabled: false,
  callEnabled: false
}

5.2 ボーカロイド風

javascript
{
  stylePresetId: 16,  // vocaloid preset
  compositionStyle: 0,
  vocalStyle: 2,      // Vocaloid
  melodyTemplate: 2,  // RunUpTarget (YOASOBI風)
  arpeggioEnabled: true,
  arpeggioSpeed: 1    // Sixteenth
}

5.3 アイドル曲 (コールあり)

javascript
{
  stylePresetId: 14,  // idol preset
  callEnabled: true,
  introChant: 1,      // Gachikoi
  mixPattern: 2,      // Tiger
  callDensity: 2,     // Standard
  callNotesEnabled: true,
  targetDurationSeconds: 180  // 3分以上必要
}

5.4 BGMモード (Motif重視)

javascript
{
  compositionStyle: 1,  // BackgroundMotif
  skipVocal: true,      // または false で控えめボーカル
  motifFixedProgression: true,
  motifMaxChordCount: 4,
  arpeggioEnabled: true
}

6. JS API オプション対応表

JS名C API名デフォルト
stylePresetIdstyle_preset_iduint80
keykeyuint80 (C)
bpmbpmuint160
seedseeduint320
chordProgressionIdchord_progression_iduint80
formIdform_iduint80
vocalAttitudevocal_attitudeuint80
drumsEnableddrums_enabledbooltrue
arpeggioEnabledarpeggio_enabledboolfalse
arpeggioPatternarpeggio_patternuint80
arpeggioSpeedarpeggio_speeduint81
arpeggioOctaveRangearpeggio_octave_rangeuint82
arpeggioGatearpeggio_gateuint880
arpeggioSyncChordarpeggio_sync_chordbooltrue
vocalLowvocal_lowuint855
vocalHighvocal_highuint874
skipVocalskip_vocalboolfalse
humanizehumanizeboolfalse
humanizeTiminghumanize_timinguint850
humanizeVelocityhumanize_velocityuint850
chordExtSuschord_ext_susboolfalse
chordExt7thchord_ext_7thboolfalse
chordExt9thchord_ext_9thboolfalse
chordExtSusProbchord_ext_sus_probuint820
chordExt7thProbchord_ext_7th_probuint830
chordExt9thProbchord_ext_9th_probuint825
compositionStylecomposition_styleuint80
targetDurationSecondstarget_duration_secondsuint160
modulationTimingmodulation_timinguint80
modulationSemitonesmodulation_semitonesint82
seEnabledse_enabledbooltrue
callEnabledcall_enabledboolfalse
callNotesEnabledcall_notes_enabledbooltrue
introChantintro_chantuint80
mixPatternmix_patternuint80
callDensitycall_densityuint82
vocalStylevocal_styleuint80
melodyTemplatemelody_templateuint80
arrangementGrowtharrangement_growthuint80
motifRepeatScopemotif_repeat_scopeuint80
motifFixedProgressionmotif_fixed_progressionbooltrue
motifMaxChordCountmotif_max_chord_countuint84
melodicComplexitymelodic_complexityuint81
hookIntensityhook_intensityuint82
vocalGroovevocal_grooveuint80

7. 図解: オプション依存関係ツリー


8. 暗黙的な内部設定 (Auto-Settings)

特定のパラメータを設定すると、内部で他のパラメータが自動的に設定/変更される関係です。

8.1 VocalStylePreset → MelodyTemplate

vocalStyleを設定すると、MelodyTemplateが自動選択されます:

vocalStyleMelodyTemplate主な特性
Auto (0)セクション依存Verse=PlateauTalk、Chorus=RunUpTarget
Standard (1)PlateauTalk (1)plateau_ratio=0.40、バランス型
Vocaloid (2)RunUpTarget (2)高密度、広い跳躍
UltraVocaloid (3)RunUpTarget (2)超高密度(32分音符)
Idol (4)PlateauTalk (1)高16分率、フック
Ballad (5)SparseAnchor (5)ロングノート、スパース
Rock (6)RunUpTarget (2)音域シフト
CityPop (7)PlateauTalk (1)グルービー、シンコペ
Anime (8)HookRepeat (4)フック重視
BrightKira (9)HookRepeat (4)高音域
CoolSynth (10)PlateauTalk (1)エレクトロニック
CuteAffected (11)HookRepeat (4)プレイフル
PowerfulShout (12)RunUpTarget (2)激しい

重要: melodyTemplateを非0の値で明示的に設定すると、VocalStylePresetのデフォルトを上書きします。

8.2 MelodicComplexity → 複数パラメータ

melodicComplexity自動設定
Simple (0)note_density *= 0.7, max_leap_interval ≤ 5, hook_repetition=true, tension_usage *= 0.5, sixteenth_note_ratio *= 0.5, syncopation_prob *= 0.5
Standard (1)変更なし(デフォルト)
Complex (2)note_density *= 1.3, max_leap_interval *= 1.5 (max 12), tension_usage *= 1.5, sixteenth_note_ratio *= 1.5 (max 0.5), syncopation_prob *= 1.5 (max 0.5)

8.3 CompositionStyle → 暗黙的動作

compositionStyle暗黙的に発生する動作
BackgroundMotif (1)modulation自動無効化, vocal音量抑制 (velocity_scale適用), シンプルな音程制限
SynthDriven (2)modulation自動無効化, arpeggio自動有効化 (arpeggioEnabled=falseでも有効), vocal音量抑制 (velocity_scale=0.75)
javascript
// 例: arpeggioEnabledを設定していなくてもアルペジオが生成される
{
  compositionStyle: 2,  // SynthDriven
  arpeggioEnabled: false  // ← 無視される!アルペジオは自動で有効
}

8.4 VocalGrooveFeel → 内部リズムパラメータ

vocalGroove自動設定
Straight (0)変更なし
Swing (1)swing_amount=0.25, syncopation_boost=0.1
HipHop (2)offbeat_preference=0.4, syncopation_boost=0.2
Latin (3)syncopation_boost=0.4, offbeat_preference=0.3
RnB (4)swing_amount=0.15, syncopation_boost=0.15

8.5 BPM ≥ 140 → Vocal密度ブースト

BPMが140以上の場合、自動的にボーカル密度が上昇します:

if (bpm >= 140) {
  note_density *= 1.1  // 10%増加
  sixteenth_note_ratio += 0.1  // 16分音符比率増加
}

8.6 drumsEnabled=false → Bass Rhythmic Drive

ドラムが無効の場合、ベースが自動的にリズム担当に切り替わります:

drumsEnabledセクションBass動作
falseIntro/Interlude/OutroRootFifthパターン
falseA/B/Chorus/BridgeRhythmicDriveパターン (強調8分音符)

8.7 vocalNoteDensity=0 → Mood密度適用

vocalNoteDensityが0(デフォルト)の場合、stylePresetIdから派生するMood値に基づいて密度が自動計算されます:

if (vocal_note_density == 0) {
  note_density = preset.melody.note_density * (mood_density + 0.5)
}

8.8 hookIntensity → フレーズ生成変更

hookIntensity効果
Low (0)フックなし、変化重視
Medium (1)適度なフック(デフォルト)
High (2)強いフック反復、キャッチーなメロディ

9. 内部パラメータ影響図

Released under the MIT License.