OS X `say` для Windows


23

Эта sayкоманда, пожалуй, самая привлекательная особенность терминала OS X - она ​​принимает текст как ввод и произносит его через динамики компьютера. Есть ли какой-либо эквивалентный инструмент командной строки в Windows, встроенный или через стороннюю программу?



2
Это заставляет меня задуматься, может, мне стоит написать приложение для изменения громкости в командной строке на случай, если когда-нибудь возникнет такая ситуация.
nhinkle

Ответы:


5

PTTS - это очень простая программа командной строки Microsoft Windows для преобразования текста в речь. Если используется Microsoft Text to Speech Engine и Microsoft Speech SDK. Модуль преобразования текста в речь устанавливается вместе с Windows XP с одним голосом несколько низкого качества. Программа установки Jampal включает в себя два лучше звучащих голоса. (цитируется с сайта)

Его можно использовать, просто вводя текст в программу перенаправлением или по тексту:

ptts < file.txt
echo Hello there|ptts

@bubu, похоже, что это программное обеспечение способно говорить только из файла, если я не понимаю документацию. Знаете ли вы, есть ли способ принять текст непосредственно из командной строки, не создавая промежуточный файл?
nhinkle

2
Нвм, разобрался. Вы должны передать это в программу. Например echo Hello|ptts.exe. Я бы предпочел, чтобы текст был аргументом команды, но этого будет достаточно, если нет способа сделать это.
nhinkle

@nhinkle да, поскольку это читает со стандартного ввода, один из способов состоит в том, чтобы пройти через это
bubu

3

Я создал простой пакетный скрипт для этого. Вот исходный код

@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

Сохраните этот сценарий в файле с именем «speak.bat» и переместите его в каталог, на который ссылается ваша переменная PATH.

Эта программа создает простой VBS с вашим вводом, а затем говорит это системным голосом. В конце выполнения сценарий будет удален, чтобы освободить место для другого выполнения.


Можете ли вы отредактировать свой пост, чтобы объяснить, как это работает и как его использовать? Кроме того, какова цель перемещения файла для этого решения?
Cfinley

@Cfinley: Сообщение отредактировано
Alessandro Mascolo


1

У них есть эта библиотека в SDK, где вы, возможно, сможете сделать более продвинутую утилиту с некоторыми личными усилиями.

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

Хотя это, вероятно, наиболее удобный способ, поскольку он встроен в систему и доступен через powershell.

Вызовите функцию из пространства имен ( https://msdn.microsoft.com/en-us/library/gg145021(v=vs.110).aspx )

Add-Type -AssemblyName System.Speech

Создание объекта

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

Вызовите функцию и введите свои слова в качестве аргумента.

 $synth.Speak('hey man')

0

Я устал от попыток заставить работать устаревшие инструменты, поэтому я создал wsay.

Это работает так say: вы можете выбирать разные голоса и легко выводить их в волновой файл.

https://github.com/p-groarke/wsay/releases

ура

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.