4、工程说明
下载三方库:SocketRocket,添加到Xcode工程中
主要接口参数的详细说明,具体可以参考源码:
Copied!
@protocol TTSpeaker <NSObject,TTSpeakWebSocketListener>
- (void)startSpeaking:(NSString *)text callback:(id<TTSpeakerCallback>)callback;
- (void)startSpeaking:(NSString *)text speakOption:(TTSpeakerOption *)speakOption callback:(id<TTSpeakerCallback>)callback;
- (void)stopSpeaking;
- (void)pauseSpeaking;
- (void)resumeSpeaking;
- (TTSSpeakState)getSpeakState;
- (void)addOnSpeakStateChangeListener:(id<TTSpeakerStateChangeListener>)listener;
- (void)removeOnSpeakStateChangeListener:(id<TTSpeakerStateChangeListener>)listener;
@end
@protocol TTSConfigurator <NSObject>
- (void)setDebug:(BOOL)isDebug;
- (void)setLogPrintingEnabled:(BOOL)isLogPrintingEnabled;
- (void)setLogger:(id<TTSLogger>)logger;
- (void)setRegion:(TTSRegion *)region;
- (void)setProjectId:(NSString *)projectId;
- (void)setAuthConfig:(TTSAuthConfig *)authConfig;
- (void)setVoiceConfig:(TTSVoiceConfig *)voiceConfig;
@end
5、关键代码片段
5.1、初始化配置
Copied!
TTSAuthConfig *authConfig = [[TTSAuthConfig alloc] init];
authConfig.username = TestData.getData.username;
authConfig.password = TestData.getData.password;
authConfig.domain = TestData.getData.domain;
authConfig.token = @"";
TTSVoiceConfig *voiceConfig = [[TTSVoiceConfig alloc] init];
voiceConfig.speed = self.speed;
voiceConfig.pitch = self.pitch;
voiceConfig.volume = self.volumn;
voiceConfig.voiceAssetId = [self getVoiceAssetId];
TTSRegion *region = [TTSRegion regionWithCode:TTSRegionCodeShangHai];
BOOL isDebug = self.isDebug;
BOOL isLogPrintingEnabled = self.isLogPrintingEnabled;
NSString *projectId = TestData.getData.projectId;
TTSConfigurator *configurator = TTSSdk.sharedInstance.configurator;
[configurator setDebug:isDebug];
[configurator setLogPrintingEnabled:isLogPrintingEnabled];
[configurator setRegion:region];
[configurator setProjectId:projectId];
[configurator setAuthConfig:authConfig];
[configurator setVoiceConfig:voiceConfig];
5.2、执行语音合成
Copied!
- (IBAction)senderttsAction:(UIButton *)sender {
TTSpeakerOption *speakOption = [[TTSpeakerOption alloc] init];
[TTSSdk.sharedInstance.speaker startSpeaking:SdkConfig.sharedInstance.getArticle
speakOption:speakOption
callback:self];
}
#pragma mark - TTSpeakerCallback
- (void)onBegin:(NSString *)speechGroupId {
NSLog(@"onBegin speechGroupId:%@",speechGroupId);
}
- (void)onSpeaking:(NSData *)voiceData speechGroupId:(NSString *)speechGroupId {
NSLog(@"voiceData:%ld,speechGroupId:%@",voiceData.length,speechGroupId);
}
- (void)onFinish:(NSData *)allVoiceData speechGroupId:(NSString *)speechGroupId {
NSLog(@"allVoiceData:%ld,speechGroupId:%@",allVoiceData.length,speechGroupId);
}
- (void)onError:(NSString *)errorCode errorMsg:(NSString *)errorMsg {
NSLog(@"errorCode:%@,errorMsg:%@",errorCode,errorMsg);
}
语音同步合成iOS SDK
1、功能介绍
华为云提供了语音同步合成WebSocket接口,可以将文本转化为语音,并实时返回合成的音频数据。本工程将WebSocket接口封装为Objective-C接口,方便iOS客户端调用
2、您将学到什么?
iOS应用如何调用语音同步合成WebSocket接口实现语音同步合成功能。
3、前置条件
4、工程说明
下载三方库:SocketRocket,添加到Xcode工程中
主要接口参数的详细说明,具体可以参考源码:
@protocol TTSpeaker <NSObject,TTSpeakWebSocketListener> /** * 开始朗读,发声,不写入本地文件。注意:此接口不支持并行调用,只支持串行调用,必须在上一次调用结束(onFinish或onError通知)后再调用下一次。 * * @param text 朗读的文字 * @param callback 执行朗读的结果通知 */ - (void)startSpeaking:(NSString *)text callback:(id<TTSpeakerCallback>)callback; /** * 开始朗读,可以自定义朗读选项:是否发声、是否写入本地文件。具体参考TTSpeakOption枚举。注意:此接口不支持并行调用,只支持串行调用,必须在上一次调用结束(onFinish或onError通知)后再调用下一次。 * * @param text 朗读的文字 * @param speakOption 朗读的选项 * @param callback 执行朗读的结果通知 */ - (void)startSpeaking:(NSString *)text speakOption:(TTSpeakerOption *)speakOption callback:(id<TTSpeakerCallback>)callback; /** 停止朗读。 */ - (void)stopSpeaking; /** * 暂停朗读。此时只暂停播放声音,不会停止接收服务端WebSocket的音频数据流。 */ - (void)pauseSpeaking; /** * 恢复朗读。 */ - (void)resumeSpeaking; /** * 获取当前朗读状态,具体参考TTSpeakState枚举。 * * @return 朗读状态 */ - (TTSSpeakState)getSpeakState; /** * 添加朗读状态监听,当朗读状态发声变更时会会上报。 * * @param listener 朗读状态监听 */ - (void)addOnSpeakStateChangeListener:(id<TTSpeakerStateChangeListener>)listener; /** * 移除朗读状态监听。 * * @param listener 朗读状态监听 */ - (void)removeOnSpeakStateChangeListener:(id<TTSpeakerStateChangeListener>)listener; @end @protocol TTSConfigurator <NSObject> /** * 设置是否为调试模式,调试模式下会额外打印调试日志(开启日志打印的前提下),并且会关闭CA证书校验。警告:正式产品禁止设置为调试模式。 * * @param isDebug 是否为调试模式 */ - (void)setDebug:(BOOL)isDebug; /** * 设置是否开启日志打印。警告:如果是调试模式,会直接打印未脱敏的信息。 * * @param isLogPrintingEnabled 是否开启日志打印 */ - (void)setLogPrintingEnabled:(BOOL)isLogPrintingEnabled; /** * 注入日志打印器,如果未注入,则使用默认日志打印器,输出到控制台。 * * @param logger 注入的日志打印器 */ - (void)setLogger:(id<TTSLogger>)logger; /** * 设置站点。 * * @param region 站点 */ - (void)setRegion:(TTSRegion *)region; /** * 设置项目Id * * @param projectId 项目Id */ - (void)setProjectId:(NSString *)projectId; /** * 设置鉴权参数。 * * @param authConfig 鉴权参数。警告:正式产品禁止将鉴权参数编码到端侧代码中,应当通过服务端下发鉴权参数,端侧再使用鉴权参数 */ - (void)setAuthConfig:(TTSAuthConfig *)authConfig; /** * 设置语音参数。 * * @param voiceConfig 语音参数。建议使用默认值 */ - (void)setVoiceConfig:(TTSVoiceConfig *)voiceConfig; @end
5、关键代码片段
5.1、初始化配置
TTSAuthConfig *authConfig = [[TTSAuthConfig alloc] init]; authConfig.username = TestData.getData.username; authConfig.password = TestData.getData.password; authConfig.domain = TestData.getData.domain; authConfig.token = @""; // 根据需要填入token TTSVoiceConfig *voiceConfig = [[TTSVoiceConfig alloc] init]; voiceConfig.speed = self.speed; voiceConfig.pitch = self.pitch; voiceConfig.volume = self.volumn; voiceConfig.voiceAssetId = [self getVoiceAssetId]; TTSRegion *region = [TTSRegion regionWithCode:TTSRegionCodeShangHai]; BOOL isDebug = self.isDebug; BOOL isLogPrintingEnabled = self.isLogPrintingEnabled; NSString *projectId = TestData.getData.projectId; TTSConfigurator *configurator = TTSSdk.sharedInstance.configurator; [configurator setDebug:isDebug]; [configurator setLogPrintingEnabled:isLogPrintingEnabled]; [configurator setRegion:region]; [configurator setProjectId:projectId]; [configurator setAuthConfig:authConfig]; [configurator setVoiceConfig:voiceConfig];
5.2、执行语音合成
/// - (IBAction)senderttsAction:(UIButton *)sender { TTSpeakerOption *speakOption = [[TTSpeakerOption alloc] init]; [TTSSdk.sharedInstance.speaker startSpeaking:SdkConfig.sharedInstance.getArticle speakOption:speakOption callback:self]; } #pragma mark - TTSpeakerCallback /** * 开始朗读的通知。 * * @param speechGroupId 音频流的组Id。同一段文字的音频流组Id一致 */ - (void)onBegin:(NSString *)speechGroupId { NSLog(@"onBegin speechGroupId:%@",speechGroupId); } /** * 正在接收朗读音频流的通知。注意:这个通知不是实际播放状态,仅代表音频流正在接收中。当收到音频流时,开始自动播放(如果配置了需要播放)。 * * @param voiceData 音频流数据 * @param speechGroupId 音频流的组Id。同一段文字的音频流组Id一致 */ - (void)onSpeaking:(NSData *)voiceData speechGroupId:(NSString *)speechGroupId { NSLog(@"voiceData:%ld,speechGroupId:%@",voiceData.length,speechGroupId); } /** * 朗读音频流接收完毕的通知。注意:这个通知不是实际播放状态,仅代表音频流传输完毕。此时很可能依然在播放中(音频流尚未播放完毕)。 * * @param allVoiceData 本段文字所有音频流数据 * @param speechGroupId 音频流的组Id。同一段文字的音频流组Id一致 */ - (void)onFinish:(NSData *)allVoiceData speechGroupId:(NSString *)speechGroupId { NSLog(@"allVoiceData:%ld,speechGroupId:%@",allVoiceData.length,speechGroupId); } /** * 朗读错误通知。警告:仅供调试参考,正式产品请重新封装错误码。 * * @param errorCode 错误码 * @param errorMsg 错误信息 */ - (void)onError:(NSString *)errorCode errorMsg:(NSString *)errorMsg { NSLog(@"errorCode:%@,errorMsg:%@",errorCode,errorMsg); }
6、参考
本示例的代码工程仅用于简单演示,实际开发过程中应严格遵循开发指南。访问以下链接可以获取详细信息:语音同步合成WebSocket接口