メインコンテンツまでスキップ

アーキテクチャ

AIBuds SDK iOS は、それぞれの役割が明確に定義されたモジュール群で構成されています。 モジュール同士の関係を理解すると、必要なものだけを導入し、独自のプラグインで SDK を拡張しやすくなります。

アーキテクチャ概要

SDK は階層構造になっており、上位層は下位層に依存します。多くの階層で、 デバイス側(左)と AI 側(右)が対応しています。

システム構成

AIBuds SDK iOS アーキテクチャ

アプリ

AIBuds デバイスに接続する iOS アプリ

AIBudsAllInOne任意

任意の統合ラッパー

機能モジュール

Audio · VoiceAssistant · LiveStream · CrashReporter · AIBudsAIDashboard

AIBudsSDK

デバイス機能のコア

AIBudsAISDK

AI 機能のコア

ABMateSDK(BLE)

Core Bluetooth 通信プロトコル層

StarBurst / MagicHelper

サードパーティー AI サービス統合層

  • StarBurst AI (ByteDance)
  • MltCloud AI (Meilc)
AIBudsFoundation

デバイス用データモデル

AIBudsAIFoundation

AI 用データモデル

AIBudsLog

共通ログモジュール

AIBudsXLFacility任意

任意のログプラグイン

AIBuds SDK iOS の構成を示します。

上から順に、アプリ → 統合ラッパー → 機能モジュール → コア SDK(デバイス側 + AI 側)→ プロトコルプラグイン → 基盤データモデル → 共通ログという構成です。

デバイスの表現

SDK が扱うすべてのデバイスは、単一のプロトコルで表現されます。 DeviceConvertible(Objective-C では AIBudsDeviceConvertible)は、 アプリがデバイスの識別情報や状態を読み取り、ライフサイクル操作 (connectdisconnectunpairsave)を実行するための統一された窓口です。 操作はマネージャーのシングルトンではなく、デバイスインスタンス自体に対して呼び出します。 DeviceConvertibleNSSecureCoding に準拠しているため、 アプリを再起動してもアーカイブと復元が可能です。

別のプロトコル FoundDeviceConvertibleAIBudsFoundDeviceConvertible)は、スキャンで検出された直後のデバイスを表します。 Core Bluetooth の情報 (central + peripheral + advertisementData + RSSI)を保持しますが、まだ保存できません。 AIBudsSDK.makeStorableDeviceFromDiscovered(_:) で変換し、 永続化できる DeviceConvertible を取得します。

デバイスのライフサイクル

デバイスのライフサイクル

Bluetooth で検出してから、コマンドを受信できる状態になるまで。

スキャンBluetooth デバイスの検出
近くのデバイス

検出済み

スキャナーがアドバタイズ中のデバイスを検出しました。

AIBudsSDK.makeStorableDeviceFromDiscovered(_:)保存可能なモデルを作成
ローカル

保存可能

ローカル保存に適したデバイスモデルへ変換されました。

StoredDevicesMgr.addDevice
保存済み

保存済み

アプリを再起動してもデバイス情報が保持されます。

device.connect(ConnectParams)
処理中

接続中

認証と接続ネゴシエーションを実行しています。

deviceDidReadyデリゲートコールバック
オンライン

準備完了

デバイスがコマンドを受信できる状態です。

利用可能コマンドを受信可能

デバイスは、スキャンで検出 → 保存可能なデバイスへ変換 → ストレージへ保存 → 接続中 → 接続および準備完了、という 5 つの状態を遷移します。

StoredDevicesMgrAIBudsStoredDevicesMgr)は保存済みデバイス一覧を管理します。 addDeviceremoveDeviceallDevicesfindDevice(byMacAddr:)findDevice(byPeripheral:) を提供します。起動時に loadDevicesInBackground を呼び出し、 自動再接続候補を含む保存済みデバイスを復元します。

機能プロトコル

すべてのデバイスが全機能に対応するわけではないため、機能は単一の巨大なデバイスインターフェースではなく、 個別のプロトコルとして表現されています。すべて共通マーカーである DeviceAPIAIBudsDeviceAPI)に準拠します。

