Хэди Ламарр

Меня всегда интересовали люди, которые проявляют себя не в одной узкой области, а в многих. И чем больше разница между этими областями — тем интереснее. Можно вспомнить, например, Ричарда Фейнмана, известного физика, который любил играть на барабанах и рисовать. Или даже Альберта Эйнштейна, который любил играть на скрипке. Но сейчас я не о них: хочу вспомнить актрису, пионерку кинематографа, Хэди Ламарр. В принципе, уже то, что она снялась в первой за историю кино сексуальной сцене, очень примечательный факт. Который, по рамкам того времени можно назвать очень смелым ударом по ханжеским моральным нравам эпохи. Но куда интереснее, на мой взгляд, то, что она же изобрела метод расширения спектра сигнала, который используется и поныне, хотя бы в том же стандарте GSM, благодаря которому мы можем говорить по сотовым телефонам.


Иоанн Скот Эриугена

Если можно доверять сообщению Уильяма Малмсберийского, то однажды король, когда Иоанн [Иоанн Скот Эриугена, философ, схоласт — прим. Astartsky] обедал с ним, спросил: «Что отделяет Скота от скота?», на что Иоанн ответил: «Только ширина обеденного стола!»


«История западной философии», Бертран Рассел

Азимов

Если врач скажет, что мне осталось жить пять минут, я не буду рвать на себе волосы. Просто я стану печатать на машинке немного быстрее
Айзек Азимов


Ричард Фейнман

Книга расскажет о жизни Ричарда Филиппа Фейнмана, знаменитого американского физика, известного популяризатора науки, да и просто хорошего человека. Не ожидайте скучной и сухой биографии, ведь мало людей на свете могли бы похвастаться таким радостным и восторженным отношением к жизни, как Ричард Фейнман. С ним случались самые разные истории: забавные и смешные, грустные и серьезные, нелепые и трагичные, но всюду по жизни его вели неистощимое любопытство и восхищение нашим миром.


Во многих фантастических фильмах люди взаимодействуют с компьютерами, используя голосовые команды. Например, заходит человек в комнату, а там темно. «Компьютер, свет 50%!» — говорит он. «Есть свет 50%!» — отзывается приятным женским контральто компьютер и берет под козырек, включая неяркий свет. Кому такого не хотелось? Но если сама мысль такого взаимодействия родилась на свет очень давно, странствуя с тех пор по страницам фантастических книг и кадрам кинолент, то сейчас всё изменилось: доступность под рукой высоких технологий сделала многое возможным. В романе Роберта Хайнлайна «Луна — суровая хозяйка» (1966г.) суперкомпьютер Майк мог говорить свободно, но он занимал огромное количество места и, уж конечно, не был мобильным. Герой моего рассказа не может похвастаться идеальным произношением или возможностью поддерживать диалог, но, для своих габаритов он очень способный. Разумеется, я говорю о нетбуке Asus EeePC 1000.

Не так давно я установил на него новую операционную систему MS Windows 7 RC и не мог не ознакомиться с тем, что предлагалось в комплекте. Наибольший мой интерес вызвала командная строка PowerShell и среда PowerShell ISE. Где-то на просторах интернета существуют самые разные командлеты для осуществления почти любых задач, в том числе и для воспроизведения речи. Но мне хотелось реализовать все через обычную функцию, чтобы не быть зависимым от установленных командлетов. Их же, в конце концов, может и не быть на определенном компьютере, а профиль скопировать — дело минуты. Кроме того, недавняя история с исчезновением в новой сборке, например, командлета Get-Clipboard для работы с буфером обмена, настораживает относительно чрезмерного использования редких командлетов. А вот классы .NET никуда не денутся, хотя доступ к ним может быть тоже не самым простым: в данном случае приходится запускать консоль в режиме -sta чтобы иметь возможность работать с буфером обмена.

Префикс названия функции я использую от одного из своих ников, чтобы иметь возможность по автодополнению быстро попасть на самописные функции, введя всего три символа: они больше нигде в командах PowerShell не встречаются.

Реализация


