// // TTSServiceClient.h // keyBoard // // Created by Mac on 2026/1/15. // #import NS_ASSUME_NONNULL_BEGIN /// TTS 返回数据类型 typedef NS_ENUM(NSInteger, TTSPayloadType) { TTSPayloadTypeURL = 0, // 模式 A:返回 m4a/MP3 URL TTSPayloadTypePCMChunk, // 模式 D:返回 PCM chunk TTSPayloadTypeAACChunk, // 模式 B:返回 AAC chunk TTSPayloadTypeOpusChunk // 模式 C:返回 Opus chunk }; /// TTS 服务客户端代理 @protocol TTSServiceClientDelegate @optional /// 收到音频 URL(模式 A) - (void)ttsClientDidReceiveURL:(NSURL *)url segmentId:(NSString *)segmentId; /// 收到音频数据块(模式 B/C/D) - (void)ttsClientDidReceiveAudioChunk:(NSData *)chunk payloadType:(TTSPayloadType)type segmentId:(NSString *)segmentId; /// 片段完成 - (void)ttsClientDidFinishSegment:(NSString *)segmentId; /// 请求失败 - (void)ttsClientDidFail:(NSError *)error; @end /// TTS 服务客户端 /// 统一网络层接口,支持多种 TTS 返回形态 @interface TTSServiceClient : NSObject @property(nonatomic, weak) id delegate; /// TTS 服务器 URL @property(nonatomic, copy) NSString *serverURL; /// 语音 ID(ElevenLabs voice ID) @property(nonatomic, copy) NSString *voiceId; /// 语言代码(如 "zh", "en") @property(nonatomic, copy) NSString *languageCode; /// 当前期望的返回类型(由服务端配置决定) @property(nonatomic, assign) TTSPayloadType expectedPayloadType; /// 是否正在请求 @property(nonatomic, assign, readonly, getter=isRequesting) BOOL requesting; /// 请求 TTS 合成 /// @param text 要合成的文本 /// @param segmentId 片段 ID(用于标识和排序) - (void)requestTTSForText:(NSString *)text segmentId:(NSString *)segmentId; /// 取消所有请求 - (void)cancel; @end NS_ASSUME_NONNULL_END