2016-09-02 1 views
19

나는 하나의 유선 요구 사항을 갖고 있는데, 내 애플 리케이션에는 Text2Speech이 있고 그 텍스트는 AVSpeechSynthesizer을 사용했지만 지금은 내 클라이언트 요구 사항 인 HTML 파일로 그의 DB에 많은 HTML 파일이 있습니다."Text to speech"와 같이 "HTML to speech"를 동일하게 만들 수 있습니까?

내 제안 :

사용 HTML 구문 분석 및 HTML에서 모든 텍스트를 얻을 Text2Speech에 대해 동일한 프레임 워크 를 사용합니다.

그러나 클라이언트는 구문 분석의 유형을 원하지 않는 그는 직접 HTML2Speech 기능을 제공하는 모든 API 또는 프레임 워크를 원한다.

모든 제안이나 도움을 주실 수 있습니다.

+0

예! 하지만 당신은 HTML 형식을 수정합니까? – amorbytes

+0

아니요 HTML 파일의 수정 된 형식이 없습니다. – CodeChanger

+0

"그는 HTML2Speech 기능을 직접 제공하는 API 또는 프레임 워크를 원합니다.이 작업을 수행하는 모든 API는 기본 HTML을 구문 분석하여 Text2Speech에 제공합니다. 다른 방법은 없습니다. – Kevin

답변

5

내가 여기 당신이 함께 갈 수있는 HTML 구문 분석 및 text2speech과 협력 아래 코드와 HTML 파일에서 하지 1.Get 속성 문자열을 단계 것처럼 iOS7+ 클라이언트 관점 당으로

작동합니다 경우 HTML2Speech가 시장에 출시 된 API는 유료 일 수도 있고 일 수도 있습니다.이 API를 사용하면 해당 API에 의존하게됩니다. 네이티브 프레임 워크 이 당신/클라이언트가 원하는 것과 동일한 것을 도울 것입니다.

1 단계 : 다음

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

당신은 AVSpeechUtterance

2 단계에서이 기인 문자열을 전달할 수 있습니다

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

} 
: 방법 아래
사용 HTML2String를 얻을 수

그리고 평상시처럼 Speech를 멈추기 위해 코드 아래에서 사용을 중단해야합니다.

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

희망 이것은 HTML2Speech 기능을 얻는 데 도움이됩니다.

1

가장 안전한 방법은 텍스트를 추출하고 기존 text2speech API를 사용하는 것입니다.

브라우저가 크롬이면 음성 합성 API가 도움이 될지 모르지만. 그러나이 API는 아직 모든 브라우저에서 완전히 채택되지 않았습니다. 그것은 위험한 해결책이 될 것입니다.

당신은 위에서 언급 한 음성 합성의 API를 제외한 음성에 HTML에 대한 직접적인 API가 없습니다

에서이 API에 관한 필요한 정보를 찾을 수 있습니다. 비록 당신이 http://responsivevoice.org/ 시도 할 수 있습니다. 그러나 나는이 또한 브라우저의 음성 합성 또는 서버의 음성 생성에 기반한다고 생각합니다. 그래서 하나를 사용하려면, 당신은 연설을 얻기 위해 텍스트를 추출하고 API에 텍스트를 통과해야 할 것입니다 여기에 솔루션 두 부분이있다

4

... 아마도 당신은 걱정하지 않는다

  1. HTML의 서식 지정 - 결국 음성 합성기에 도달 할 때까지이 텍스트를 보지 않고 볼 수 있습니다. AVSpeechSynthesizer은 일반 텍스트를 사용하므로 HTML 마크 업을 제거하면됩니다. 한 가지 쉬운 방법은 NSAttributedStringfrom the HTML을 만든 다음 해당 기본 문자열 string에 대한 특성 문자열을 사용하여 텍스트를 신디사이저에 전달하도록 요청하는 것입니다.

  2. iOS 10에서는 귀속 문자열에서 문자열을 추출 할 필요조차 없습니다. 귀속 문자열 directly to AVSpeechUtterance을 전달할 수 있습니다.

3

파일을 읽지 않으려면 HTML을 다른 것으로 구문 분석해야합니다. 클라이언트가 직접 HTML2Speech 솔루션을 원한다면 html 파일을 인자로 취하여 읽는 메소드를 제공 할 수 있습니다. 후드 아래에서이 파일과 관련하여 일어나는 일은 깨끗하고 문제를 일으키지 않는 한 고객을 괴롭혀서는 안됩니다.

고객이 Markdown2Speech 또는 XML2Speech을 요청하면 어떻게됩니까? 당신의 desciption에서 볼 수있는 것은 파일이나 NSString에 인수 링크를 취할 두 개의 공개 메소드 Text2SpeechHTML2Speech이있는 하나의 프레임 워크에서 지금 당장 가지고있는 것이 좋습니다.

그래서 @rickster는 NSAttributedString 또는 NSString 일 수 있음을 제안합니다. 밖에있는 많은 파서가 있습니다. 또는 자신의 솔루션을 원할 경우 <> 안에있는 모든 것을 제거하고 인코딩을 변경할 수 있습니다.