添加语音websocket等,还没测试
This commit is contained in:
66
keyBoard/Class/AiTalk/VM/SubtitleSync.m
Normal file
66
keyBoard/Class/AiTalk/VM/SubtitleSync.m
Normal file
@@ -0,0 +1,66 @@
|
||||
//
|
||||
// SubtitleSync.m
|
||||
// keyBoard
|
||||
//
|
||||
// Created by Mac on 2026/1/15.
|
||||
//
|
||||
|
||||
#import "SubtitleSync.h"
|
||||
|
||||
@implementation SubtitleSync
|
||||
|
||||
- (NSString *)visibleTextForFullText:(NSString *)fullText
|
||||
currentTime:(NSTimeInterval)currentTime
|
||||
duration:(NSTimeInterval)duration {
|
||||
|
||||
if (!fullText || fullText.length == 0) {
|
||||
return @"";
|
||||
}
|
||||
|
||||
NSUInteger visibleCount = [self visibleCountForFullText:fullText
|
||||
currentTime:currentTime
|
||||
duration:duration];
|
||||
|
||||
if (visibleCount >= fullText.length) {
|
||||
return fullText;
|
||||
}
|
||||
|
||||
return [fullText substringToIndex:visibleCount];
|
||||
}
|
||||
|
||||
- (NSUInteger)visibleCountForFullText:(NSString *)fullText
|
||||
currentTime:(NSTimeInterval)currentTime
|
||||
duration:(NSTimeInterval)duration {
|
||||
|
||||
if (!fullText || fullText.length == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 边界情况处理
|
||||
if (duration <= 0) {
|
||||
// 如果没有时长信息,直接返回全部
|
||||
return fullText.length;
|
||||
}
|
||||
|
||||
if (currentTime <= 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (currentTime >= duration) {
|
||||
return fullText.length;
|
||||
}
|
||||
|
||||
// 计算进度比例
|
||||
double progress = currentTime / duration;
|
||||
|
||||
// 计算可见字符数
|
||||
// 使用略微超前的策略,确保文字不会落后于语音
|
||||
double adjustedProgress = MIN(progress * 1.05, 1.0);
|
||||
|
||||
NSUInteger visibleCount =
|
||||
(NSUInteger)round(fullText.length * adjustedProgress);
|
||||
|
||||
return MIN(visibleCount, fullText.length);
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user