function astSpeak([string]$inputString, [int]$speed = -2, 
         [int]$engine = 0, [switch]$file,
         [switch]$list, [switch]$buffer,
         [int]$volume = 85)
{
  # Создаем объект
  $oVoice = New-Object -com "SAPI.spvoice"

  # Если требуется вывести список голосов
  if($list)
  {
    Write-Output "Установленные в системе голоса: "
    $i = 0
    Foreach ($Token in $oVoice.getvoices())
    {
      Write-Host $i - $Token.getdescription()
      $i++
    }    
  }
  # Если требуется проговорить
  else
  {
    # Получаем текст из файла, если задан переключатель
    if($file){ $toSpeechText = Get-Content $inputString}
    # Проговариваем текст из буфера обмена (требует режима sta)
    elseif($buffer){
     $null = [reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
     $toSpeechText = [Windows.Forms.Clipboard]::GetText() }
    # Используем полученную строку, если переключатель не задан
    else{ $toSpeechText = $inputString}
    
    # Воспроизводим
    $oVoice.rate = $speed
    $oVoice.volume = $volume
    $oVoice.voice = $oVoice.getvoices().item($engine)    
    $oVoice.Speak($toSpeechText)
  }
}

Что умеет функция?

Можно вывести список установленных в системе голосов. Существует достаточно большое количество самых разных голосов, в том числе умеющих читать русский текст. У меня как основной установлен голос Алёна, который вполне успешно прошел проверку чтением статей из википедии и художественной литературы. В качестве последней использовался короткий ироничный рассказ Гарри Гаррисона «Абсолютное Оружие», взятый в Библиотеке Мошкова. Благодаря голосу сразу удалось найти несколько опечаток в тексте и понять необходимость расстановки буквы «ё», в остальном же, чтение было впечатляющим. Итак, чтобы получить список голосовых движков, нужно вызвать:


astSpeak -l 

Можно прочитать любой заданный текст, ну это самое простое.


astSpeak «Привет! Меня зовут Алёна, я голос твоего компьютера!» 

Можно прочитать текстовый файл. Для этого следует указать соответствующий ключ и путь к нужному файлу. Например, так:


astSpeak -f «D:\Библиотека\Редъярд Киплинг\Заповедь.txt»

Да… пожалуй, доверять Алёне стихи больше не будем :)

Можно прочитать текст, содержащийся в буфере обмена. С реализацией этого существуют некоторые сложности, так как специальный командлет был исключен из пакета поставки PowerShell, а получить доступ к буферу средствами .NET можно только в режиме sta (Single Threading Apartment), а консоль PowerShell запускается в режиме mta по-умолчанию. В режиме mta работает по-умолчанию ISE. Но это не проблема, достаточно в свойствах ярлыка консоли прописать соответствующий ключ:

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


astSpeak -b

Самое страшное — если там был URL.

При вызове любого режима, предполагающего воспроизведение речи (ну, то есть кроме перечисления голосовых движков), можно также задать скорость речи, громкость голоса и номер звукового движка. Чтобы, например, услышать слово «привет» в исполнении Катерины (движок номер 1), громкостью, установленной на 85/100 и со слегка увеличенной скоростью, нужно ввести следующую команду.


astSpeak -e 1 -v 85 -s 3 «Привет» 

В общем, все действительно просто! Если у вас есть какие-то комментарии, советы или вы знаете как можно все это улучшить, буду очень рад вас услышать.


Отправившись сегодня утречком на кухню, захватил с собой ноутбук, чтобы было что почитать или посмотреть во время ожидания кипятка для чая и жарки хлебцов - ну не телевизор же смотреть, в самом деле? И вот вдруг подумалось: насколько глубоко за последние годы высокие технологии вошли в нашу жизнь, стали её обычной частью. Я помню как какие-то десять лет назад обладание хоть каким-то компьютером было само по себе поводом для гордости, а его использование - чем-то и вовсе сакральным. Чаще всего там даже интернетов не было, да и какие это были по нынешним меркам интернеты?

У меня дома компьютер всегда стоял как икона, в красном углу - у него было специальное место, каждое его использование было если и не событием, то уж точно далеко не обычным делом. А сейчас я сижу на кухне, закинув ногу на ногу, с килограммовым ноутбуком, пишу в уютный бложек по беспроводному интернету и это даже не что-то эдакое :)


Жихарь

Вороны в тот день летели по небу не простые, а красные. Примета была самая дурная, да что с того: давненько уж не бывало в Многоборье добрых знамений. Если у кого в печи убегала из горшка каша, то непременно в сторону устья, к убытку; кошки даже в жару спали, спрятав голову под живот, - к морозам; вышедший ночью во двор по нужде обязательно видел молодой месяц с левой стороны. У многих чесалась левая же ладонь, предвещая новые налоги. Мыши в домах до того обнаглели, что садились за стол вместе с хозяевами и нетерпеливо стучали ложками. Повадился ходить со двора во двор крепкий таракан Атлантий - он безжалостно пенял людям, что не сметают крошек на пол, и возразить ему было нечего. В разгар зимы корова родила теленка, доподлинно похожего на бондаря Глузда. Бондаря, конечно, поучили до смерти так не делать, да что толку бить по хвостам?


«Там где нас нет», Михаил Успенский