Sleep Cycle SDK

iOS 版本说明

版本 1.3.2

问题修复与改进。

版本 1.3.1

改进

  • 睡眠评分稳定性:修复了在未检测到睡眠的短会话中,调用 AnalysisResult.toSleepScoreHistoryEntry()SleepScoring.compute(...) 时发生崩溃的问题。
  • 多项问题修复与改进。

版本 1.3.0

新功能

  • 精简版 SDK:Swift 包新增了一个 product SleepCycleSDKSlim,它不内嵌机器学习模型,而是在首次调用 initialize(...) 时下载您已获授权的功能所需的模型,使嵌入到 App 中的 framework 从约 16 MB 降至约 1.6 MB。两个 product 都提供 SleepCycleSDK 模块,因此切换无需修改任何代码。详见 iOS 指南的「安装」一节。
  • 下载进度initialize(...) 新增 onDownloadProgress 回调,以 0...1 之间的比例报告模型下载进度。
  • 会话进行中修改智能闹钟updateSmartAlarm(config:) 可替换活动会话上的闹钟、为未设置闹钟的会话添加闹钟,或在传入 nil 时取消闹钟。
  • 清除持久化状态SleepCycleSdk.clear() 会反初始化 SDK,并清除缓存的授权令牌以及所有已下载的模型。
  • 丢弃可恢复的会话clearActiveSessions() 结束 resumeAnalysis(...) 将会接管的会话,使 isResumePossible() 重新返回 false

API 变更

  • initialize(...) 新增 onDownloadProgress: (@Sendable (Double) -> Void)? 参数,并会阻塞直到已获授权的功能所需的模型在本地就绪。
  • SleepCycleSdkError 新增用于资源就绪的分支:.resourceUnavailable(_:).resourceDownloadFailed(_:).modelUnavailable(_:).modelNotProvisioned(_:).modelIntegrityCheckFailed(_:)
  • 当为 .primary 以外的声道传入 smartAlarmConfig 时,startMultiChannelAnalysis(...) 现在会抛出 SleepCycleSdkError.invalidInput
  • deinitialize() 不再结束活动会话。它会停止数据源,并保留这些会话,可通过 resumeAnalysis(...) 恢复。

改进

  • 多项问题修复与改进。

版本 1.2.1

改进

  • 改进的音频分类:更新了音频分类模型,提升了声音检测效果。

版本 1.2.0

新功能

  • 智能闹钟:通过 SmartAlarmConfig 配置唤醒时段,并通过新增的 smartAlarmStream: AsyncStream<SmartAlarmEvent> 观察闹钟生命周期事件。事件类型为 .armed.triggered(reason),触发原因包括 .optimalWakeUp.userInteraction.windowEnd。智能闹钟受 smartAlarm 功能限制,仅在主声道上支持。
  • 立体声声道分离:新增 ChannelSeparationConfig,控制立体声音频声道如何分配到分析声道,内置预设为 .bedSideMics.centeredMicArray.detectionStrengthOnly
  • 可配置的音频输入:新增 AudioInputConfig,在通过 createLiveDataSource(audioConfig:) 创建实时数据源时选择音频格式(单声道/立体声)和首选输入设备。
  • 睡眠评分:使用 SleepScoring.compute(result:history:dateOfBirth:chronoType:) 计算单晚的睡眠评分,它返回一个 SleepScore,包含 totaldurationqualityroutine 子评分(每项均为 0.0–1.0)。通过 AnalysisResult.toSleepScoreHistoryEntry() 从已完成的结果构建历史记录条目,并通过 SleepScoring.identifyChronoType(history:) 推导用户的 ChronoType
  • 扩展音频事件:新增 extendedAudioEvents 功能标志,公开标准集之外的额外 EventType 值。EventType.standardTypesEventType.extendedTypes 对可用集合进行分组。
  • 结果中的实时睡眠分期AnalysisResult 现在包含 realTimeSleepStageIntervals,即会话期间实时发出的睡眠分期(与会话结束后的 sleepStageIntervals 并存)。

API 变更

  • 支持声道的启动方法现在为 startMultiChannelAnalysis(channel:config:at:smartAlarmConfig:tag:),并接受 smartAlarmConfig: 参数。
  • stopAnalysis(channel:) 现在为 stopAnalysis(sessionId:),通过会话的 UUID 停止该会话。
  • resumeAnalysis() 现在返回 [ResumedSession](每个恢复的会话包含会话 ID、声道和智能闹钟配置),不再是 [AnalysisChannel: UUID]
  • initialize() 中新增 forceTokenRefresh: Bool 参数,即使存在缓存令牌也可强制重新获取令牌。
  • startAnalysis(...)startDataSource(...)resumeAnalysis(...) 中新增 channelSeparationConfig: ChannelSeparationConfig 参数。
  • AudioEventListener.onAudioAnalysisBatchCompleted(...) 现在接收 audioProbability: [EventType: Float],即每批次中每种事件类型的概率。rms: [Float] 参数已替换为 dbSpl: [Float],提供以 dB SPL 表示的 A 计权声音音量。
  • EventEndedInfo 现在包含 eventType: EventType 属性。
  • AnalysisResult 现在包含 timeZone: TimeZone(会话开始时捕获)和 realTimeSleepStageIntervals: [SleepStageInterval]
  • 流访问器(eventStreambreathingRateStreamerrorStreamsleepStageStreamaudioHealthStreamstateStream)和 currentState 现在为 asyncget async)。
  • SleepCycleSdkError.sessionAlreadyRunning 重命名为 .channelAlreadyRunning,并新增 .featureNotEnabled(_:)
  • 新增 SleepCycleSdk.version,返回 SDK 版本字符串。

版本 1.1.0

新功能

  • 多声道分析:使用立体声音频同时分析两个声道。新增 startDataSource(using:eventListeners:) / stopDataSource() 方法,将数据源生命周期与会话生命周期分离;通过 startAnalysis(channel:config:at:tag:) 在各声道上分别启动会话,通过 stopAnalysis(channel:at:) 单独停止某个会话。
  • 音频运行状况监测:新增 audioHealthStream: AsyncStream<AudioHealthUpdate>,实时发出音频输入运行状况的变化(.healthy.flatline.missingInput)。分析结果中包含 AudioStatisticsAudioHealthInterval
  • 所有公共类型上的会话 IDEventBreathingRateSleepStageIntervalAudioClipAudioHealthUpdate 现在都包含 sessionId: UUID 属性,用于标识它们所属的会话。

API 变更

  • startAnalysis() 现在返回一个标识会话的 UUID
  • startAnalysis() 中新增 tag: String? 参数,用于为会话打标签。
  • AudioEventListener.onAudioAnalysisBatchCompleted() 现在包含 sessionId: UUID 参数。
  • AnalysisResult 现在包含 sleepStageIntervalsaudioStatisticssessionId 属性。
  • SleepAnalysisFeatures 中新增 multiChannelAnalysis

On this page