Интеграция распознавания музыки

Создание объекта для распознавания музыки

import AssistantSDK
import DevicesCore
import VoiceProcessingServiceSDK

/// Объект для логирования сообщений в DevicesCore.
/// Опционально, можно просто передать nil
let logger = MultipleWriterLogger(
    logLevels: .all,
	writers: []
)

/// Создание Property с состоянием приложения в DevicesCore.
let applicationState = UIApplication.shared.makeApplicationState(
	notificationCenter: NotificationCenter.default,
	logger: logger
)

/// Реализация протокола VPSAuthTokenProvider из VoiceProcessingServiceSDK, 
/// можно просто возвращать пустую строку, тогда будет неавторизованное подключение
let tokenProvider = ...

/// Реализация протокола AudioSessionController из DevicesCore дял управления состояния аудиосессии и отслеживания изменений состояний.
/// Опционально, можно просто передать nil
let audioSessionController = ...

/// Настройки сервиса VPS. Более подробно о параметрах можно посмотреть в VoiceProcessingServiceSDK.
let vpsConfiguration = VPSConfiguration(
	...
	protocolVersion: .nlp20v5 // обязательно не ниже 5 версии протокола VPS должно быть
	...
)

///		- vpsConfiguration: Настройки сервиса VPS.
///		- tokenProvider: Объект для получение токена
///		- applicationState: Состояние приложения.
///		- assertionCaller: Инстанс для вызова ассертов.
///		- audioSessionController: Сервис по настройке аудио сессии
///		- logger: Объект для регистрации сообщения в журнале событий.
try Recognizers.makeMusicRecognizer(
	vpsConfiguration: vpsConfiguration,
	tokenProvider: tokenProvider,
	applicationState: applicationState,
    /// assertionCallerShared - Реализация протокола для вызова кастомных ассертов в DevicesCore
	assertionCaller: assertionCallerShared,
	audioSessionController: audioSessionController,
	logger: logger
)

Использование

/// 1. Создать объект для распознавания
let musicRecognizer = try Recognizers.makeMusicRecognizer(...)

/// 2. Проставить делегат
musicRecognizer.delegate = self

/// 3. Начать распознавания
try musicRecognizer.start()

/// Если надо остановить распознавание музыки:
musicRecognizer.stop()

/// Реализация делегата MusicRecognizerDelegate

/// 4. получить результат в делегатных методах
func musicRecognizer(
	_ recognizer: MusicRecognizer,
	didReceiveMusicModel model: MusicRecognitionModel
) {
    /// model.json - JSON с результатом распознавания
}

/// 5. Обработка ошибок распознавания
func musicRecognizer(
	_ recognizer: MusicRecognizer,
	didFailWithError error: Error
) {}