Skip to content

CLI リファレンス

sonare コマンドラインインターフェースの完全なリファレンス。

CLI は、アプリケーションコードを書かずに、簡易確認、バッチ処理、スクリプト向け JSON 出力を行いたい場合に使います。UI を作る場合は、WebAssembly ガイドPython APIミキシングエンジン から始めてください。

このページで身につくこと

このページを読むと、次のことを判断・実行できるようになります。

  • PyPI の sonare コマンドを導入し、ソースビルドの C++ CLI との違いを理解できる。
  • 簡易解析、特徴量サマリー、編集、マスタリング、音響チェック、簡単なミキシングに合うコマンドを選べる。
  • 人が読む出力と、スクリプト向けの --json 出力を使い分けられる。
  • CLI ではなく Python、WASM、ネイティブ API へ移るべきワークフローを判断できる。

最初に試すコマンド

目的コマンド
全体の要約を見るsonare analyze music.mp3
テンポだけを見るsonare bpm music.mp3
キーだけを見るsonare key music.mp3
スクリプトで扱いやすい出力にするsonare analyze music.mp3 --json

この 4 つのコマンドは pip でインストールした CLI から実行できます。以降のセクションでは、ソースビルドの C++ CLI が必要なコマンドに印を付けています。コマンドが見つからないときは、入力ミスを疑う前にまずその表示を確認してください。

CLI とは?

CLI は Command Line Interface の略で、ターミナルから実行するコマンド形式の入口です。アプリに組み込む前の確認、複数ファイルのバッチ処理、JSON を別スクリプトへ渡す用途に向いています。画面 UI やライブ処理を作る場合は、WASM / Python / C++ API の方が扱いやすいことが多いです。

どの CLI を使っているか

ソースツリーには 2 種類の sonare コマンドライン入口があります。

CLI入手方法向いている用途コマンド範囲
Python CLIpip install libsonare多くのユーザー向け。バッチ解析、特徴量サマリー、編集、マスタリング、簡単なミキシング広く安定しており、ファイルデコードも扱いやすい
C++ CLIBUILD_CLI=ON でソースビルド開発、互換性確認、低レベルユーティリティ、追加のシーン書き出し一部の特徴量・ユーティリティは Python CLI より多い

このページで明示的に「ソースビルドの C++ CLI」と書いていない限り、PyPI の Python CLI で使えるコマンドとして読んでください。

pip で簡単インストール

sonare CLI は PyPI の Python パッケージに含まれます。

bash
pip install libsonare
sonare analyze music.mp3

npm の WebAssembly パッケージ @libraz/libsonare ではインストールされません。

標準の PyPI ホイールは WAV/MP3 をデコードします。M4A/AAC/FLAC/OGG/Opus を直接読むには FFmpeg 有効ビルドが必要です。

C++ CLI にはさらにコマンドがあります

Python CLI はすでに解析・特徴量・編集・マスタリング・mix をカバーしています (下の その他のコマンド を参照)。ソースからビルドすると、PyPI パッケージにはない追加コマンドを含む C++ CLI が利用できます。ソースからビルド を参照してください。

  • 解析: sections, melody, boundaries, meter, clipping, dynamic-range, stereo, phase, system-info
  • エフェクト/変換: pitch-shift, time-stretch, preemphasis, deemphasis, trim-silence, split-silence, normalize, gain, fade, filter, resample
  • 合成: tone, chirp, clicks
  • 特徴量: cqt, vqt, mel-to-audio, mfcc-to-audio, tonnetz, pcen, onset-envonset-envelope の短縮エイリアス), fourier-tempogram, tempogram-ratio
  • librosa 互換ユーティリティ: frames-to-samples, samples-to-frames, power-to-db, amplitude-to-db, db-to-power, db-to-amplitude, frame-signal, pad-center, fix-length, fix-frames, peak-pick, vector-normalize
  • マスタリング: mastering-pair-processor(ソース/リファレンスのペア処理), mastering-stereo-analyses, mastering-stereo-analyze

