1 votos

Cómo cambiar automáticamente las voces de texto a voz en función de las etiquetas de idioma del texto

¿Conoce alguien un sistema TTS para Mac que cambie automáticamente de voz en función de las etiquetas de idioma presentes en un procesador de textos o en un texto html? Por ejemplo, cambiaría a una voz en francés para pronunciar correctamente una palabra o un texto en francés en un texto más largo en inglés.

Estoy buscando una extensión o servicio que pueda hablar una página web o un texto de correo electrónico codificado como

<span lang="en-US">In Paris the name of the city is pronounced</span> <span lang="fr-FR">Paris</span>

y cambiar de una voz inglesa a una francesa para la última palabra.

No parece que el propio sistema de texto a voz de Apple haga esto, las voces normalmente tienen que ser cambiadas por el usuario (excepto posiblemente cuando los idiomas están en diferentes scripts, como el inglés y el hebreo).

He encontrado una aplicación, Ghostreader + que hace el cambio de voz, pero requiere el uso de la aplicación para añadir sus propias etiquetas de idioma y los documentos se guardan en su propio formato no estándar. Algo que funcione con etiquetas ya presentes, por ejemplo, en html, sería mucho más útil.

1voto

hjdm Puntos 18

Puede crear su propio binario swift y utilizarlo en Automator. Aquí está el código de ejemplo:

import Foundation
import AVFoundation

class Synth: NSObject, AVSpeechSynthesizerDelegate {
    let synthesizer = AVSpeechSynthesizer()

    init(text: String) {
        super.init()
        let languageCode = NSLinguisticTagger.dominantLanguage(for: text) ?? AVSpeechSynthesisVoiceIdentifierAlex

        let utterance = AVSpeechUtterance(string: text)
        utterance.voice = AVSpeechSynthesisVoice(language: languageCode)
        synthesizer.delegate = self
        synthesizer.speak(utterance)
    }

    func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didFinish utterance: AVSpeechUtterance) {
        exit(0)
    }
}

var text = CommandLine.arguments.dropFirst().reduce("", +)
text = text.isEmpty ? "No text" : text
let s = Synth(text: text)

RunLoop.main.run()

Guárdelo en un archivo llamado main.swift y luego en la línea de comandos ejecutar

swiftc main.swift -o ttslanguage

Lugar ttslanguage en su directorio de inicio, luego abra Automator.app, seleccione "Servicio" como tipo. Haz que se ejecute en la entrada de texto. Coloca "Run shell script" como primer bloque y entrada:

~/ttslanguage "$1"

Ahora podrás ejecutar el Text To Speech que detecta el idioma del texto seleccionado.

Si el texto tiene varias frases con diferentes idiomas, puede cambiar el Synth a (no se olvide de import NaturalLanguage ):

class Synth: NSObject, AVSpeechSynthesizerDelegate {
    let synthesizer = AVSpeechSynthesizer()
    var lastUtterance: AVSpeechUtterance?

    init(text: String) {
        super.init()
        let tagger = NLTagger(tagSchemes: [.language])
        tagger.string = text
        var utterances = [AVSpeechUtterance]()
        tagger.enumerateTags(in: text.startIndex..<text.endIndex, unit: .sentence, scheme: .language, options: []) { tag, tokenRange in
                let txt = String(text[tokenRange])
                let languageCode = NSLinguisticTagger.dominantLanguage(for: txt) ?? AVSpeechSynthesisVoiceIdentifierAlex

                let utterance = AVSpeechUtterance(string: txt)
                utterance.voice = AVSpeechSynthesisVoice(language: languageCode)
                utterances.append(utterance)
            return true
        }
        synthesizer.delegate = self

        lastUtterance = utterances.last
        for utterance in utterances {
            synthesizer.speak(utterance)
        }
    }

    func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didFinish utterance: AVSpeechUtterance) {
        guard let lastUtterance = lastUtterance else {
            exit(-1)
        }
        if lastUtterance == utterance {
            exit(0)
        }
    }
}

Proyecto con análisis sintáctico avanzado (incluyendo HTML + lang atributos) se pueden encontrar en la página de github . Más información en README.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X