プロトコル機能
DeviceInfoAPIバッテリー、デバイス機能、ハードウェア構成、言語、ストレージ、メディア件数、時刻同期・設定
DeviceCommonAPI工場出荷時設定へのリセット、電源オフ
DeviceFindAPIデバイスを探す / 探す処理を停止
DeviceWorkModeAPI / DeviceWorkStateAPI動作モード / 動作状態
DeviceVolumeControlAPI音量の取得 / 設定
DeviceEqualizerAPIイコライザー設定
DeviceANCAPIANC モード、ゲイン、外音取り込み、フェード
DeviceWearDetectionAPI装着検出の対応状況と状態
DeviceTWSAPITWS 接続状態
DeviceMusicControlAPI再生 / 一時停止 / 次へ / 前へ / 音量
DeviceAudioRecordingAPI通常録音、AI 録音、最大録音時間
DeviceCameraAPI写真 / 動画撮影、カメラファームウェア
DeviceRemoteShutterAPIリモートシャッター同期
DeviceFileImportAPIメディアファイルの取得 / 取り込み / 削除
DeviceOtaAPI / DeviceCameraOtaAPIファームウェア更新
DeviceAppsAPIデバイスアプリの起動 / 停止
DeviceServiceAuthAPIサービス認証の再試行と結果通知
DevicePhysicalOperationsAPI本体操作への機能割り当て
LiveStreamingAPIRTSP / JPEG ライブストリーミング
OnDeviceVoiceAssistantAPIオフライン音声アシスタント

機能を呼び出すには、デバイスを対応するプロトコルへキャストして準拠を確認します。 必要なハードウェアを持たないデバイスではキャストに失敗します。

Swift
if let info = device as? DeviceInfoAPI {
    info.setDeviceTime(Date()) { success, statusCode, error in
        // ...
    }
}

if let anc = device as? DeviceANCAPI {
    anc.setAncMode(.ancOn) { _ in }
}

デリゲート

SDK には 2 種類のデリゲートがあります。必要なイベントの範囲に合わせて選択してください。

  • DeviceDelegateAIBudsDeviceDelegate)— デバイス単位device.delegate = self を設定すると、そのデバイスの接続ライフサイクルイベント (didStartConnectingDevicedidConnectedToDevicedidFailToConnectDevicedevice:didDisconnectWithError:deviceDidReady)や、 バッテリー、動作モード、ANC、EQ、装着状態、TWS、音量、ストレージ、 メディア件数などの状態変化を受け取れます。すべてのメソッドは @objc optional なので、必要なコールバックだけ実装します。
  • SDKDelegateAIBudsSDKDelegate)— 全体AIBudsSDK.initialize(...delegate:) に渡すと、すべてのデバイスの接続イベントと、 スキャン状態(onScanningStatusChanged:)を受け取れます。

一般的には、スキャンや全体の接続 UI などアプリ単位の処理に SDKDelegate を使い、 特定デバイスを扱う画面では DeviceDelegate を使用します。

コアシングルトン

シングルトン対象主なエントリーポイント
AIBudsSDKデバイス側initialize(bleSDKs:configuration:delegate:)startScanningstopScanningisScanning()makeStorableDeviceFromDiscovered(_:)、AI / 音声プラグイン設定
AIBudsAISDKAI 側initialize(aiSDKs:)setAIServiceVendor(_:)startAIChatstartAIAudioRecordingstartSimultaneousInterpretationtranslateTextsummaryrecognizeVoicesynthesizeText

デバイス操作(接続、切断、コマンド送信)は、これらのシングルトンにはありません。 DeviceConvertible インスタンスに対して直接呼び出します。

AI サービスプロバイダー

AI 機能はプラグイン式のサービスプロバイダーから提供されます。選択中のプロバイダーは、 AIServiceVendorAIBudsAIServiceVendor)列挙型で表されます。

ケースサービスプロバイダー
.none未選択
.starBurst星芒 AI(字節跳動)
.mltcloud駱方案 AI(美楽創)

ケース名は公開 Swift API と同じ表記です。.starBurst は大文字の B を使用し、 .mltcloud はすべて小文字です。

AIBudsAISDK.setAIServiceVendor(_:) で実行時にプロバイダーを切り替えられます。 このメソッドは AI サービスを使用する前に呼び出してください。

接続パラメータ

ConnectParamsAIBudsConnectParams)には、device.connect(_:) に必要な情報がまとめられています。 特に、接続ハンドシェイク中に SDK が AI サービスを認証するための AI 認証パラメータを保持します。

  • userId — AI サービス側でエンドユーザーを識別します。

  • aiAuthParamsAIAuthParams / AIBudsAIAuthParams)— プロバイダー別の認証情報を保持します。

    • starburstStarBurstAIAuthParams): productId、任意の ppeEnv
    • mltcloudMltCloudAIAuthParams): channelId
Swift
let params = ConnectParams()
let auth = AIAuthParams()

let starBurst = StarBurstAIAuthParams()
starBurst.productId = configs["STARBURST_PRODUCTID"]
auth.starburst = starBurst

let mltCloud = MltCloudAIAuthParams()
mltCloud.channelId = configs["MLTCLOUD_CHANNELID"]
auth.mltcloud = mltCloud

params.aiAuthParams = auth
params.userId = "199"