概要

sonare CLI は、ターミナルでの簡易確認、バッチ解析、スクリプト向け JSON サマリー出力のためのツールです。重い解析処理は Python 実装ではなく、Python パッケージからネイティブ C++ パイプラインを呼び出して実行します。

bash
sonare <command> [options] <audio_file>

グローバルオプション

オプション説明
--jsonJSON 形式で結果を出力
--help, -hコマンドのヘルプを表示
-o, --output出力 WAV パス。編集・マスタリング・eqmix コマンドはここに WAV を書き出します。解析・特徴抽出コマンドは stdout に出力します
--n-fft <int>FFT サイズ(デフォルト: 2048)
--hop-length <int>ホップ長(デフォルト: 512)
--n-mels <int>Mel バンド数(デフォルト: 128)

--json はスクリプトで扱いやすい要約JSONを出力します。Python CLI の melchroma は特徴量の全行列をそのまま出力するのではなく、次元や 要約値を出力します。

解析コマンド

analyze

BPM、キー、拍子、ビートを含む音楽解析。

bash
sonare analyze music.mp3
sonare analyze music.mp3 --json

出力:

  > Estimated BPM : 120.50 BPM  (conf 95.0%)
  > Estimated Key : C major  (conf 85.0%)
  > Time Signature: 4/4
  > Beats: 240

JSON 出力:

json
{
  "bpm": 120.5,
  "bpm_confidence": 0.95,
  "key": {
    "root": 0,
    "mode": 0,
    "confidence": 0.85,
    "name": "C major"
  },
  "time_signature": {
    "numerator": 4,
    "denominator": 4
  },
  "beats": 240
}

bpm

テンポ(BPM)のみを検出。

bash
sonare bpm music.mp3
sonare bpm music.wav --json

出力:

  BPM: 128.00

key

音楽キーを検出。

bash
sonare key music.mp3
sonare key music.mp3 --json
sonare key music.mp3 --candidates 5 --profile temperley --modes major-minor

出力:

  Key: A minor (confidence: 82.0%)

JSON 出力:

json
{"root": 9, "mode": 1, "confidence": 0.82, "name": "A minor"}

主なオプション:

オプション用途
--candidates N最上位だけでなく上位 N 個のキー候補を表示
--use-hpssドラムが強い素材で、倍音成分を使ってキーを見やすくする
--loudness-weightedRMS でクロマフレームを重み付けし、静かな箇所の影響を下げる
--high-pass-hz FREQキー解析前に低域を無視する
--modes major-minor|all|...候補モードを制限する
--profile ks|krumhansl|temperley|shaath|keyfinder|faraldo-edmt|edmt|faraldo-edma|edma|faraldo-edmm|edmm|bellman-budge|bellmanキープロファイルの系統を選ぶ
--genre-hint auto|edm|electronic|dance|pop|classical|jazzジャンルヒントからプロファイルを選ばせる
キープロファイル・ジャンルヒント・--high-pass-hz とは?
  • キープロファイル — あるキーで 12 のピッチクラスがそれぞれどれくらい目立ちやすいかのテンプレートです。検出器は曲のクロマをこれらと比べ、最も一致するものを選びます。

    系統(ks / krumhansltemperleyshaath / keyfinder、Faraldo EDM 系、bellman / bellman-budge)はそれぞれ別の素材で調整されています。そのため、ジャンルによって相性が変わります。

  • ジャンルヒント — プロファイルを直接指定する代わりに、おおまかなスタイルを伝えると CLI が合うプロファイルを選びます(例: EDM ヒントなら EDM 向けに調整したプロファイル)。

  • --high-pass-hz — ハイパスフィルターで、キー解析の前に指定周波数より下のエネルギーを除きます。低域のランブルやサブキックがクロマを歪めるのを防ぎます。80〜120 Hz 程度が一般的です。

