JavaScript/TypeScript 型と列挙型
型定義
AnalysisResult
interface AnalysisResult {
bpm: number;
bpmConfidence: number;
bpmCandidates: BpmHypothesis[]; // 上位から順に並んだ候補
key: Key;
timeSignature: TimeSignature;
timeSignatureCandidates: TimeSignature[]; // 上位から順に並んだ候補
beatTimes: Float32Array; // beats[].time のコピー。librosa 互換コードで便利
beats: Beat[]; // 各拍の強度を含むオブジェクト配列
downbeatIndices: number[]; // 小節頭にあたる beats[] の添字
downbeatPhase: number; // 最初の小節が始まるビート番号
beatObservations: BeatObservations; // beats[] と並行する拍ごとの根拠
beatLocalBpm: number[]; // 拍ごとの平滑化された局所テンポ。オプトイン
chords: AnalysisChord[];
sections: Section[];
timbre: Timbre;
dynamics: Dynamics;
rhythm: RhythmFeatures;
melody: MelodyContour;
form: string; // 例: "IABABCO"
tuning: number; // クロマグラムに使用した半音単位の偏差(指定値または測定値)
}
interface BpmHypothesis {
value: number;
confidence: number;
/** 報告された `bpm` との関係 */
relation: 'primary' | 'half' | 'double' | 'other';
}
// 小節頭と拍子の判断の根拠となる拍レベルの観測値。
// 3 本の並行した系列を持つ 1 つのオブジェクトで、各系列は beats の各要素に 1 値を持つ。
interface BeatObservations {
onsetStrength: number[]; // 拍近傍で窓集約したオンセット強度
lowFrequencyEnergy: number[]; // 拍近傍の低域エネルギー
chordChange: number[]; // 拍ごとのコード変化の根拠
}downbeatIndices は beats と要素が 1 対 1 に対応するのではなく、beats を添字で参照します。beats より短く、beats[downbeatIndices[k]] が k 番目の小節頭です。ある拍が小節頭かどうかは、拍ごとのフラグを読むのではなく、このリストに含まれるかどうかで判定してください。downbeatPhase は拍子推定器が出した位相、つまり最初の小節が始まるビート番号で、値域は [0, timeSignature.numerator) です。したがって downbeatIndices は通常この値から始まります。コードや低域の根拠に基づいて小節頭が精緻化されたあとに再計算されるわけではないため、両者が食い違うことがありますが、不具合ではありません。リストが結果、位相は出発点の推測です。
アクセントの根拠は beatObservations にあり、3 本の系列はいずれも beats と要素が 1 対 1 に対応します。系列が空であることは、解析がそれを生成できなかったという意味であり、全拍のスコアが 0 だったという意味ではありません。lowFrequencyEnergy はオーディオなしで解析を走らせた場合に空になり、chordChange はコード解析が済むまで空です。添字でアクセスする前に長さを確認してください。
beatLocalBpm は拍ごとの平滑化された局所テンポで、beats と要素が 1 対 1 に対応し、単位は BPM です。computeTempoCurve で明示的に要求しない限り空であり、検出された拍が 2 未満の場合は指定の有無にかかわらず空になります。最後の要素は、最終拍へ至る区間のテンポを繰り返した値です。これは bpm をリサンプルしたものではなく本物の局所テンポです。ただし、固定されたビートグリッドからデコードされたカーブはそのグリッドを記述するので、実際に動くテンポを測りたい場合は adaptiveTempo も併せて指定してください。値は固定されたテンポ格子に量子化されず、連続値になります。各値は隣接する拍間隔を対数テンポ空間で重み付き平均した局所値なので、テンポが変化すると数拍遅れて追従することがあります。
bpm と timeSignature は最終的に選ばれた値で、2 つの *Candidates 配列はその背後にある順位付きの候補群です。テンポは本質的に曖昧で、ハーフタイム感とその倍テンポは同じ曲のどちらも妥当な読み方になり得ます。1 つの数字だけを見せるのではなく、ほかの候補も提示できます。
const { bpm, bpmCandidates } = analyze({ samples, sampleRate });
const halfTime = bpmCandidates.find((c) => c.relation === 'half');
if (halfTime && halfTime.confidence > 0.4) {
offerAlternative(halfTime.value); // 「84 BPM かもしれません」
}同じ配列は C ABI・Node・Python にもあります。
Beat
interface Beat {
time: number; // 秒
strength: number; // その拍のフレームにおけるオンセット包絡の生値。上限なし
}strength はサリエンススコアではない
strength は、その拍のフレームで取り出したオンセット包絡の生の 1 フレームです。正規化されておらず、相対値でもなく、0..1 に収まる保証もありません。スケールは素材に依存するため、同じ数値でも曲が違えば意味が違います。また窓ではなく 1 フレームであるため、拍位置のわずかな揺れにも追随して動きます。
アクセントのスコア付け、つまりどの拍が強いかの判定には AnalysisResult.beatObservations.onsetStrength を使ってください。これはライブラリ自身の小節頭推定が評価している窓集約値です。Beat.strength を使うのは、その瞬間の包絡値そのものが本当に欲しいときだけにしてください。
Chord
interface Chord {
root: PitchClass;
bass: PitchClass; // 転回形のベース音
rootName: string; // コアの正規表記。全バインディングで共通
bassName: string; // コアの正規表記。全バインディングで共通
quality: ChordQuality;
start: number; // 秒
end: number; // 秒
duration: number; // 秒。end - start から導出
confidence: number;
name: string; // "C", "Am", "G7"
}
interface AnalysisChord extends Chord {
romanNumeral: string; // AnalysisResult.key に対するローマ数字。N.C. は空文字列
}duration は end - start から求めます。コアは 2 つの端点だけを保持します。
Section
interface Section {
type: SectionType;
start: number;
end: number;
energyLevel: number;
confidence: number;
name: string; // "Intro", "Verse 1", "Chorus"
}TimeSignature
interface TimeSignature {
numerator: number; // 例: 4
denominator: number; // 例: 4
confidence: number; // MeterEstimate.timeSignature では次点との差、
// MeterEstimate.candidates[] では支持総和に占める割合
}Timbre
interface Timbre {
brightness: number; // 0.0 〜 1.0
warmth: number;
density: number;
roughness: number;
complexity: number;
}
interface TimbreFrame {
brightness: number;
warmth: number;
density: number;
roughness: number;
complexity: number;
}
interface TimbreAnalysisResult extends TimbreFrame {
spectralCentroid: Float32Array;
spectralFlatness: Float32Array;
spectralRolloff: Float32Array;
timbreOverTime: TimbreFrame[];
}Dynamics
interface Dynamics {
dynamicRangeDb: number;
peakDb: number;
rmsDb: number;
loudnessRangeDb: number;
crestFactor: number;
isCompressed: boolean;
}RhythmFeatures
interface RhythmFeatures {
syncopation: number;
grooveType: string; // "straight", "shuffle", "swing"
patternRegularity: number;
tempoStability: number;
timeSignature: TimeSignature;
}MelodyContour
interface MelodyContour {
pitchRangeOctaves: number;
pitchStability: number;
meanFrequency: number;
vibratoRate: number; // Hz
pitches: MelodyPoint[]; // フレームごとのピッチ軌跡
}MelodyPoint
interface MelodyPoint {
time: number; // フレーム時刻(秒)
frequency: number; // 推定 f0(Hz、無声音のときは 0)
confidence: number; // 有声らしさ、0.0〜1.0
}個別解析の結果
個別の analyze* ヘルパーはこれらを返します。いずれも、対応する analyze() のサブオブジェクトに、表のフィールドを加えたものです。
| ヘルパー | 結果の型 | analyze() のサブオブジェクトに加わるフィールド |
|---|---|---|
analyzeBpm | BpmAnalysisResult | bpm、confidence、candidates: BpmCandidate[]({ bpm, confidence }。candidates[0] が選ばれたテンポで、残りは得票率順)、autocorrelation、tempogram |
analyzeRhythm | RhythmAnalysisResult | RhythmFeatures に、bpm(ビートトラッカーが補正したテンポ)と beatIntervals を加えたもの |
analyzeDynamics | DynamicsResult(別名 DynamicsAnalysisResult は非推奨) | Dynamics に、loudnessTimes と loudnessRmsDb(並行する Float32Array)を加えたもの |
analyzeTimbre | TimbreAnalysisResult | Timbre に、spectralCentroid、spectralFlatness、spectralRolloff、timbreOverTime を加えたもの |
analyzeMelody | MelodyResult | MelodyContour の要約フィールドと、軌跡を持つ points: MelodyPoint[](analyze() では melody.pitches) |
RoomMorphResult
roomMorph(...) は、モーフ後の音声と、目標ルームの合成がそれを作るために何を変更したかをあわせて返します。
interface RoomMorphResult {
audio: Float32Array; // 入力の長さ + 目標ルームの残響テイル
sampleRate: number;
diagnostics: RirDiagnostic[]; // 合成が報告した診断情報すべて、報告順
}
interface RirDiagnostic {
code: string; // 安定した ID。例: 'acoustic.rir_length_clamped'
message: string;
severity: 'info' | 'warning' | 'error';
}生成できないモーフは例外になり、使えない synthesizeRir(...) の呼び出しも同様に例外になるため、どちらの結果にもエラーフラグはなく、diagnostics に入るのはすべて「結果は得られたが注意が要る」警告です。分岐は code で行ってください。acoustic.ism_order_clamped(鏡像音源の次数が安全上限まで下げられた)、acoustic.rir_length_clamped(テイルが maxSeconds か資源上限で切られた)、acoustic.rir_length_floored(maxSeconds が直接音の到達時間より短い)、acoustic.rir_tail_truncated(maxSeconds が最も長いバンドを 60 dB 減衰する前に切った)、acoustic.no_late_tail(拡散テイルが生成されなかった)はいずれも「指定したのとは別の部屋を通った」ことを意味しますが、音声そのものからは分かりません。synthesizeRir(...) も同じ形を RirResult.diagnostics で報告します。C ABI も同じ項目を構造化して公開しており(sonare_last_diagnostic_count()、sonare_last_diagnostic_code(i)、sonare_last_diagnostic_message(i)、sonare_last_diagnostic_severity(i))、そちらでも、連結済みの sonare_last_warning_message() 文字列を解析するのではなくコードで分岐できます。
RoomMorphStereoResult
roomMorphStereo({ left, right, sampleRate?, receiverSpacingM?, ... }) は roomMorph(...) と同じルームオプションを取り、入力チャンネルごとにモーフ済みのチャンネルを 1 本返します。目的の部屋は、リスナーを挟んで receiverSpacingM(メートル、(0, 4] の範囲、既定 0.5)だけ離れた 2 本の無指向性レシーバーで聴かれ、各チャンネルは自分のレシーバーの応答と畳み込まれます。RoomMorphStereoResult は { left, right, sampleRate, diagnostics } で、2 つの Float32Array はどちらも入力長にリバーブテイルを足した長さ、diagnostics は RoomMorphResult.diagnostics と同じコードを持ちます。長さの異なるチャンネルや、有限でない、または (0, 4] の外にある receiverSpacingM は RangeError になります。sampleRate の既定は 48000 です。
ルーム推定と RIR の型
interface RoomEstimateResult {
volume: number; // m^3。減衰を計測できなければ NaN(confidence は 0)
lengthM: number; // synthesizeRir が受け取る名前と同じ
widthM: number;
heightM: number;
drrDb: number;
confidence: number;
bandAbsorption: Float32Array;
rt60Bands: Float32Array;
}
interface RirResult {
rir: Float32Array;
sampleRate: number;
diagnostics: RirDiagnostic[]; // 警告のみ。使えない合成は例外になる
}
type MaterialPresetName = 'none' | 'concrete' | 'wood' | 'curtain' | 'carpet' | 'glass';
type AcousticModeName = 'auto' | 'blind' | 'impulse_response';
interface RoomPlacement { x: number; y: number; z: number } // メートルmaterialPreset と推定の mode は、これらの名前だけを受け付けます。数値は TypeError です。roomGeometryFromEstimate(...) は RoomEstimateResult を synthesizeRir(...) 用の RoomGeometryOptions に変換します。結果には source と listener(既定の配置を軸ごとに推定したルームの寸法へ拡縮したもので、7 × 5 × 3 では既定と一致します)と、有限なバンドの平均であるスカラーの absorption も含まれ、渡した位置は拡縮した配置より優先されます(ルーム音響を参照)。
MasteringChainConfig
masteringChain* と StreamingMasteringChain は下のネスト構造の設定スキーマを使います。各キーは任意で、指定されたステージだけが下の固定順で有効になります。加えて、下に挙げる各ステージオブジェクト(denoise のオブジェクト形式、tilt、compressor、loudness など)はいずれも enabled?: boolean を受け付け、そのステージを明示的に切り替えられます。一覧では繰り返しを避けるため省いています。"dynamics.compressor.thresholdDb" のようなフラットなドット記法のキーも同じオブジェクトで受け付けられ、そのままコアへ渡されます。
masterAudio* はプリセットから開始し、同じキー名を "dynamics.compressor.thresholdDb" のようなフラットなドット記法の overrides(上書き値)として受け取ります。
maximizer.truePeakLimiter.releaseMs はポストリミッターのリリース時間です。省略するとプリセット/設定の既定値 50 ms を保ちます。フラットな上書き値として渡した場合、その値がそのまま適用されます。maximizer.truePeakLimiter.applyGainAtInputRate を有効にすると、静的なラウドネスゲインをオーバーサンプリング前の入力サンプルレートで適用します。ホスト間でゲイン段の位置を揃えたい場合に使います。
repair.denoise.reductionDb(フラットな repair.reductionDb エイリアスでも同じフィールドを指定できます)は、ゲインマスクが各ビンに適用できる最大の減衰量を dB で指定するもので、既定値は 26 です。以前の gainFloor(dB の深さではなく線形の下限値)という表記も引き続き受け付けられ、変換されます(dB = -20*log10(gainFloor))。この変換は旧来の有効範囲も引き継ぐため、1 を超える下限値は負の深さになり、同様に拒否されます。
インターフェース全文(クリックで展開)
interface MasteringChainConfig {
repair?: {
denoise?: boolean | { mode?: number | 'logMmse' | 'mmseStsa' | 'spectralSubtraction';
noiseEstimator?: number | 'quantile' | 'mcra' | 'imcra' | 'spp'; nFft?: number;
hopLength?: number; ddAlpha?: number; reductionDb?: number;
gainFloor?: number; overSubtraction?: number;
spectralFloor?: number; noiseEstimationQuantile?: number;
speechPresenceGain?: boolean; gainSmoothing?: boolean; };
nFft?: number; hopLength?: number; ddAlpha?: number; reductionDb?: number;
/** @deprecated `denoise.reductionDb` を使用してください(`dB = -20*log10(gainFloor)` で変換) */
gainFloor?: number;
declip?: { clipThreshold?: number; lpcOrder?: number; iterations?: number; lpcBlend?: number; };
decrackle?: { threshold?: number; levels?: number;
mode?: number | 'median' | 'waveletShrinkage'; };
dehum?: { fundamentalHz?: number; harmonics?: number; q?: number; adaptive?: boolean;
searchRangeHz?: number; adaptation?: number; frameSize?: number;
pllBandwidth?: number;
mode?: number | 'subtract' | 'notch'; };
declick?: { threshold?: number; neighborRatio?: number; maxClickSamples?: number;
lpcOrder?: number; residualRatio?: number; };
dereverb?: { threshold?: number; attenuation?: number; nFft?: number; hopLength?: number;
t60Sec?: number; lateDelayMs?: number; overSubtraction?: number;
spectralFloor?: number; wpeEnabled?: boolean; wpeIterations?: number;
wpeTaps?: number; wpeStrength?: number; };
};
eq?: {
/** 正規のネストされた tilt ステージ */
tilt?: { tiltDb?: number; pivotHz?: number };
/** @deprecated `eq.tilt.tiltDb` を使用してください */
tiltDb?: number;
/** @deprecated `eq.tilt.pivotHz` を使用してください */
pivotHz?: number;
};
dynamics?: {
compressor?: { thresholdDb?: number; ratio?: number; attackMs?: number; releaseMs?: number;
kneeDb?: number; makeupGainDb?: number; autoMakeup?: boolean; };
deesser?: { frequencyHz?: number; thresholdDb?: number; ratio?: number; attackMs?: number;
releaseMs?: number; rangeDb?: number; bandpassQ?: number; };
transientShaper?: { attackGainDb?: number; sustainGainDb?: number; fastAttackMs?: number;
fastReleaseMs?: number; slowAttackMs?: number; slowReleaseMs?: number;
sensitivity?: number; maxGainDb?: number; gainSmoothingMs?: number;
lookaheadMs?: number; };
multibandComp?: { lowCutoffHz?: number; highCutoffHz?: number;
lowThresholdDb?: number; lowRatio?: number;
lowAttackMs?: number; lowReleaseMs?: number;
midThresholdDb?: number; midRatio?: number;
midAttackMs?: number; midReleaseMs?: number;
highThresholdDb?: number; highRatio?: number;
highAttackMs?: number; highReleaseMs?: number;
/** 任意のバンド数(2〜64)。`cutoffsHz` で length + 1 になる。 */
crossover?: { cutoffsHz?: number[]; slope?: 'lr2' | 'lr4' | 'lr8' | number;
mode?: 'linkwitzRiley' | 'butterworth' | 'bessel' | 'firLinearPhase' | number;
firKernelSize?: number; };
/** バンドのインデックスごとのコンプレッサー設定。 */
bands?: MultibandCompressorBand[]; };
};
saturation?: {
tape?: { driveDb?: number; saturation?: number; hysteresis?: number; outputGainDb?: number;
speedIps?: number; headBumpDb?: number; bias?: number; gapLoss?: number;
oversampleFactor?: number; };
exciter?: { frequencyHz?: number; driveDb?: number; amount?: number; q?: number;
evenOddMix?: number; aliasing?: number; };
};
spectral?: {
airBand?: { amount?: number; shelfFrequencyHz?: number;
dynamicThresholdDb?: number; dynamicRangeDb?: number; };
};
stereo?: {
imager?: { width?: number; outputGainDb?: number; decorrelationAmount?: number;
preserveEnergy?: boolean; };
monoMaker?: { amount?: number; frequencyHz?: number };
};
maximizer?: {
truePeakLimiter?: { ceilingDb?: number; lookaheadMs?: number; releaseMs?: number;
oversampleFactor?: number; applyGainAtInputRate?: boolean; };
};
loudness?: { targetLufs?: number; ceilingDb?: number; truePeakOversample?: number;
releaseMs?: number; applyGainAtInputRate?: boolean;
maxLimiterGainReductionDb?: number; };
/** ネスト形式と並行して、フラットなドット記法のキーも受け付ける */
[flatKey: `${string}.${string}`]: number | boolean | undefined;
}
interface MasteringResult { // masteringProcess、masteringPairProcess
samples: Float32Array;
sampleRate: number;
inputLufs: number;
outputLufs: number;
appliedGainDb: number;
loudnessTargetLimited?: boolean;
latencySamples?: number;
nonFiniteSubstitutionCount: number; // リミッターが有限値に置き換えたサンプル数
}
interface MasteringChainResult { // masteringChain / masterAudio(および WithProgress)
samples: Float32Array; // レイテンシ補正済み。latencySamples はない
sampleRate: number;
inputLufs: number;
outputLufs: number;
appliedGainDb: number;
stages: string[];
outputTruePeakDbtp: number;
outputLra: number;
loudnessTargetLimited: boolean;
nonFiniteSubstitutionCount: number;
stageGainReductions: StageGainReduction[];
report: MasteringReport;
}
interface MasteringStereoResult { // masteringProcessStereo
left: Float32Array;
right: Float32Array;
sampleRate: number;
inputLufs: number;
outputLufs: number;
appliedGainDb: number;
latencySamples: number;
loudnessTargetLimited: boolean;
nonFiniteSubstitutionCount: number;
}
// masteringChainStereo / masterAudioStereo(および WithProgress)の戻り値。
// MasteringChainResult の samples を left/right に置き換えた形。MasteringStereoChainResult は
// Node/Python バインディングとのソース互換性のために残された @deprecated エイリアス。列挙型のリペアキーは、序数と名前のどちらでも受け付けます。序数は列挙順に 0 から振られます: denoise.mode('logMmse'、'mmseStsa'、'spectralSubtraction')、denoise.noiseEstimator('quantile'、'mcra'、'imcra'、'spp')、decrackle.mode('median'、'waveletShrinkage')、dehum.mode('subtract'、'notch')。
マルチバンドコンプレッサーは、バージョン 2 のチェーンドキュメントだけでなく、どのチェーン呼び出しからでも設定できます。crossover.cutoffsHz はカットオフのリストを置き換えてバンド数(最大 64)を決め、bands は MultibandCompressorBand でバンドをインデックスごとに指定します。フィールドは thresholdDb、ratio、attackMs、releaseMs、kneeDb、makeupGainDb、autoMakeup、detector('peak'、'rms'、'logRms'、または序数)、sidechainHpfEnabled、sidechainHpfHz、pdrTimeMs、pdrReleaseScale で、すべて省略可能です(省略したフィールドはベースの値のままです)。フラットキーでは dynamics.multibandComp.crossover.cutoffsHz.<i> と dynamics.multibandComp.bands.<i>.<field> で、インプレース形式の cutoff<i>Hz / band<i>.<field> や low/mid/high の短縮形と併用できます。キーの順序は問いません。同じフィールドを 1 回の呼び出しで 2 通りの綴りで渡すと拒否され、バンドが 1 つだけのステージも拒否されます(multiband stage needs at least two bands; one band is the compressor stage)。dynamics.compressor.detector とマルチバンドのスロープ、モード、バンドごとのディテクタのキーでは、enum の名前が解決されます。比率を 1 にしたとき、Linkwitz-Riley のバンドはカットオフで平坦に足し合わさります(lr2・lr4 とも 0.00 dB)。Butterworth と Bessel はカットオフで打ち消し合わず、むしろ持ち上がります。カットオフ 1 kHz に 1 kHz の音を通すと、Butterworth は lr2・lr4 とも +3.01 dB、Bessel は lr2 で +2.68 dB、lr4 で +1.69 dB です。
各ステージの使いどころは用語集の各ページに対応しています: リペア、トーンと Air、ダイナミクス、ステレオ・リミッター・ラウドネス。
列挙型
PitchClass
const PitchClass = {
C: 0, Cs: 1, D: 2, Ds: 3, E: 4, F: 5,
Fs: 6, G: 7, Gs: 8, A: 9, As: 10, B: 11
} as const;Mode
Mode は序数の enum です。結果ではモードが名前(KeyMode)で報告されるので、detectKey、detectKeyCandidates、analyze、autoTune は mode: 'major'、'minor'、'dorian' のように返します。Mode.Major との比較には使わないでください。入力はどちらでも受け付けます。detectChords、chordFunctionalAnalysis、Audio.chordFunctionalAnalysis(リクエスト形式と位置引数形式)の keyRoot / keyMode、chordFunctions の key、autoTune の key は、ピッチクラス名('C#'、PitchClassName)または数値と、モード名または Mode 序数を取るので、検出したキーをそのまま渡せます。未知の名前は、フィールド名を挙げた RangeError になります。
KeyMode は 'major' | 'minor' | 'dorian' | 'phrygian' | 'lydian' | 'mixolydian' | 'locrian'、PitchClassName は 'C' | 'C#' | ... | 'B'(シャープ表記のみ)です。
const Mode = {
Major: 0,
Minor: 1,
Dorian: 2,
Phrygian: 3,
Lydian: 4,
Mixolydian: 5,
Locrian: 6
} as const;ChordQuality
const ChordQuality = {
Major: 0, Minor: 1, Diminished: 2, Augmented: 3,
Dominant7: 4, Major7: 5, Minor7: 6, Sus2: 7, Sus4: 8,
Unknown: 9, Add9: 10, MinorAdd9: 11, Dim7: 12,
HalfDim7: 13, Major9: 14, Dominant9: 15, Sus2Add4: 16,
Major6: 17, Minor6: 18, MinorMajor7: 19, Dominant7Sus4: 20,
Dominant11: 21, Dominant13: 22,
Dominant7Flat9: 23, Dominant7Sharp9: 24
} as const;6th・m7b5・7sus4 は既存のコードと構成音が同じ
このうち 3 つは、すでに enum にあるコードを移調したものと、構成音の集合が完全に一致します。
maj6は短 3 度下のm7と同じ構成音(C6=Am7)min6は短 3 度下のm7b5と同じ構成音(Cm6=Am7b5)7sus4は完全 4 度上のsus2add4と同じ構成音(C7sus4=Fsus2add4)
クロマグラムにはこれらを区別する材料がありません。2 つの読み方は同一の 12 次元ベクトルだからです。そのため検出器は既存の読み方を既定として維持し、ベースが裏付けたときにだけ 6th へ昇格させます。演奏者が C6 と書くような箇所は、ベースが C にない限りたいてい Am7 として報告されます。Major6 と Minor6 は、和声だけから検出器が行う訂正ではなく、ベースについての根拠として扱ってください。
SectionType
const SectionType = {
Intro: 0, Verse: 1, PreChorus: 2, Chorus: 3,
Bridge: 4, Instrumental: 5, Outro: 6, Unknown: 7
} as const;型エクスポート索引
WASM パッケージは、関数やクラスに加えて TypeScript の補助型もエクスポートしています。オプション、リアルタイムバッファ、コールバックのペイロードを型付けするときは、アプリ側で再定義せずこれらを使えます。
| 分野 | エクスポートされる型/定数 |
|---|---|
| 環境とエンジン | EXPECTED_ABI_VERSION, EXPECTED_ENGINE_ABI_VERSION, EXPECTED_PROJECT_ABI_VERSION, EngineCapabilities, ProgressCallback |
| エンジンのレーンミキサー、マーカー、MIDI クリップ | MAX_TRACK_LANES(32)、EngineTrackLane, EngineTrackSend, EngineBus, EngineMarker, EngineMidiClipSchedule, EngineMidiEvent, ExternalMidiEvent, MarkerKind, ProjectMarker |
| キー/コード/リズム/音色解析 | ChordDetectionOptions, KeyMode, PitchClassName, KeyProfileName, BpmAnalysisResult, BpmCandidate, RhythmAnalysisResult, TimbreAnalysisResult, TimbreFrame, DynamicsResult, DynamicsAnalysisResult, MelodyResult |
| Worker | OfflineWorkerClient, OfflineWorkerClientOptions, OfflineWorkerCallOptions, OfflineWorkerProgress, OfflineWorkerTask, OfflineWorker。Web Worker の使用を参照 |
| スペクトル/ピッチ/特徴量変換 | MelPowerResult, StftMagnitudeResult, PitchCorrectOptions, VoicedFlags, SpectralRegionOp, SpectralEditOptions, TempogramMode, HarmonicRequest, HpssRequest, PercussiveRequest, AutoTuneRequest, PitchShiftRequest, TimeStretchRequest |
| ページ式クリップストリーミング | ClipPageStreamerEngine, ClipPageStreamerOptions, ClipPageStreamSource, OpfsClipStream, OpfsClipStreamOptions, OpfsClipPageProviderOptions |
| マスタリングと機能カタログ | MasteringProcessorParams、MasteringProcessorCatalogEntry、MasteringInsertParamInfo、MasteringInsertParamChoice、MasteringInsertSlot、MasteringInsertTiming、CapabilityCatalog、CapabilityCatalogParameter、CapabilityCatalogProcessor、CapabilityCatalogPresets、CapabilityCatalogMasteringPreset、CapabilityCatalogChain、CapabilityCatalogChainStage、CapabilityCatalogChainList、CapabilityCatalogChainAlias、MultibandCompressorBand、MasteringInsertParamDependency、MasteringChannelPolicy、MasteringChainStereoResult、MasteringStereoParamsRequest、MasteringStreamingPreviewStereoRequest、MeteringStereoRequest、MeteringStereoDecimatedRequest |
| ストリーミングリチューンと EQ | StreamingRetuneConfig, StreamingEqualizerConfig, EqBandType, EqBandPhase, EqCoeffMode, EqMatchOptions, EqStereoPlacement |
| リアルタイム音声 | VoicePresetId, RealtimeVoiceChangerConfigInput, RealtimeVoiceChangerPodConfig, RealtimeVoiceChangerMonoBuffer, RealtimeVoiceChangerInterleavedBuffer, RealtimeVoiceChangerPlanarBuffer |
| ミキシング/Worklet 用リアルタイムバッファ | MixerRealtimeBuffer, SonareScopeRingBuffer, SonareScopeRingReadResult, SonareWorkletScopeSnapshot |
| プロジェクト/エンジンのオートメーション | ProjectAssistSidecar, ProjectAssistSidecarInput, ProjectAutomationTargetKind, EngineTrackMonitorMode, TrackMonitorMode |
| パン則の入力 | PanLaw, PanLawName, PanLawInput |
| コントローラーと発音方式の値テーブル | CONTROLLER_INPUTS、CONTROLLER_AXES、ARTICULATIONS |
| プロジェクト自動化の対象を表す別名定数 | PROJECT_AUTOMATION_TARGET_OPAQUE (0)、PROJECT_AUTOMATION_TARGET_TRACK_FADER_DB (1)、PROJECT_AUTOMATION_TARGET_TRACK_PAN (2)、AutomationTargetKind |
| ボーカル編集ハンドル | VocalEditDraft、VocalRenderJob、VocalRenderSnapshot。ボーカル編集を参照 |
SurroundPan(Mixer.setSurroundPan のパラメータ型)はパッケージの公開エクスポート一覧に含まれていません。インポートせず、インラインまたはローカルなエイリアスとして型付けしてください。
リテラルユニオン型と enum 相当のテーブル
以下のエクスポートされた文字列リテラルのユニオン型は、フィールドや呼び出しが受け付ける値を列挙したものです。シンセ系の各語彙は序数も受け付けます。synthEnumTables() は SynthEnumTables に含まれるランタイムテーブルを string[] として返します。retriggers、lfoShapes、sampleLoopModes、sampleKeyTracks、partRigModes、sampleDescLoopModes のテーブルが以下の対応するユニオン型にあたり、リトリガーの値は SYNTH_RETRIGGERS としてもエクスポートされます。
| 型 | 値 | 現れる場所 |
|---|---|---|
SynthEngineMode | 'default', 'subtractive', 'fm', 'karplus-strong', 'modal', 'additive', 'percussion', 'piano', 'pipe-organ', 'bowed-string', 'reed', 'brass', 'flute', 'plucked-string', 'vocal', 'free-reed', 'harpsichord', 'sample' | SynthPatch.engineMode。エンジンモードだけを設定したパッチは、そのエンジンのベースプリセットで発音する。'sample' はバンクを渡すまで無音 |
SynthOscWaveform | 'default', 'sine', 'saw', 'square', 'triangle', 'noise' | SynthPatch.waveform |
SynthFilterModel | 'default', 'svf', 'transistor-ladder', 'diode-ladder', 'sallen-key', 'svf-4-pole' | SynthPatch.filterModel。'svf-4-pole' は 2 段のステートバリアブルセクションによる、飽和しない 24 dB/オクターブのローパス |
SynthLfoShape | 'default', 'triangle', 'sine', 'random' | SynthPatch.lfoShape。すべての行き先でのビブラートとトレモロの LFO 波形。SYNTH_LFO_SHAPES と一緒にエクスポート。'random' はボイスごとに種を決める平滑化サンプル&ホールドなので、バウンスを繰り返しても同じになります |
SynthFilterOutput | 'default', 'lowpass', 'bandpass', 'highpass' | SynthPatch.filterOutput(SVF のみ) |
SynthBodyType | 'default', 'none', 'guitar', 'violin', 'wood-tube', 'brass-bell', 'vocal' | SynthPatch.body |
SynthRetrigger | 'default', 'free', 'note' | SynthPatch.retrigger。Node/WASM では SynthRetrigger と SYNTH_RETRIGGERS としてエクスポート |
SynthModSource | 'none', 'amp-env', 'filter-env', 'lfo1', 'lfo2', 'velocity', 'key-track', 'mod-wheel', 'random', 'breath', 'aftertouch', 'expression-cc', 'pitch-bend' | SynthModRouting.source |
SynthModDestination | 'none', 'pitch-cents', 'cutoff-cents', 'amp-gain', 'pan-units', 'resonance-q', 'vibrato-depth-cents', 'filter-env-depth', 'lfo1-rate-scale', 'excitation-force', 'excitation-position', 'excitation-brightness', 'spectrum-morph' | SynthModRouting.destination |
SampleLoopMode / SampleKeyTrack | 'default', 'none', 'continuous', 'key-down' / 'default', 'on', 'off' | SynthPatch.sampleLoop / SynthPatch.sampleKeyTrack |
SampleDescLoopMode | 'none', 'continuous', 'key-down' | SampleDesc.loopMode。録音自体のループモードで、SampleLoopMode とは別の集合 |
BuiltinSynthWaveform | 'sine', 'saw', 'sawtooth', 'square', 'triangle', または 0〜3 | BuiltinSynthConfig.waveform |
ControllerInput / ControllerAxis | 'control-change', 'channel-pressure', 'poly-pressure', 'pitch-bend', 'velocity' / 'none', 'excitation', 'position', 'brightness', 'morph', 'loudness', 'pitch-cents', 'vibrato-depth' | RealtimeEngine.bindController に渡す ControllerBinding.input / .axis |
Articulation | 'poly', 'mono-retrigger', 'mono-legato' | RealtimeEngine.setArticulation |
MpeDimension / NoteTracking | 'bend', 'pressure', 'timbre' / 'last', 'lowest', 'highest', 'all' | RealtimeEngine.setControllerNoteTracking |
SourceBackend | 'sf2', 'synth' | Project.soundFontManifest が返す Sf2ProgramStatus.backend |
EngineCaptureSource | 'output', 'input', または序数 | RealtimeEngine.setCaptureSource |
ProjectTrackKind | 'audio', 'midi', 'aux', または 0〜2 | Project.addTrack、Project.setTrackKind |
ProjectLoopMode | 'off', 'loop', または 0〜1 | Project.setClipLoop |
ProjectFadeCurve | 'linear', 'equal-power'('equal_power'・'equalPower'・'equalpower' も可), 'exponential'/'exp', 'logarithmic'/'log', または 0〜2 | Project.setClipFade に渡す ProjectClipFade.curve |
MasteringProcessorCategory | 'dynamics', 'effects', 'eq', 'final', 'maximizer', 'multiband', 'other', 'reference', 'repair', 'saturation', 'spectral', 'stereo' | masteringProcessorCatalog() が返す MasteringProcessorCatalogEntry.category |
MasteringRealtimeCost | 'low', 'moderate', 'high' | MasteringProcessorCatalogEntry.realtimeCost(未評価のときは null) |
PairProcessor | 'match.applyMatchEq', 'match.alignReferenceToSource', 'match.abSwitch', 'match.abCrossfade' | masteringPairProcess の processorName。masteringPairProcessorNames() で一覧できる |
PairAnalysis | 'match.referenceLoudness', 'match.tonalBalance', 'match.tonalBalanceLogBands', 'match.matchEqCurve', 'match.estimateReferenceDelaySamples' | masteringPairAnalyze の analysisName。masteringPairAnalysisNames() で一覧できる |
StereoAnalysis | 'stereo.monoCompatCheck', 'stereo.monoCompatCheckLogBands' | masteringStereoAnalyze の analysisName。masteringStereoAnalysisNames() で一覧できる |
DehumMode | 'subtract', 'notch' | masteringRepairDehum の mode |
MixAnalysisBand | 'sub', 'low', 'lowMid', 'mid', 'highMid', 'high', 'air' | MixBandOccupancy のキー。ミックスアシスタントの解析における MixCrowdedBand.band |
SpectralEditMode / SpectralEditWindow | 'gain', 'attenuate', 'mute', 'heal' / 'hann', 'hamming', 'blackman', 'rectangular', 'rect' | spectralEdit に渡す SpectralRegionOp.mode / SpectralEditOptions.window |
NoteTargetUnmatchedPolicy | 'leave'(既定), 'mute', 'nearest' | assignNoteTargets の unmatchedPolicy |
MasteringInsertParamInfo と CapabilityCatalogParameter の id は number | null、choices は MasteringInsertParamChoice[] | null、slot は string | null です。CapabilityCatalogProcessor.slots は MasteringInsertSlot で表す条件付きキー群を列挙します。CapabilityCatalog.masteringPresets は name、kind、targetLufs、truePeakCeilingDb、maxLimiterGainReductionDb を持つ要素を返し、修復プリセットでは後ろ 3 つが null です。SynthParamInfo(synthEngineParamInfo(engineMode) と synthPatchParamInfo() が返す)は name、type('number' または 'boolean')、省略可能な integer、min、max、default(number | boolean。スイッチでは真偽値)、unit に加え、省略可能な activeWhen(SynthParamCondition[][]。key、scope('engine' または 'patch')、relation('eq'、'ne'、'gt'、'ge'、'lt'、'le' のいずれか)、value)を持ちます。内側の配列のどれか 1 つで条件がすべて成り立てば、そのフィールドはボイスに届きます。activeWhen は無条件のフィールドでは存在しません。activeWhen のないフィールドでも、演奏(ベロシティ、コントローラー、重なったノート)があるときだけ効く場合や、ある値を超えると飽和する場合があります。synthEngineParamInfo はセクションを持たないモードでは [] を返します。SynthPatch.retrigger のボイス開始時の挙動は内蔵シンセサイザーを参照してください。