// // TTSPlaybackPipeline.h // keyBoard // // Created by Mac on 2026/1/15. // #import "TTSServiceClient.h" #import NS_ASSUME_NONNULL_BEGIN /// 播放管线代理 @protocol TTSPlaybackPipelineDelegate @optional /// 开始播放片段 - (void)pipelineDidStartSegment:(NSString *)segmentId duration:(NSTimeInterval)duration; /// 播放时间更新 - (void)pipelineDidUpdatePlaybackTime:(NSTimeInterval)time segmentId:(NSString *)segmentId; /// 片段播放完成 - (void)pipelineDidFinishSegment:(NSString *)segmentId; /// 所有片段播放完成 - (void)pipelineDidFinishAllSegments; /// 播放出错 - (void)pipelineDidFail:(NSError *)error; @end /// TTS 播放管线 /// 根据 payloadType 路由到对应播放器 @interface TTSPlaybackPipeline : NSObject @property(nonatomic, weak) id delegate; /// 是否正在播放 @property(nonatomic, assign, readonly, getter=isPlaying) BOOL playing; /// 当前播放的片段 ID @property(nonatomic, copy, readonly, nullable) NSString *currentSegmentId; /// 启动管线 /// @param error 错误信息 /// @return 是否启动成功 - (BOOL)start:(NSError **)error; /// 停止管线(立即停止,用于打断) - (void)stop; /// 入队 URL 播放 /// @param url 音频 URL /// @param segmentId 片段 ID - (void)enqueueURL:(NSURL *)url segmentId:(NSString *)segmentId; /// 入队音频数据块 /// @param chunk 音频数据 /// @param type 数据类型 /// @param segmentId 片段 ID - (void)enqueueChunk:(NSData *)chunk payloadType:(TTSPayloadType)type segmentId:(NSString *)segmentId; /// 标记片段数据完成(用于流式模式) /// @param segmentId 片段 ID - (void)markSegmentComplete:(NSString *)segmentId; /// 获取片段的当前播放时间 /// @param segmentId 片段 ID /// @return 当前时间(秒),如果未在播放则返回 0 - (NSTimeInterval)currentTimeForSegment:(NSString *)segmentId; /// 获取片段的总时长 /// @param segmentId 片段 ID /// @return 总时长(秒) - (NSTimeInterval)durationForSegment:(NSString *)segmentId; @end NS_ASSUME_NONNULL_END