beats

ビート時刻を検出。

bash
sonare beats music.mp3
sonare beats music.mp3 --json

出力:

  Beat times (240 beats):
    1. 0.520s
    2. 1.020s
    3. 1.520s
    ... (237 more)

onsets

オンセット時刻(音の立ち上がり)を検出。

bash
sonare onsets music.mp3
sonare onsets music.mp3 --json

特徴コマンド

mel

メルスペクトログラムを計算し、その次元を表示。

bash
sonare mel music.mp3
sonare mel music.mp3 --n-mels 80
sonare mel music.mp3 --fmin 40 --fmax 16000 --htk
オプションデフォルト説明
--fmin FREQ0メルバンドの最低周波数(Hz)
--fmax FREQ0メルバンドの最高周波数(Hz)。0 ならナイキスト周波数を使う
--htk無効Slaney スケールではなく HTK メルスケールを使う

出力:

  Mel Spectrogram:
    Shape: 128 mels x 8520 frames

chroma

クロマグラム(ピッチクラス分布)を計算。

bash
sonare chroma music.mp3
sonare chroma music.mp3 --json

出力:

  Chromagram: 12 bins x 8520 frames
  Mean energy per pitch class:
    C  0.1250 #############
    C# 0.0450 #####
    D  0.0820 ########
    ...

spectral

スペクトル特徴(セントロイド、帯域幅、ロールオフ、フラットネス、ZCR、RMS)を計算。

bash
sonare spectral music.mp3
sonare spectral music.mp3 --json

出力:

  Spectral Features:
  Feature          Mean       Std        Min        Max
  centroid         2150.5     850.2      120.5      8500.0
  bandwidth        1850.2     520.8       50.2      4200.5
  rolloff          4520.8    1200.5      200.0     10000.0
  flatness         0.0250     0.0180     0.0010     0.1520
  zcr              0.0850     0.0420     0.0020     0.2500
  rms              0.0520     0.0280     0.0001     0.1850

pitch

YIN または pYIN アルゴリズムでピッチを追跡。

bash
sonare pitch music.mp3
sonare pitch music.mp3 --algorithm yin
オプションデフォルト説明
--algorithmpyinピッチアルゴリズム: "yin" または "pyin"

出力:

  Pitch Tracking (pyin):
    Frames:    8520
    Median F0: 285.5 Hz
    Mean F0:   302.8 Hz

hpss

HPSS(Harmonic / Percussive Source Separation)。倍音成分(ボーカル/メロディ)と打撃成分(ドラム)を分離します。

bash
sonare hpss music.mp3
sonare hpss music.mp3 --json

出力:

  HPSS: 3980000 samples
  Harmonic energy:   0.025000
  Percussive energy: 0.018000

その他のコマンド

Python CLI には、上記のコア以外にも多くのサブコマンドがあります。

音声ファイルを解析・特徴抽出するコマンドは、共通オプション(--json--n-fft など)とファイル引数を取ります。

一覧表示やプリセット参照のコマンドは、より小さい専用のオプションセットを持ちます。編集系コマンドは -o/--output を渡すと WAV を書き出します。

その他の解析

ルーム音響コマンドの用語

等価ルーム は、音声から推定した実用上の部屋モデルで、正確な実寸ではありません。RIR は room impulse response の略です。ルームモーフィングは音作り向けのルーム効果であり、残響除去ではありません。