device.connect(params)

モジュールリファレンス

基盤層

AIBudsLog

AIBuds SDK 全体で使用されるログのコアモジュールです。ほかのすべてのモジュールは このモジュールを通じてログを記録します。すべてのログ実装は LogService プロトコルに準拠するため、 標準実装が要件に合わない場合は独自の LogService を組み込めます。

標準ログサービスは 4 つの出力先に対応しています。consoleosloggerfilexlfacility です(最後の出力先には追加プラグインが必要です)。

AIBudsXLFacility

ログ出力を XLFacility に送る任意のログプラグインです。 通常のファイル出力よりも、ログの書き出し、検索、期限切れログの削除が容易なため、 本番環境で推奨される出力先です。

AIBudsFoundation

デバイス通信に関するデータモデル、型定義、補助データ構造を提供します。 デバイス SDK とアプリの双方が使用する共通の語彙に相当します。

AIBudsAIFoundation

AIBudsFoundation と同様の役割を AI 領域で担い、 すべての AI サービスで使用する基本データモデルと型定義を提供します。

コア SDK 層

AIBudsSDK

デバイス通信のコア SDK です。スキャン、接続、コマンド送信、イベント受信など、 デバイスに関する多くの機能はこのモジュールを通じて呼び出します。

ABMateSDK

AIBudsSDK が現在使用している BLE 通信プロトコルプラグインです。 プロトコルはプラグインとして読み込まれるため、BLE 通信が必要な場合に ABMateSDK を導入します。 今後ほかのプロトコルに対応した場合は、デバイスに合うものを読み込めます。

AIBudsAISDK

AI 機能のコア SDK です。プラグインシステムで複数の AI サービスプロバイダーを統合し、 実行時にプロバイダーを切り替えると、呼び出しが対応するサービス機能へ振り分けられます。

AI サービスプラグイン

AIBudsStarBurst

**星芒 AI(字節跳動)**向けのミドルウェアプラグインです。サービスの AI 機能をラップし、 AIBudsAISDK インターフェースから利用できるようにします。

AIBudsMagicHelper

**駱方案 AI(美楽創)**向けのミドルウェアプラグインです。サービスの AI 機能をラップし、 AIBudsAISDK インターフェースから利用できるようにします。

機能モジュール

AIBudsAudio

録音、再生、音声区間検出(VAD)などの音声機能を提供します。

AIBudsVoiceAssistant

オフライン音声認証プラグインです。デバイス上のウェイクワードと音声コマンド認識を扱います。 サービス認証が必要で、このミドルウェアが認証処理を仲介します。

AIBudsLiveStream

デバイス向けライブストリーミング SDK です。デバイスから RTSP ストリームを取得し、 対応する動画プレーヤーを提供するとともに、配信用の RTMP エンドポイントへストリームを送信します。

AIBudsCrashReporter

クラッシュログ収集 SDK です。アプリのクラッシュを検出してローカルディレクトリへ保存し、 クラッシュファイルのパスをコールバックで返します。アプリ側でサーバーへアップロードするなど、 必要な処理を行えます。

AIBudsAIDashboard

AI サービス分析用のダッシュボードです。ローカルネットワーク経由で表示でき、 AI 録音、同時通訳セッション、AI 対話などの記録を確認できます。 各記録では、関連するデバイス情報、起動パラメータ、処理中の音声データ、 セッションイベント、主要なエラーを確認でき、問題分析に役立ちます。

統合モジュール

AIBudsAllInOne

モジュール構成では SDK の初期化設定が複雑になりやすいため、AIBudsAllInOne は 実用的な標準設定をまとめています。1 回の呼び出しですべてを初期化できるため、 個別の導入構成が不要な場合に適しています。

プラグインモデル

SDK の拡張性は 4 種類のプラグインによって実現されています。それぞれ明確なプロトコルに準拠するため、 独自の BLE プロトコルプラグインや専用 AI サービスなどを実装し、 標準プラグインと併用したり置き換えたりできます。

プラグイン種別プロトコル読み込み元
BLE プロトコルBleConnectSDKAIBudsSDK.initialize(bleSDKs:...)ABMateSDK
AI サービスAIConnectSDKAIBudsAISDK.initialize(aiSDKs:...)StarBurstSDKMagicHelperSDK
AI / 音声ブリッジStarBurstBridgePluginMltCloudBridgePluginOnDeviceVoiceAssistantBridgePluginAIBudsSDK.setStarBurstAIPlugin(...) / setMltCloudAIPlugin(...) / setOnDeviceVoiceAssistantPlugin(...)独自の認証プラグイン実装
ログバックエンドLogServiceAIBudsLogSDK.setXLFacilityPlugin(...)AIBudsXLFacility