Skip to content

リアルタイムエンジン

StreamAnalyzer聴くのに対し、RealtimeEngine再生する側です。

libsonare のリアルタイム機能のうち、トランスポートと再生を担います。テンポ、クリップのスケジュール、メトロノーム、オートメーション、レーンミキサー、録音、UI 向けのメーター/スコープ情報を扱います。

ライブアナライザーではなく、再生エンジンを作るときに使います。アプリに再生ヘッド、クリップ、MIDI、再生中に動くミキサーが必要なら、この層が担当します。API は リアルタイムとストリーミング を参照してください。

トランスポート: 再生ヘッドとテンポ

トランスポートは再生クロックです — 再生/停止/シーク、現在位置、ループ点、そして他のすべてが基準とするテンポ。「5 小節目で」スケジュールされたクリップや「2 拍目の」オートメーション点は、トランスポートに対してのみ意味を持つため、トランスポートはエンジン全体が読む共有タイムラインです。

クリップとスケジューリング

エンジンはクリップ — タイムライン上のスケジュール位置に置かれた音声バッファ — を再生します。スケジューリングとは、トランスポートに対してクリップがいつ始まり止まるかを決めることで、1 つの連続ストリームではなく多数の断片から再生を組み立てられます。アレンジ、バックトラック、リズムゲームの譜面はこの仕組みで再生されます。

ENGINE · LANE MIXERIDLE
エンジンのレーンミキサー — 再生エンジン内のフェーダーとミュート

3 つの MIDI クリップがリアルタイムエンジンでループします。各トラックはレーンを 1 つ占有し、専用のチャンネルストリップを持ちます。フェーダーはストリップのセッターを、ミュートは setSoloMute を呼びます。下の各バンドはエンジンの実際のレーン別出力で、操作のたびに renderOffline で描き直されます。

リードのフェーダー
0 dB
ベースのフェーダー
0 dB
ドラムのフェーダー
0 dB
リードをミュート
ベースをミュート
ドラムをミュート

このデモは同じ考え方を小さく示しています。複数のレーンが同時に鳴り、ミキサーがまとめ、メーターがその出力を反映します。

メトロノーム

メトロノームは、トランスポートのテンポと拍子にロックしたクリックイベントを生成します — モニタリング、録音、演奏の整合に役立ちます。同じトランスポートクロックから導かれるため、クリップやオートメーションと自動的に同期します。

メーター情報: リアルタイムグラフを見る

リアルタイムの音声コールバックは、タイミングを壊さずにデバッガで覗けません。代わりにエンジンは、メーターと状態の定期的なスナップショット(テレメトリ)を出力し、UI が通常の(音声でない)スレッドで読みます。これにより音声経路に手を触れずに、レベルメーター、ゴニオメーター(左右の位相関係を表示するステレオスコープ)、トランスポート状態を描けます。

libsonare がエンジンをどうモデル化するか

RealtimeEngineEngineController と連携してトランスポートを所有し、ClipAudioBuffer ストレージ上で ClipPlayer/ClipSchedule によりクリップをスケジュールし、MetronomeMetronomeConfigMetronomeEvent)でクリックを生成し、ミキサーグラフ上でオートメーションを再生します。メーターは MeterTelemetryRecord を生む MeterTelemetryTap と、UI が音声スレッド外で読む汎用 Telemetry チャンネル(TelemetryType/TelemetryErrorCode)で公開されます。エンジン全体はリアルタイム安全で、オフライン(バウンス)でも AudioWorklet 内でも、フリーズやキャプチャの経路を含めて同じく動きます。

関連: リアルタイムとストリーミングストリーミング解析リアルタイム安全性オートメーションとメーター