コマンド説明主なオプション
sonare downbeats music.mp3ダウンビート時刻(秒)
sonare chords music.mp3コード進行--min-duration, --smoothing-window, --threshold, --triads-only, --nnls, --no-beat-sync, --use-hmm, --hmm-beam-width, --key-context, --key-root, --key-mode, --detect-inversions
sonare rhythm music.mp3リズム特性(シンコペーション、グルーヴ、規則性)
sonare dynamics music.mp3ダイナミクス/ラウドネスの要約
sonare timbre music.mp3音色/スペクトル形状の要約
sonare lufs music.mp3EBU R128 ラウドネス--series(momentary/short-term の系列も出力)
sonare acoustic room.wavルーム音響推定(RT60/EDT/C50/C80)--ir(入力をインパルス応答として扱う)
sonare estimate-room room.wav等価ルーム推定(体積、寸法、吸音率、DRR、信頼度)--json, --aspect-lw, --aspect-lh, --reference-absorption, --sabine, --n-octave-bands
sonare synthesize-rir --length 7 --width 5 --height 3 -o rir.wavシューボックス形状からモノラル RIR を合成--source-x, --source-y, --source-z, --listener-x, --listener-y, --listener-z, --absorption, --sample-rate, --ism-order, --seed, --max-seconds
sonare room-morph dry.wav --length 12 --width 9 --height 4 -o wet.wav目標ルームへ寄せる音作り向けのルームモーフィング--wet, --suppression, 形状・配置オプション、--max-seconds
sonare meter music.wavピーク、RMS、クレスト、トゥルーピーク、クリッピング率、無音率、DC オフセットソースビルド C++ CLI のみ。--clip-threshold, --oversample
sonare clipping music.wavクリップしたサンプルと区間を検出ソースビルド C++ CLI のみ。--threshold, --min-region
sonare dynamic-range music.wavpercentile RMS ベースのダイナミックレンジソースビルド C++ CLI のみ。--window-sec, --hop-sec, --low-percentile, --high-percentile
sonare stereo left.wav --reference right.wav左右ファイルからステレオ相関と幅を測定ソースビルド C++ CLI のみ
sonare phase left.wav --reference right.wav左右ファイルからフェーズスコープ要約を測定ソースビルド C++ CLI のみ

その他の特徴量

コマンドPython CLIソースビルド C++ CLI説明
sonare onset-envelope music.mp3対応対応オンセット強度包絡
sonare onset-env music.mp3非対応対応オンセット強度包絡の短縮エイリアス
sonare tempogram music.mp3対応対応自己相関テンポグラム
sonare plp music.mp3対応対応主要局所パルス
sonare nnls-chroma music.mp3対応対応NNLS クロマグラム
sonare cqt music.mp3非対応対応Constant-Q 変換のサマリー
sonare vqt music.mp3非対応対応Variable-Q 変換のサマリー
sonare mel-to-audio music.mp3 -o recon.wav非対応対応計算したメルスペクトログラムから Griffin-Lim で音声を再構成
sonare mfcc-to-audio music.mp3 -o recon.wav非対応対応計算した MFCC からメル、Griffin-Lim 経由で音声を再構成
sonare tonnetz music.mp3非対応対応Tonal centroid 特徴
sonare pcen --values ... --n-bins 128 --n-frames 10非対応対応平坦化した行列への per-channel energy normalization
sonare fourier-tempogram music.mp3非対応対応Fourier tempogram
sonare tempogram-ratio music.mp3非対応対応テンポ比特徴量

Python CLI は行列特徴量の全データをそのまま出力せず、サマリーを表示します。完全な特徴量行列が必要な場合は Python API または JavaScript API を使ってください。

編集

音声を変換し、-o で WAV を書き出します。

コマンド説明オプション
sonare pitch-correct vocal.wav -o out.wav目標 MIDI ノートへピッチ補正--current-midi(69.0), --target-midi(69.0)
sonare note-stretch take.wav -o out.wav単一ノート区間をストレッチ--onset, --offset(サンプル位置), --ratio(1.0)
sonare voice-change vocal.wav -o out.wavボイスチェンジ(ピッチ+フォルマント)--pitch-semitones(0.0), --formant-factor(1.0)

Python CLI は、上の 3 つのファイル書き出し編集コマンドと HPSS サマリーを中心に提供します。

