是否有可能使“HTML to speech”与“Text to speech”相同?

时间:2016-09-02 06:48:06

标签: html ios text-to-speech

我有一个奇怪的要求,在我现有的应用中,我有Text2Speech,为此,我使用AVSpeechSynthesizer语音文字,但现在我的客户要求他想发言HTML文件,因为他在HTML中有很多DB个文件。

我的建议:

  

使用HTML解析并从HTML获取所有文本并使用相同的框架   对于Text2Speech。

但是客户端不希望这种类型的解析,他希望任何API或框架直接提供HTML2Speech功能。

任何建议或帮助都将受到高度赞赏。

4 个答案:

答案 0 :(得分:5)

由于我在这里使用过HTML解析和text2speech,你可以使用两个步骤 1.get来自HTML文件的属性字符串,以下代码适用于console.log(Function.prototype.toString.call(foo));

  

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

第1步:

iOS7+

然后您可以在[[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)} documentAttributes:nil error:nil];

中传递此归因字符串

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

AVSpeechUtterance

和往常一样,你需要在代码下方停止使用以停止言语。

/**
 *  "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];
    }

}

希望这将有助于您获得HTML2Speech功能。

答案 1 :(得分:4)

这里有一个解决方案的两个部分......

  1. 据推测,你并不关心HTML中的格式 - 毕竟,当它到达语音合成器时,这个文本就会被说出来,而不是被查看。 AVSpeechSynthesizer采用纯文本,因此您只需要删除HTML标记。一种简单的方法是创建NSAttributedString from the HTML,然后要求其基础纯文本string的属性字符串将文本传递给合成器。

  2. 在iOS 10中,您甚至不必从属性字符串中提取字符串 - 您可以传递属性字符串directly to AVSpeechUtterance

答案 2 :(得分:3)

如果您不想阅读文件,它将始终将HTML解析为其他内容。如果客户端需要直接HTML2Speech解决方案,您可以提供一种方法,将html文件作为参数并读取它。只要它干净并且没有引起问题,这个文件在幕后发生的事情不应该打扰客户端。

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

因此@rickster建议它可以是NSAttributedStringNSString。那里有很多解析器,或者如果你想要自己的解决方案,你可以删除<>内的所有内容并更改编码。

答案 3 :(得分:1)

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

虽然如果您确定浏览器是chrome,那么Speech Synthesis API可能会有所帮助。但是这个API仍未被所有浏览器完全采用;这将是一个冒险的解决方案。

您可以在

找到有关此API的必要信息

除了上面提到的语音合成API之外,没有HTML到语音的直接API。虽然你可以尝试http://responsivevoice.org/。但我认为这个也是基于浏览器的语音合成或服务器上的语音生成。因此,要使用此文件,您必须提取文本并将文本传递给API以获取语音