Comando OS X `say` para Windows

22

El saycomando es quizás la característica más atractiva del terminal OS X: toma texto como entrada y lo pronuncia a través de los altavoces de la computadora. ¿Existe alguna herramienta de línea de comandos equivalente en Windows, ya sea integrada o mediante un programa de terceros?

nhinkle
fuente
2
Lo que me hace pensar, tal vez debería escribir una aplicación de cambio de volumen de línea de comandos, en caso de que alguna vez surja la situación.
nhinkle

Respuestas:

5

PTTS es un programa de línea de comandos de Microsoft Windows muy simple para convertir texto a voz. Si utiliza el motor de texto a voz de Microsoft y el SDK de voz de Microsoft. El motor de texto a voz se instala con Windows XP con una voz de baja calidad. El programa de instalación de Jampal incluye dos voces que suenan mejor. (citado del sitio web)

Uno puede usarlo simplemente ingresando el texto en el programa por redirección o canalizando el texto:

ptts < file.txt
echo Hello there|ptts
bubu
fuente
@bubu, parece que este software solo es capaz de hablar desde un archivo, a menos que esté malinterpretando la documentación. ¿Sabes si hay alguna forma de que acepte texto directamente desde la línea de comandos sin necesidad de crear un archivo intermediario?
nhinkle
2
Nvm, lo descubrí. Tienes que canalizarlo al programa. Por ej echo Hello|ptts.exe. Preferiría una forma de que el texto sea un argumento del comando, pero esto será suficiente si no hay forma de hacerlo.
nhinkle
@nhinkle sí, como se lee en stdin, una de las formas es atravesarlo
bubu
3

He creado una secuencia de comandos por lotes simple para hacer esto. Aquí está el código fuente

@echo off
echo Dim Speak >> %HOMEPATH%\speak.vbs
echo Set Speak=CreateObject("sapi.spvoice") >> %HOMEPATH%\speak.vbs
echo Speak.Speak "%*">> %HOMEPATH%\speak.vbs
%HOMEPATH%\speak.vbs
del %HOMEPATH%\speak.vbs

Guarde este script en un archivo llamado "speak.bat" y muévalo a un directorio referenciado por su variable PATH.

Este programa crea un vbs simple con su entrada, luego lo habla con la voz del sistema. Al final de la ejecución, el script se eliminará para dar espacio a otra ejecución.

Alessandro Mascolo
fuente
¿Puedes editar tu publicación para explicar cómo funciona esto y cómo usarlo? Además, ¿qué propósito tiene mover el archivo para esta solución?
Cfinley
@Cfinley: Publicación editada
Alessandro Mascolo
2

Esta pregunta se hizo en Stack Overflow. Me gusta la respuesta con el script VBS .

Además, espeakestá disponible para Windows y Linux y se ha portado a OS X. No creo que use el motor TTS de Windows incorporado.

Pausado hasta nuevo aviso.
fuente
1

Tienen esta biblioteca en el SDK, donde probablemente podría hacer una utilidad más avanzada con algún esfuerzo personal.

https://www.microsoft.com/en-us/download/details.aspx?id=27224

Aunque esta es probablemente la forma más conveniente, ya que está integrada de forma nativa en el sistema y es accesible a través de powershell.

Llame a la función desde el espacio de nombres ( https://msdn.microsoft.com/en-us/library/gg145021(v=vs.110).aspx )

Add-Type -AssemblyName System.Speech

Instanciar el objeto

 $synth = New-Object -TypeName
 System.Speech.Synthesis.SpeechSynthesizer

Llama a la función e ingresa tus palabras como argumento.

 $synth.Speak('hey man')
ÉGIDA
fuente