ソースビルドの C++ CLI では、同じ 3 つの編集コマンドに加えて、低レベルの処理コマンドも使えます。

C++ コマンド必須または主なオプション
pitch-shift--semitones
time-stretch--rate
normalize-o; --mode peak|rms, --target-db
gain-o, --gain-db
fade-o, --fade-in または --fade-out
filter-o, --type hp|lp|bp|notch; hp/lp は --cutoff、bp/notch は --center + --bandwidth
resample-o, --target-sr
preemphasis, deemphasis, trim-silence, split-silence処理後のファイルを書き出す場合は -o

リアルタイムボイスプリセット

リアルタイムボイスチェンジャープリセットの参照、検証、レンダリングを行うコマンドです。

コマンド説明オプション
sonare voice-change vocal.wav -o out.wav--preset--preset-json--preset-pack--set を渡した場合はリアルタイム音声プリセットチェーンでレンダリング--preset--preset-json--preset-pack--set PATH=VALUE
sonare voice-presetsリアルタイムボイスチェンジャーのプリセット ID を一覧表示--json
sonare voice-preset1 つのプリセット設定を JSON で出力--preset(既定: neutral-monitor)、--json
sonare voice-preset-validate preset.jsonプリセット JSON ファイルまたはプリセットパックを検証・正規化パック検証時は --preset--set PATH=VALUE--json

リアルタイムプリセット系のオプションを渡さない場合、voice-change--pitch-semitones--formant-factor で制御する単純なピッチ/フォルマント変換を使います。プリセット系のオプションを渡した場合はリアルタイム音声チェーンを使い、これらの単純なピッチ/フォルマント指定は参照しません。

合成

ソースビルドの C++ CLI では、簡単なテスト信号も生成できます。

C++ コマンド必須または主なオプション
tone -o tone.wav--frequency; 任意で --sr, --duration, --phase, --amplitude
chirp -o sweep.wav--fmax; 任意で --fmin, --exponential, --sr, --duration
clicks -o clicks.wav秒単位のカンマ区切り --times; 任意で --sr, --length, --frequency, --click-duration

ユーティリティコマンド

info

オーディオファイル情報を表示。

bash
sonare info music.mp3
sonare info music.wav --json

出力:

  Duration:    3:00 (180.5s)
  Sample Rate: 22050 Hz
  Samples:     3980000

version

バージョン情報を表示。

bash
sonare version
sonare version --json

出力:

libsonare 1.4.1 (Python CLI)

使用例

基本解析ワークフロー

bash
# クイック BPM とキーチェック
sonare bpm song.mp3
sonare key song.mp3

# スクリプト用に JSON で完全解析
sonare analyze song.mp3 --json > analysis.json

特徴量サマリーの書き出し

bash
# コンパクトな特徴量サマリーを書き出す
sonare mel song.mp3 --json > mel_features.json
sonare spectral song.mp3 --json > spectral_features.json
sonare chroma song.mp3 --json > chroma_features.json

バッチ処理

bash
# ディレクトリ内のすべての MP3 ファイルを解析
for f in *.mp3; do
  echo "Processing: $f"
  sonare analyze "$f" --json > "${f%.mp3}.json"
done

# すべてのファイルから BPM を抽出
for f in *.wav; do
  bpm=$(sonare bpm "$f" --json | jq -r '.bpm')
  echo "$f: $bpm BPM"
done

マスタリングのワークフロー

コマンドの提供範囲

PyPI の Python CLI には masteringmastermastering-processormastering-processorsmastering-chainmastering-presetseqdeclip、および下記のペア解析コマンドが含まれます。

ソースからビルドした C++ CLI では、ソース/リファレンスを処理する mastering-pair-processor、ステレオ解析一覧、ステレオ解析実行などの追加マスタリングコマンドも利用できます。

ソースからビルド を参照してください。

