online - ¿Es posible hacer "HTML a voz" igual que "Texto a voz"?
text to speech library javascript (4)
Como he trabajado con el análisis de HTML y text2speech aquí, puede ir con 2 pasos 1.get La cadena de atributo del archivo HTML con el código siguiente funciona en iOS7+
Según la perspectiva de su cliente : si hay alguna API en el mercado para HTML2Speech puede ser su pago o usted depende de esa API si usa alguna. Mientras que el marco nativo ayudará a lo mismo que usted / cliente quiere.
Paso 1:
[[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding]
options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)}
documentAttributes:nil error:nil];
Luego puede pasar esta cadena atribuida en AVSpeechUtterance
Paso 2: usa el método de abajo para obtener 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];
}
}
y como siempre, debe dejar de usar el siguiente código para detener el habla.
/**
* "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];
}
Espero Esto te ayudará a obtener la característica HTML2Speech.
Tengo un requisito alámbrico de que en mi aplicación Text2Speech
tengo Text2Speech
y para eso he usado AVSpeechSynthesizer
para pronunciar texto, pero ahora el requisito de mi cliente quiere hablar el archivo HTML
ya que tiene muchos archivos HTML
en su base de DB
.
Mi sugerencia :
use el análisis de
HTML
y obtenga todo el texto de HTML y use el mismo marco para Text2Speech.
Pero el cliente no quiere ese tipo de análisis y quiere cualquier API
o marco que proporcione directamente la característica HTML2Speech
.
Cualquier sugerencia o ayuda será altamente apreciada.
De una forma u otra, siempre se analizará HTML con otra cosa si no desea leer archivos. Si el cliente desea una solución HTML2Speech
directa, puede proporcionar un método que tome un archivo html como argumento y lo lea. Lo que está sucediendo con este archivo debajo del capó no debería molestar al cliente, siempre y cuando esté limpio y no cause problemas.
¿Qué sucede cuando el cliente le pedirá Markdown2Speech
o XML2Speech
? Por lo que veo en su descripción es mejor tenerlo por ahora en un marco con dos métodos públicos, Text2Speech
y HTML2Speech
que tomarán como enlace de argumento a archivo o NSString.
Entonces, como @rickster sugiere que puede ser NSAttributedString
o NSString
. Hay una gran cantidad de analizadores, o si desea una solución propia, puede eliminar todo lo que hay dentro <
y >
y cambiar la codificación.
El método más seguro será extraer el texto y utilizar la API text2speech existente.
Aunque si está seguro de que el navegador será Chrome, la API de síntesis de voz puede ser útil. Pero esta API aún no está completamente adoptada por todos los navegadores; Será una solución arriesgada.
Puede encontrar la información necesaria sobre esta API en
- https://developers.google.com/web/updates/2014/01/Web-apps-that-talk-Introduction-to-the-Speech-Synthesis-API?hl=en
- https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#examples-synthesis
- https://developer.mozilla.org/en-US/docs/Web/API/Web_Speech_API
No hay una API directa para HTML a voz, excepto la API de síntesis de voz mencionada anteriormente. Aunque puedes probar http://responsivevoice.org/ . Pero creo que este también se basa en la síntesis de voz o la generación de voz del servidor en el servidor. Así que para usar este, tendrías que extraer texto y pasar el texto a la API para obtener el discurso
Hay dos partes para una solución aquí ...
Es de suponer que no le importa el formato en el HTML; después de todo, para cuando llegue al sintetizador de voz, este texto se pronunciará, no se verá.
AVSpeechSynthesizer
toma texto sin formato, por lo que solo necesita deshacerse del formato HTML. Una forma fácil de hacerlo es crear unaNSAttributedString
partir del HTML , luego pedir a esa cadena atribuida sustring
texto simple subyacente para pasar el texto al sintetizador.En iOS 10, ni siquiera tiene que extraer la cadena de una cadena atribuida, puede pasar una cadena atribuida directamente a
AVSpeechUtterance
.