実装
認識の開始
まず、使用する場所でSORIフレームワークをインポートする必要があります。
swift
import SORI
SORIManager
クラスのstart
メソッドで簡単に開始できます。このメソッドは内蔵のオーディオレコーダーで動作します。以下に例を示します:
swift
SORIManager.shared().applicationID = "application ID string"
SORIManager.shared().secretKey = "secret key string"
SORIManager.shared().apiVersion = .V3
SORIManager.shared().resultType = .local
SORIManager.shared().start(
type: .local
repeat: true,
recognitionHandler: {
[unowned self] (media, error) in
self.recognized(mediaJSON: media as? [String : Any], error: error)
})
)
録音されたオーディオはどこにも送信されないため、プライバシーの懸念は全くありません。
認識結果のデータ構造
以下は、レスポンスで受信するデータ構造の例です。
json
{
"position": 3187,
"campaign": {
"_id": "campaign identifier",
"action_url": "https://foo.bar/action/url",
"created_at": "2023-01-01T00:00:48.187000+00:00",
"image": "https://foo.bar/image.jpg",
"name": "campaign name",
"operating_period": {
"start": "2023-01-01T01:01:10.610000+00:00",
"until": "2024-12-31T12:59:59.999000+00:00",
},
"state": "pending",
"title": "campaign title",
"type": "link"
},
"_id": "material identifier",
"duration": 29.375,
"type": "cf",
"image": "https://foo.bar/material/cover/image.png",
"score": -32.84499943256378,
"title": "material title"
}
認識の停止
SORIManager
クラスのstop
メソッドで停止できます。オーディオレコーダーも動作を停止します。
swift
SORIManager.shared().stop()
バックグラウンド認識
バックグラウンド認識が必要ですか?アプリのInfo.plist
を開いてください。キーUIBackgroundModes
を追加し、値audio
のアイテムを追加します。以下に例を示します:
xml
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>remote-notification</string>
<string>audio</string>
</array>
バックグラウンド認識は、アプリが開始されて実行中に動作します。逆に、アプリが終了すると、バックグラウンド認識も停止します。
エラーハンドリング
SORI SDKの認識プロセスはすべて非メインスレッドで実行されるため、このプロセス中に発生するすべてのエラーは通知を通じて配信されます。この通知を受信するために、NotificationCenterを通じてSORIError.errorNotificationName()
の通知を監視できます。
swift
NotificationCenter.default.addObserver(forName: SORIError.errorNotificationName(), object: nil, queue: OperationQueue.main) { notification in
// SORIエラーの処理
guard let error = notification.object as? NSError, let code = SORIErrorCode(rawValue: error.code) else {
print("Unknown error notification: \(notification)")
return
}
if code == .authenticationFailure {
print("Failed to authentication")
}
}
SORIErrorCodeは以下のように定義されています:
swift
enum SORIErrorCode: Int {
case .none = 0
case .beginInterruption = 100
case .finishInterruption = 101
case .networkNotReachable = 400
case .authenticationFailure = 401
case .audioRecordDenied = 402
case .serverError = 500
case .audioServiceFailure = 501
case .fileOperationFailure = 502
case .invalidResponses = 503
case .failedToDownloadAudiopacks = 504
}
objective-c
typedef NS_ENUM(NSInteger, SORIErrorCode) {
SORIErrorCodeNone = 0,
SORIErrorCodeBeginInterruption = 100,
SORIErrorCodeFinishInterruption = 101,
SORIErrorCodeNetworkNotReachable = 400,
SORIErrorCodeAuthenticationFailure = 401,
SORIErrorCodeAudioRecordDenied = 402,
SORIErrorCodeServerError = 500,
SORIErrorCodeAudioServiceFailure = 501,
SORIErrorCodeFileOperationFailure = 502,
SORIErrorCodeInvalidResponses = 503,
SORIErrorCodeFailedToDownloadAudiopacks = 504,
};