bash
# 目標ラウドネスとトゥルーピーク上限でノーマライズし、WAV を書き出す
sonare mastering track.wav --target-lufs -14 --ceiling-db -1 -o master.wav

# このビルドに含まれるマスタリングプロセッサを確認
sonare mastering-processors

# 名前付きマスタリングプロセッサを実行して WAV を書き出す
sonare mastering-processor track.wav \
  --processor spectral.airBand \
  --params amount=0.4,shelfFrequencyHz=14000 \
  -o libsonare-master.wav

# 統合イコライザを適用(1 回に 1 バンド、または --params で複数指定)
sonare eq track.wav --type 2 --frequency-hz 12000 --gain-db 2.5 --q 0.7 -o eq.wav

# 名前付きマスタリングプリセットを適用(デフォルトのプリセット: pop)
sonare master track.wav --preset pop -o mastered.wav

# JSON 設定から構成可能なマスタリングチェーンを実行
sonare mastering-chain track.wav --config-file chain.json -o chained.wav

# 利用可能なマスタリングプリセット名を一覧表示
sonare mastering-presets

# LPC 再構成でクリップしたオーディオを修復
sonare declip clipped.wav -o fixed.wav

# リファレンスを使ったラウドネス/トーン解析
sonare mastering-pair-analyses
sonare mastering-pair-analyze track.wav \
  --reference reference.wav \
  --analysis match.referenceLoudness \
  --json > mastering-report.json

ペア解析では、比較の前に CLI がリファレンスをソースのサンプルレートへリサンプリングするため、2 つのファイルでサンプルレートを揃えておく必要はありません。リサンプリングやトリムをより細かく制御したい場合は Python API を使ってください。

/ja/mastering ブラウザデモも同じマスタリングプロセッサ群を呼び出しています。デモから書き出したレポートを CLI 自動化の起点として活用できます。

Python CLI の名前付きマスタリングコマンド:

目的コマンド
目標ラウドネス+トゥルーピーク上限でノーマライズsonare mastering
名前付きマスタリングプリセットを適用sonare master
構成可能なマスタリングチェーンを実行sonare mastering-chain
マスタリングプリセット名を一覧表示sonare mastering-presets
クリップしたオーディオを修復(LPC 再構成)sonare declip
統合イコライザを適用sonare eq
モノラル/ステレオプロセッサ一覧sonare mastering-processors
名前付きプロセッサを適用sonare mastering-processor
ペアプロセッサ一覧sonare mastering-pair-processors
ペア解析一覧sonare mastering-pair-analyses
ソース/リファレンスのペア解析sonare mastering-pair-analyze
オーディオプロファイル解析(JSON を出力)sonare mastering-profile
アシスタントによるチェーン提案(JSON を出力)sonare mastering-suggest
ストリーミングプラットフォームのノーマライズプレビュー(JSON を出力)sonare mastering-streaming

3 つのアシスタントコマンドはいずれもオーディオファイルを受け取り、JSON オブジェクトを標準出力に出力します。

コマンド主なオプション出力
sonare mastering-profile track.wav--params key=val,...オーディオプロファイル JSON(ラウドネス・ダイナミクス・スペクトル特性)
sonare mastering-suggest track.wav--params key=val,...推奨マスタリングチェーン JSON
sonare mastering-streaming track.wav--platforms '[...]', --platforms-file f.jsonプラットフォームごとのノーマライズプレビュー JSON

--platforms{name, targetLufs, ceilingDb} オブジェクトの JSON 配列を受け取ります。--params はカンマ区切りの key=value 浮動小数点ペアをアシスタント呼び出しに渡します。

プリセット・チェーン・修復系のコマンドはオーディオファイルを受け取り、-o で WAV を書き出します。ただし mastering-presets は名前を一覧表示するだけです。

