版本 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,包含total、duration、quality和routine子评分(每项均为 0.0–1.0)。通过AnalysisResult.toSleepScoreHistoryEntry()从已完成的结果构建历史记录条目,并通过SleepScoring.identifyChronoType(history:)推导用户的ChronoType。 - 扩展音频事件:新增
extendedAudioEvents功能标志,公开标准集之外的额外EventType值。EventType.standardTypes和EventType.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]。- 流访问器(
eventStream、breathingRateStream、errorStream、sleepStageStream、audioHealthStream、stateStream)和currentState现在为async(get 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)。分析结果中包含AudioStatistics和AudioHealthInterval。 - 所有公共类型上的会话 ID:
Event、BreathingRate、SleepStageInterval、AudioClip和AudioHealthUpdate现在都包含sessionId: UUID属性,用于标识它们所属的会话。
API 变更
startAnalysis()现在返回一个标识会话的UUID。- 在
startAnalysis()中新增tag: String?参数,用于为会话打标签。 AudioEventListener.onAudioAnalysisBatchCompleted()现在包含sessionId: UUID参数。AnalysisResult现在包含sleepStageIntervals、audioStatistics和sessionId属性。- 在
SleepAnalysisFeatures中新增multiChannelAnalysis。