Другой интересный блок , где каждый голос представляет себя, выполняется, когда данный сценарий вызывается как sayit demo.
Все это очень просто, нужно лишь разобраться, как работает сама команда say.
Запуск сценария
Так как этот сценарий воспроизводит речь, мы немногое можем показать в книге, а поскольку мы пока не выпустили аудиверсию «Сценариев командной оболочки» (вы сумеете представить себе все то, чего нельзя показать на картинке?), вам придется поэкспериментировать самостоятельно. Однако сценарий может перечислить и воспроизвести все установленные голоса, как показано в листинге 13.11.
Результаты
Листинг 13.11. Запуск сценария sayit для вывода списка поддерживаемых голосов и их озвучивания
$ sayit −d
Available voices: Agnes, Albert, Alex, Bad News, Bahh, Bells, Boing,
Bruce, Bubbles, Cellos, Daniel, Deranged, Fred, Good News, Hysterical,
Junior, Karen, Kathy, Moira, Pipe Organ, Princess, Ralph, Samantha,
Tessa, Trinoids, Veena, Vicki, Victoria, Whisper, Zarvox
HANDY TIP: use "sayit.sh demo" to hear all the different voices
$ sayit "Yo, yo, dog! Whassup?"
$ sayit −v "Pipe Organ" −r 60 "Yo, yo, dog! Whassup?"
$ sayit −v "Ralph" −r 80 −f alice.txt
Усовершенствование сценария
Детальное исследование вывода команды say −v \? показало, что существует по меньшей мере один голос, для которого неправильно указан код языка. Для имени Fiona указан код en-scotland, а не en_scotland, что нарушает единообразие (учитывая, что для имени Moira указан код языка en_IE, а не en-irish или en-ireland). Вы легко могли бы усовершенствовать сценарий, чтобы он обрабатывал коды обоих видов: en_ и en-. В остальном поэкспериментируйте сами и подумайте, когда было бы полезно иметь сценарий или демона, общающегося с вами.
Глава 14. ImageMagick и обработка графических файлов
Командная строка в Linux обладает необычайно широким диапазоном возможностей, но так как она имеет текстовый интерфейс, то не позволяет выполнять сколько-нибудь сложную обработку графики. Или это не так?
Оказывается, практически в любом окружении командной строки, от OSX до Linux и многих других систем, доступен необычайно мощный пакет утилит командной строки, ImageMagick. Чтобы опробовать сценарии в этой главе, вам придется загрузить и установить пакет с сайта http://www.imagemagick.org/ или воспользоваться системным диспетчером пакетов, таким как apt, yum или brew, если вы этого не сделали, когда знакомились со сценарием № 91 из главы 13.
Так как утилиты предназначены для работы в командной строке, они занимают очень мало дискового пространства, что-то около 19 Мбайт (для Windows-версии). Вы можете также получить исходный код пакета, если хотите посмотреть, как выглядит внутри такое мощное и гибкое программное обеспечение. И снова открытое ПО побеждает.
№ 94. Интеллектуальный анализатор размеров изображений
Команда file позволяет определять типы файлов и в некоторых случаях даже размеры изображений. Но очень часто она терпит неудачу:
$ file * | head -4
100_0399.png:····PNG image data, 1024 x 768, 8-bit/color RGBA, non-interlaced
8t grade art1.jpeg:··JPEG image data, JFIF standard 1.01
99icon.gif:··········GIF image data, version 89a, 143 x 163
Angel.jpg:·········· JPEG image data, JFIF standard 1.01
Файлы PNG и GIF не вызывают проблем, но как быть с не менее распространенными файлами JPEG? Команда file не смогла определить размеры изображений. Какая досада!
Код
Давайте устраним эту проблему с помощью сценария (листинг 14.1), который использует инструмент identify из пакета ImageMagick, чтобы точно определить размеры изображения.
Листинг 14.1. Сценарий imagesize
#!/bin/bash
# imagesize — выводит информацию о файле изображения и определяет размеры,
#·· используя утилиту identify из пакета ImageMagick.
for name
do
··identify −format "%f: %G with %k colors.\n" "$name"
done
exit 0
Как это работает
Когда инструмент identify вызывается с флагом −verbose, он извлекает огромный объем информации о каждом анализируемом изображении, как показано ниже, где исследуется один из файлов в формате PNG:
$ identify −verbose testimage.png
Image: testimage.png
··Format: PNG (Portable Network Graphics)