コマンド主なオプション備考
sonare master track.wav -o out.wav--preset NAME(デフォルト pop), --config '{...}', --config-file f.json, --params k=v,...名前付きマスタリングプリセットを適用する。--config--config-file--params でプリセット値を上書きできる
sonare mastering-chain track.wav -o out.wav--config '{...}', --config-file f.json, --params k=v,...JSON 設定から構成可能なマスタリングチェーンを実行する
sonare mastering-presetsグローバルの --json フラグに対応利用可能なマスタリングプリセット名を一覧表示する
sonare declip clipped.wav -o out.wav--clip-threshold(0.98), --lpc-order(36), --iterations(2), --lpc-blend(0.65)LPC 再構成でクリップしたオーディオを修復する

ソースビルド C++ CLI のみ: sonare mastering-pair-processorsonare mastering-stereo-analysessonare mastering-stereo-analyze

関連するマスタリングガイド: 配信ターゲットメーターの読み方エラー復旧

RT60、EDT、C50、C80、D50、体積、寸法、吸音率バンド、DRR、RIR 合成時のエラー状態、信頼度などのルーム音響フィールドは ルーム音響解析 で説明しています。

ミキシングワークフロー

コマンドの提供範囲

PyPI の Python CLI には mix が含まれます。JSON ファイルまたは組み込みプリセットからミキサーシーンを読み込み、必要ならストリップごとの入力 WAV をレンダリングします。

mixing-presetsmixing-preset も含まれます。シーン一覧の確認や、WASM/Python/Node/C++ のミキサー API に読み込ませるシーン JSON の出力に使えます。

bash
# 組み込みミキサーシーンプリセットを一覧表示
sonare mixing-presets

# 1 つのプリセットのシーンを JSON で出力
# (--preset は vocalReverbSend, drumBusSubgroup, commentaryDucking のいずれか。
#   省略時は vocalReverbSend)
sonare mixing-preset --preset vocalReverbSend > scene.json

# 組み込みシーンプリセットを読み込み、ストリップ入力をステレオ WAV にレンダリング
sonare mix \
  --preset vocalReverbSend \
  --input vocal.wav \
  --input music.wav \
  --sample-rate 48000 \
  -o mixed.wav

# または JSON からシーンを読み込む(例: `mixing-preset` で出力したもの)
sonare mix --scene scene.json --input vocal.wav --input music.wav -o mixed.wav

mix--scene--preset のいずれか一方が必須です。ストリップごとに --input を 1 つ渡し、ファイルへのレンダリングには -o/--output が必要です。

関連: ミキシングエンジン

プロジェクト& MIDI ワークフロー

sonare project コマンドグループは、JSON プロジェクトファイルを使ったヘッドレスのプロジェクト処理や、Standard MIDI File(SMF)/MIDI 2.0 のワークフローを実行します。midi-render はプロジェクトの MIDI を NativeSynth でレンダリングし、project synth-presets は組み込みの楽器パッチを一覧表示します。

bash
# プロジェクトの ABI バージョンを表示
sonare project abi

# 指定サンプルレートで空のプロジェクト JSON を作成
sonare project new --sample-rate 48000 -o project.json

# プロジェクト JSON を検証(診断を表示。-o を付けると正規化 JSON も書き出す)
sonare project validate --in project.json
sonare project validate --in project.json -o canonical.json

# プロジェクト JSON をコンパイルチェック(診断を表示。エラー時は非ゼロで終了。ファイルは書き出さない)
sonare project compile --in project.json

# プロジェクトをステレオ WAV にレンダリング(マルチチャンネルのバウンスもステレオ出力)
sonare project bounce --in project.json --sample-rate 48000 -o bounce.wav

