文本到语音和导航

Posted

技术标签:

【中文标题】文本到语音和导航【英文标题】:Text to speech and navigation 【发布时间】:2012-04-26 07:34:48 【问题描述】:

我在 ios 上使用 Acapela TTS。 我有一个 html 文档,其中包含我想要读出的所有文本(和标记)。 文本被分成几段,我希望能够在每个标题处开始 TTS。 目前,我将每个段落放在它自己的 UIWebView 中(用于处理内部标记)并将它们添加到 UIScrollView 以导航所有元素。每个 UIWebView 都带有一个按钮,所以当它被按下时,连接的文本会被大声朗读。 我现在的问题是,我必须使用框架(意味着静态 y 位置)放置 UIWebView 和按钮,但这需要我有准确的高度,这是我当前的问题。 我已经尝试使用这个问题中提到的解决方案:UIWebView height,但它仍然看起来不太好 - 网页浏览量太高或太短,我需要它是完美的,所以它看起来像一个一致的网页。

有没有人知道一种不同的方式来执行这种类型的 TTS,而无需将其拆分为我忽略的单独 web 视图?

这是我放置 UIWebViews 的代码:

float yOffset = 0;
UIWebView *previous = nil;

//UIWebView delegate
-(void)webViewDidFinishLoad:(UIWebView *)webView

NSString *height = [webView stringByEvaluatingjavascriptFromString:@"document.body.scrollHeight;"];

if(previous!=nil)
    yOffset += previous.frame.size.height;

CGFloat h = [height floatValue];

CGRect frame = CGRectMake(0, yOffset, scrollView.frame.size.width, h); 

[webView setFrame:frame];
[webView setOpaque:NO];
[webView setBackgroundColor:[UIColor whiteColor]];
previous = webView;
[scrollView addSubview:webView];

yOffset += previous.frame.size.height;

[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, yOffset)];

【问题讨论】:

【参考方案1】:

只是一个想法:您可以将完整的段落转换为指向段落标识符的可点击链接。然后您可以使用UIWebViewDelegate 覆盖点击事件并使用javascript 获取段落文本。我的意思是这样的:

HTML:

<p id="paragraph1"><a href="paragraph1">First paragraph</a></p>
<p id="paragraph2"><a href="paragraph2">Second paragraph</a></p>

实现shouldStartLoadWithRequest of UIWebViewDelegate

           - (BOOL)webView:(UIWebView *)webView 
shouldStartLoadWithRequest:(NSURLRequest *)request 
            navigationType:(UIWebViewNavigationType)navigationType 

  NSString* link = [request.URL lastPathComponent]; // not sure

  // use rangeOfString to find all
  if (inType == UIWebViewNavigationTypeLinkClicked && [link compare:@"paragraph1"] == NSOrderedSame) 
   
    // check this
    NSString* javaScript = 
      [NSString stringWithFormat:@"document.getElementById('%@').nodeValue", link]; 
    NSString paragraphToRead = 
      [webView stringByEvaluatingJavaScriptFromString:javaScript];
    // read out paragraphToRead
    return NO;
  

【讨论】:

这是一个不错的想法,但问题是,我无法更改 HTML。它由一家公司提供,该公司并不具备创建更具体标签的知识..

以上是关于文本到语音和导航的主要内容,如果未能解决你的问题,请参考以下文章

百度地图自定义语音导航教程

文本到语音(语音生成)和语音到文本(语音识别)API?

python腾讯语音合成

语音/语音到文本[关闭]

在 iOS 中同时管理文本到语音和语音识别

如何使用Microsoft speech将文本到语音和语音到文本功能添加到SIP软件