61 lines
1.7 KiB
C
61 lines
1.7 KiB
C
|
|
//
|
|||
|
|
// TTSServiceClient.h
|
|||
|
|
// keyBoard
|
|||
|
|
//
|
|||
|
|
// Created by Mac on 2026/1/15.
|
|||
|
|
//
|
|||
|
|
|
|||
|
|
#import <Foundation/Foundation.h>
|
|||
|
|
|
|||
|
|
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 <NSObject>
|
|||
|
|
@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<TTSServiceClientDelegate> delegate;
|
|||
|
|
|
|||
|
|
/// TTS 服务器 URL
|
|||
|
|
@property(nonatomic, copy) NSString *serverURL;
|
|||
|
|
|
|||
|
|
/// 当前期望的返回类型(由服务端配置决定)
|
|||
|
|
@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
|