# クリップ音声ではなくプロジェクトの MIDI を NativeSynth プリセットでレンダリング
sonare project bounce --in project.json --synth -o synth-bounce.wav
コマンド説明主なオプション
sonare project abiプロジェクトの ABI バージョンを表示
sonare project new空のプロジェクト JSON を作成--sample-rate, -o
sonare project validateプロジェクト JSON を検証。正規化 JSON の書き出しも可--in, -o
sonare project compileプロジェクト JSON をコンパイルチェック。診断を表示し、エラー時は非ゼロで終了(ファイルは書き出さない)--in, --json
sonare project bounceプロジェクトをステレオ WAV にレンダリング--in, --sample-rate, --frames, --block-size, --channels, --synth, -o
sonare project export-smfプロジェクトを Standard MIDI File に書き出し--in, -o
sonare project import-smfStandard MIDI File からプロジェクトを構築--smf, -o
sonare project export-midi2プロジェクトを MIDI 2.0 Clip File に書き出し--in, -o
sonare project import-midi2MIDI 2.0 Clip File からプロジェクトを構築--midi2, -o
sonare project synth-presets組み込み NativeSynth プリセットを一覧表示--json
bash
# プロジェクトを Standard MIDI File 形式でラウンドトリップ
sonare project export-smf --in project.json -o project.mid
sonare project import-smf --smf project.mid -o roundtrip.json

# MIDI 2.0 Clip File 形式でラウンドトリップ
sonare project export-midi2 --in project.json -o project.midi2
sonare project import-midi2 --midi2 project.midi2 -o roundtrip2.json

# MIDI プロジェクトを NativeSynth でステレオ WAV にレンダリング
sonare midi-render --in project.json --synth acoustic-piano --sample-rate 48000 -o render.wav

# 組み込みシンセプリセットを一覧表示
sonare project synth-presets
コマンド説明主なオプション
sonare midi-renderMIDI プロジェクトを NativeSynth でレンダリング--in, --synth, --sample-rate, --frames, --block-size, --channels, -o
sonare project synth-presets組み込み NativeSynth プリセットを一覧表示--json

バウンスやレンダリングのコマンドはステレオ WAV を出力します。SoundFont(SF2)と宛先ごとのシンセ JSON はこれらの CLI コマンドには接続されていません。SoundFont を使ったバウンスには Project API を使ってください。

関連: プロジェクト編集プロジェクトバウンスNativeSynthSoundFont プレイヤー

対応オーディオ形式

形式拡張子備考
WAV.wav非圧縮 PCM
MP3.mp3minimp3 でデコード
M4A / AAC / FLAC / OGG / Opus形式により異なるFFmpeg 有効ビルドのみ対応

現在のビルドが FFmpeg デコードに対応しているかは、Python から libsonare.has_ffmpeg_support() で確認できます。

終了コード

Python CLI の失敗は、C ABI のエラーコード(バインディングが SonareError.code / ErrorCode として持つのと同じ値)に揃えた終了コードに対応付けられるため、スクリプトから失敗の種類を区別できます。

コード説明
0成功
2使用方法エラー(不正な引数。argparse 標準のコード)
3無効なパラメータ
4ファイル未検出
5無効なフォーマット
6デコード失敗
7メモリ不足
8非対応
9無効な状態
10その他のエラー

Python CLI では、SONARE_LEGACY_EXIT=1 を設定すると「失敗はすべて 1」という旧来の挙動に戻せます(終了コード 1 を前提に書かれたスクリプト向け)。ソースビルドの C++ CLI はこの変数の影響を受けず、従来どおり 0(成功)/ 1(エラー)のままです。

パフォーマンスのヒント

  1. 大きなファイル: 10分を超えるファイルは、セグメントを解析することを検討:

    bash
    # 最初の60秒のみ解析(ffmpeg使用)
    ffmpeg -i long_song.mp3 -t 60 sample.wav
    sonare analyze sample.wav
  2. FFT サイズ: 小さい FFT サイズ(--n-fft 1024)は高速だが周波数解像度が低い。

  3. ホップ長: 大きいホップ長(--hop-length 1024)は高速だが時間解像度が低い。