リアルタイムエンジン
StreamAnalyzer が聴くのに対し、RealtimeEngine は再生する側です。
libsonare のリアルタイム面のうち、トランスポートと再生を担います。テンポ、クリップのスケジューリング、メトロノーム、オートメーション、メーターのテレメトリを扱います。
ライブアナライザーではなく、再生エンジンを作るときに使います。API は リアルタイムとストリーミング を参照してください。
トランスポート: 再生ヘッドとテンポ
トランスポートは再生クロックです — 再生/停止/シーク、現在位置、ループ点、そして他のすべてが基準とするテンポ。「5 小節目で」スケジュールされたクリップや「2 拍目の」オートメーション点は、トランスポートに対してのみ意味を持つため、トランスポートはエンジン全体が読む共有タイムラインです。
クリップとスケジューリング
エンジンはクリップ — タイムライン上のスケジュール位置に置かれた音声バッファ — を再生します。スケジューリングとは、トランスポートに対してクリップがいつ始まり止まるかを決めることで、1 つの連続ストリームではなく多数の断片から再生を組み立てられます。アレンジ、バックトラック、リズムゲームの譜面はこうして駆動されます。クリップの開始位置を小節や拍で指定すれば、テンポを変えても相対位置が保たれます。
メトロノーム
メトロノームは、トランスポートのテンポと拍子にロックしたクリックイベントを生成します — モニタリング、録音、演奏の整合に役立ちます。同じトランスポートクロックから導かれるため、クリップやオートメーションと自動的に同期します。
テレメトリ: リアルタイムグラフを見る
リアルタイム音声コールバックは、タイミングを壊さずにデバッガで覗くことができません。代わりにエンジンはテレメトリ — メーターと状態の定期的なスナップショット — を出力し、UI が通常の(音声でない)スレッドで読みます。これにより音声経路に手を触れずに、レベルメーター・ゴニオメーター・トランスポート状態を描けます。
libsonare がエンジンをどうモデル化するか
RealtimeEngine(EngineController が駆動)はトランスポートを所有し、ClipAudioBuffer ストレージ上で ClipPlayer/ClipSchedule によりクリップをスケジュールし、Metronome(MetronomeConfig → MetronomeEvent)でクリックを生成し、ミキサーグラフ上でオートメーションを再生します。メーターは MeterTelemetryRecord を生む MeterTelemetryTap と、UI が音声スレッド外で読む汎用 Telemetry チャンネル(TelemetryType/TelemetryErrorCode)で公開されます。エンジン全体はリアルタイム安全で、オフライン(バウンス)でも AudioWorklet 内でも、フリーズやキャプチャの経路を含めて同じく動きます。