是否有可能使“HTML到语音”像“文本到语音”一样?

我有一个有线的要求,在我退出的应用程序中,我有Text2Speech和为此,我已经使用Text2Speech语音文本,但现在我的客户端要求他讲话的HTML文件,因为他有他的DB许多HTML文件。

我的build议 :

使用HTMLparsing并从HTML获取所有文本,并为Text2Speech使用相同的框架。

但客户端不希望这种types的parsing,他希望任何直接提供HTML2Speechfunction的API或框架。

任何build议或帮助将不胜感激。

正如我已经在HTMLparsing和text2speech这里工作,你可以走两步1.get属性string从HTML文件与下面的代码在iOS7+

根据客户的观点 :如果有任何API在市场上的HTML2Speech可能是其付费或您是依赖于该API,如果你使用任何。 而Native框架将有助于你/客户想要的一样。

步骤1:

 [[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)} documentAttributes:nil error:nil]; 

然后你可以在AVSpeechUtterance传递这个Attributed String

第2步:使用下面的方法获取HTML2String:

 /** * "ConvertHTMLtoStrAndPlay" : This method will convert the HTML to String synthesizer. * * @param aURLHtmlFilePath : "object of html file path" */ -(void)ConvertHTMLtoStrAndPlay:(UIButton*)aBtnPlayPause isSpeechPaused:(BOOL)speechPaused stringWithHTMLAttributes:(NSAttributedString*)aStrWithHTMLAttributes { if (synthesizer.speaking == NO && speechPaused == NO) { AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:aStrWithHTMLAttributes.string]; //utterance.rate = AVSpeechUtteranceMinimumSpeechRate; if (IS_ARABIC) { utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"ar-au"]; }else{ utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-au"]; } [synthesizer speakUtterance:utterance]; } else{ [synthesizer pauseSpeakingAtBoundary:AVSpeechBoundaryImmediate]; } if (speechPaused == NO) { [synthesizer continueSpeaking]; } else { [synthesizer pauseSpeakingAtBoundary:AVSpeechBoundaryImmediate]; } } 

和往常一样,你需要停止使用下面的代码来停止语音。

 /** * "StopPlayWithAVSpeechSynthesizer" : this method will stop the playing of audio on the application. */ -(void)StopPlayWithAVSpeechSynthesizer{ // Do any additional setup after loading the view, typically from a nib. [synthesizer stopSpeakingAtBoundary:AVSpeechBoundaryImmediate]; } 

希望这将帮助您获得HTML2Speechfunction。

这里有两部分解决scheme…

  1. 据推测,你不关心HTML中的格式 – 毕竟,到达语音合成器的时候,这个文本是被说出来的,而不是被查看的。 AVSpeechSynthesizer采取纯文本,所以你只需要摆脱HTML标记。 一个简单的方法就是从HTML中创build一个NSAttributedString ,然后向属性string请求其底层的纯文本string以将文本传递给合成器。

  2. 在iOS 10中,您甚至不必从属性string中提取string – 您可以直接将属性string传递给AVSpeechUtterance

不pipe怎样,如果你不想读取文件,总是会把HTMLparsing成别的东西。 如果客户需要直接的HTML2Speech解决scheme,您可以提供一个方法,将html文件作为参数并读取它。 这个文件下面发生了什么事情,只要它干净而不会造成问题,就不会打扰客户端。

当客户要求Markdown2SpeechXML2Speech时会发生什么。 对于我在你的描述中看到的最好是现在在一个框架中使用两个公共方法Text2SpeechHTML2Speech ,它们将作为参数链接到文件或NSString。

所以@ricksterbuild议它可以是NSAttributedStringNSString 。 这里有很多parsing器,或者如果你想要自己的解决scheme,你可以删除里面的所有东西,然后改变编码。

最安全的方法是提取文本并使用现有的text2speech API。

虽然如果你确定浏览器是chrome,那么语音合成API也许会有帮助。 但是这个API仍然没有被所有浏览器完全采用; 这将是一个危险的解决scheme。

你可以在这里find关于这个API的必要信息

除了上面提到的语音合成API之外,没有用于HTML语音的直接API。 尽pipe你可以尝试http://responsivevoice.org/ 。 但是我想这个也是基于浏览器的语音合成或者语音在服务器端生成的。 所以要使用这一个,你将不得不提取文本,并传递文本到API来获得演讲