Озвучка текста в PowerShell естественными голосами
PowerShell умеет говорить из коробки: в Windows есть синтезатор System.Speech, и несколько строк заставят скрипт сообщить, что резервная копия готова или сборка упала. Но это те самые роботизированные голоса, которые Windows держит годами, и они отличаются от машины к машине.
Бесплатный движок SuperClonica запускает естественные нейросетевые голоса на вашем компьютере или сервере, а PowerShell обращается к нему одним вызовом Invoke-RestMethod. В этом руководстве — оба способа и когда какой выбирать.
Два способа заговорить из PowerShell
Для быстрого «бипа со словами» System.Speech годится; для всего, что слушают люди, берите естественный голос.
- System.Speech: встроен в Windows; подключите его через Add-Type -AssemblyName System.Speech и используйте класс SpeechSynthesizer.
- Он работает офлайн и ничего не требует, но голоса звучат роботизированно и зависят от установленных голосов Windows.
- SuperClonica: локальный HTTP-сервер с естественными голосами, голосами персонажей и вашим собственным обученным голосом.
- Он говорит на 31 языке; китайский пока не поддерживается.
Послушайте голоса бесплатно
На странице любого голоса впишите фразу, которую будет говорить скрипт, от 30 до 100 символов, выберите язык и нажмите «Озвучить». Через несколько секунд вы услышите разницу, без регистрации.
Вызов локального сервера SuperClonica
Windows PowerShell 5.1 отправляет строковое тело не в той кодировке, поэтому передавайте байты UTF-8, как выше, а файл .ps1 без BOM читает как ANSI: сохраняйте скрипты с кириллицей в UTF-8 с BOM.
- Один раз запустите сервер, в Windows — через Docker Desktop: docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu.
- Озвучьте фразу из PowerShell: $json = @{text='Ночное резервное копирование завершено'; voice='F1'; lang='ru'} | ConvertTo-Json; Invoke-RestMethod -Method Post -Uri http://localhost:8000/synthesize -ContentType 'application/json' -Body ([Text.Encoding]::UTF8.GetBytes($json)) -OutFile hello.wav.
- Файл — 16-битный моно-WAV, который подойдёт любому плееру, видеоредактору или скрипту.
- Задайте SUPERCLONICA_API_KEY на сервере и добавьте -Headers @{Authorization="Bearer ВАШ-КЛЮЧ"}, если сервер доступен с других машин.
Скрипты, которые говорят
Проиграйте WAV сразу командой (New-Object Media.SoundPlayer "hello.wav").PlaySync() или сохраните объявления на потом. Задача планировщика может озвучивать утреннюю сводку, задание CI — объявлять упавшую сборку в офисную колонку, а цикл по CSV — озвучить сотни подсказок за один прогон. Короткая фраза занимает заметно меньше секунды на обычном процессоре.
Когда хватит System.Speech
System.Speech хватит, когда голос нужно только понять, а не слушать с удовольствием: быстрое оповещение, пока вы за столом, проверка доступности, машина без Docker. SuperClonica берите, когда звук уходит дальше вашего стола — в видео, подсказки, объявления или продукты — или когда один и тот же голос должен одинаково звучать на каждой машине.