Развитие мультимедиа-приложений

Источник: PC Magazine

Автор: Линден де Кармо

Дата публикации: 24.09.2007

Дальнейшее исследование возможностей мультимедиа в OS/2 с использованием языка REXX. В нашей последней публикации по OS/2 (см. PC Magazine/RE, 11/07/96, с. 000) мы обсудили возможности использования REXX в мультимедиа-приложениях. Мы кратко описали строковый интерфейс (интерпретатор REXX, использующийся для выполнения мультимедиа-команд, похожий на обычный английский язык), а затем рассмотрели мультимедиа-компоненты OS/2 и возможности их использования с REXX. Наконец, мы изучили устройство аудиоCD и создали на основе языка REXX проигрыватель компакт-дисков REXXBox. На этот раз мы рассмотрим остальные мультимедиа-устройства в OS/2 и создадим приложение для звуковых эффектов и мультимедиа-автомат (программу, позволяющую проигрывать MIDI-, кино- и WAV-файлы, а также обычные аудиоCD).

Цифровое аудиоустройство

Цифровое звуковое устройство (WAV-устройство) — это один из наиболее часто используемых системных драйверов, позволяющий как проигрывать, так и записывать звук в цифровой форме. В отличие от среды Windows, где этот драйвер напрямую связан с аппаратным обеспечением (аудиоплатой), в OS/2 все аудиоустройства программно связаны с Amp-Mixer, который ими и управляет.

Для того чтобы использовать звуковое устройство, необходимы следующие шаги:

* Загрузить носитель (командой LOAD).
* Закрыть устройство (командой CLOSE).

Так же как и проигрыватель компакт-дисков, звуковое устройство (или драйвер) может быть использовано одновременно многими приложениями; эта методика известна как «разделение» устройства (device-sharing, аналогично time-sharing, т. е. разделение времени между приложениями). Для того чтобы применить этот метод, вам надо либо открыть нужное устройство в режиме разделения времени, либо использовать команду release для информирования OS/2 о том, что вы собираетесь использовать эти функции для звукового устройства (см. рис. 1). Если в вашей REXX-программе не предусмотрена очередь сообщений для интерфейса Presentation Manager (PM), то разделение устройства вам недоступно.

Звуковой драйвер OS/2 обладает еще одним уникальным свойством: совместимостью с многочисленными форматами файлов. Так, например, OS/2 Warp предусматривает работу с файлами IBM/Microsoft формата WAV, формата VOC фирмы Creative Labs и в принципе с любым другим аудиоформатом с помощью динамических библиотек ввода-вывода (Input/Output Procedures DLL). Пакет программ Bonus Pack содержит такую библиотеку, которая позволяет OS/2 проигрывать файлы форматов AU (звуковых файлов UNIX и Internet), AIFF (Macintosh video) и IFF (Amiga audio). Такая гибкость позволяет избавить программы на языке REXX от ограничений на формат звуковых файлов конкретной системы, а также разработать мультимедиа-автомат-проигрыватель на REXX-основе.

Спецэффекты с помощью REXXTRACKS

Теперь, когда мы обсудили основные особенности wave-драйвера, мы используем его свойства для создания REXXTracks, программы на основе языка REXX с реализацией цифровых звуковых эффектов. REXXTracks может записывать и обрабатывать звук, а также обмениваться звуковыми данными с мощными звуковыми приложениями типа Digital Audio Editor.

Первый шаг REXXTracks — открыть устройство. Поскольку в этой программе не предусмотрена очередь сообщений, REXXTracks открывает устройство в монопольном режиме, а затем, если все идет успешно, — использует команду LOAD либо для загрузки существующего звукового файла, либо для создания нового (см. рис. 2).

Если пользователь хочет, чтобы REXXTracks создала новый файл, то перед тем, как создать необходимые эффекты, программа должна получить цифровой звук. Для этого REXXTracks использует команду RECORD, запускающую запись звукового файла. При открытии звукового устройства оно по умолчанию настраивается на оптимальные, по мнению изготовителя звуковой платы, параметры записи. Обычно это 16-бит, 22-кГц формат в режиме монозвучания. Хотя это и удовлетворяет многих пользователей, иногда вам, возможно, захочется записать звук с качеством CD (16 бит, 44,1 кГц, стерео). В этом случае вы должны использовать команду SET, чтобы перевести драйвер в режим качества CD (см. рис. 3).

Несмотря на то что большинство будет работать лишь с основными вариантами записи звуковых файлов, вы можете также использовать дополнительные команды для создания необычных эффектов. Например, REXXTracks использует параметры TO и FROM для произвольного перемещения отрывков речи или звука при записи. Эта методика позволяет достичь интересных эффектов при записи вечеринок или создать прототип шифровального устройства.

Как только REXXTracks записал новый файл или загрузил существующий, он переходит к обычным операциям обмена с буфером — copy/paste — для «придания особого звучания» звуковому файлу (см. рис. 4). Копируя фрагменты звуковых данных в буфер и затем целенаправленно вставляя их в файл, вы можете добиться того, что ваши динамики будут «заикаться», или создать эффекты сверхъестественного звучания музыки. Вы можете также использовать функции буфера для обмена цифровым звуком с другими мультимедиа-приложениями. Чтобы получить представление о возможностях REXXTracks, запустите ее, а затем программу проигрывателя цифрового звука из папки Multimedia. Вы увидите, что REXXTracks добавляет некоторые необычные эффекты в буфер обмена для вашего развлечения!

Отметим, что все операции с буфером (такие, как вырезка, копирование или вставка) требуют наличия очереди сообщений PM. Если вы намереваетесь использовать мультимедиа-REXX-программу, содержащую функции обмена с буфером из командной строки, у вас ничего не выйдет. Вместо этого вы должны запускать REXX-программу либо из PMREXX, либо из другого REXX-приложения, где предусмотрена очередь сообщений PM.

Именно для подобного типа задач мультимедиа возможности OS/2 не ограничены точным числом шагов отката и повтора действий undo и redo. Эта особенность дает вам возможность восстановить ситуацию, существовавшую перед случайным срабатыванием команды вырезки, вставки или записи. Но если вы записали файл, то уже не сможете вернуться на шаг назад. На рис. 5 показано, как справляться с ситуацией, когда вызвана функция буфера обмена, а очередь сообщений недоступна, и как можно использовать команду undo для восстановления после ошибочной команды удаления части звукового файла.

После того как REXXTracks закончил настройку звукового файла, вы можете использовать команду save, чтобы зафиксировать все внесенные изменения. Вы можете добавить, стереть или изменить части ваших звуковых файлов с помощью OS/2, но ни одно из этих изменений не сохранится, пока ваша программа не запишет звуковые файлы. Комбинация неограниченных операций undo/redo с возможностью отброса изменений в файлах позволяет вам с помощью REXX подготовить полноценный звуковой редактор.

Безумие MIDI

Кроме драйверов для проигрывания компакт-дисков и других звуковых файлов в OS/2 заложены средства для работы с файлами Цифрового интерфейса музыкальных инструментов (MIDI) и цифровых файлов видеоклипов. Поскольку мы в конечном счете стремимся к цели нашей программы — созданию видеопроигрывателя-автомата (VREXX), — мы обсудим работу этих устройств и снабдим вас некоторыми рекомендациями по их использованию.

Несмотря на то что устройство MIDI в OS/2 напоминает звуковое, между ними есть некоторые различия. Наиболее очевидно, конечно, то, что MIDI-драйвер позволяет проигрывать MIDI-файлы (рис. 6), в то время как звуковой драйвер имеет доступ лишь к цифровым звуковым файлам. Кроме того, существующая версия MIDI-драйвера не имеет функций записи и буферного обмена. В результате для проигрывания MIDI-файлов из Internet или из другого источника вам придется загружать их в автономный MIDI-секвенсер.

Хотя MIDI-файлы значительно короче, чем WAV-файлы, они могут воспроизводить звук с таким же или даже лучшим качеством, чем соответствующие им WAV-файлы. Файлы в формате MIDI представляют собой поток данных, который сообщает устройству MIDI (вашей звуковой плате или синтезатору), как «сыграть» данную мелодию: когда включать или выключать соответствующую ноту (нажимать на клавишу) и какую, например, использовать звуковую окраску. Поскольку эти инструкции обычно содержат от 2 до 3 байт на ноту (цифровой звук требует от 11 000 до 88 200 байт на секунду записи; это значение зависит от частоты дискретизации и разрядности представления звука), то понятно, что MIDI-файлы занимают значительно меньше места на жестком диске.

Вы, конечно, можете подумать: если MIDI-файлы такие небольшие, то почему кому-нибудь вообще захочется использовать WAV-файлы?! Все дело в том, что речь и некоторые звуковые эффекты не возможно корректно преобразовать в MIDI-сообщения. Более того, многие звуковые платы не самого последнего выпуска, такие, как Creative Labs Sound Blaster или Media Vision Pro Audio Spectrum 16, используют микросхему, которая воспроизводит MIDI-файлы с весьма синтетическим, «компьютерным» звучанием. Если у вас нет современной звуковой платы с синтезом звучания настоящих музыкальных инструментов по таблице волн, MIDI-файлы могут привести к значительной потере качества звука по сравнению с wave-файлом.

Но у формата MIDI есть еще одно преимущество, кроме компактного размера файлов. Он предоставляет возможность управления внешними устройствами как в процессе создания фейерверков, так и для аттракционов типа «американских горок». Это возможно, поскольку формат MIDI-файла не связан с определенным типом музыки или конкретным синтезатором; он представляет собой обобщенный формат обмена информацией, которая затем может быть использована для великого множества различных целей. Рассмотрение универсального примера использования REXX MIDI выходит за рамки данной статьи, но вы можете войти в контакт с международной ассоциацией MIDI (International MIDI Association) для получения дополнительной информации по спецификации MIDI и формату файлов.

Цифровые видеоустройства

Цифровое видеоустройство позволяет воспроизводить кинофильмы и также имеет доступ посредством языка REXX. Несмотря на то что основное назначение этого драйвера состоит в проигрывании видеофрагментов, сжатых программным методом (обычно в виде файлов с расширением AVI), он также позволяет использовать возможности таких аппаратных видеоакселераторов, как MPEG-плата фирмы Sigma Designs. Как и звуковой драйвер, цифровой видеодрайвер совместим с множеством форматов файлов, включая FLC-файлы пакета Autodesk Animator и стандартный MPEG-формат Motion Pictures Expert Group. Наш видеопроигрыватель-автомат VREXX использует эту гибкость драйвера и дает пользователю возможность работать с множеством популярных форматов видеофайлов.

Так как цифровой видеодрайвер для отображения картинок обращается к модулю PM, то все работающие с этим драйвером REXX-программы должны иметь очередь сообщений (такого типа, как PM REXX). На рис. 7 показано, как открыть цифровое видеоустройство и воспроизвести файл.

Многих смущает факт, что некоторые программные видеофайлы (AVI) проигрываются только лишь в OS/2 и не воспроизводятся в Windows и наоборот. Такая несогласованность получается из-за того, что в действительности AVI-файлы упакованы с применением различных методов сжатия/распаковки видеоизображения — кодеков (codec — compression/decompression). По умолчанию программный видеодрайвер OS/2 позволяет проигрывать файлы, созданные с помощью специфического OS/2-кодека Ultimotion. Кроме того, IBM обеспечивает поддержку кодека Indeo 3.1 фирмы Intel. С другой стороны, в Windows используются кодеки фирм Cinepak и Microsoft Video. Чтобы эти AVI-файлы работали в OS/2, вы можете загрузить бесплатный пакет apcodec, доступный через CompuServe, Internet и др. (самая новая версия этого пакета называется apcodec5.zip; ее можно найти на ftp.cdrom.com или на других узлах Internet).

Как и устройство MIDI, видеодрайвер, поставляемый в настоящее время с OS/2, не содержит средств записи. Но если вы установите пакет Video IN, который можно найти в OS/2 Bonus Pack, то сможете с помощью REXX как записывать кинофрагменты, так и редактировать их, используя описанные выше операции вырезки, копирования и вставки.

Поскольку VREXX может воспроизводить видеоклипы, MIDI-, WAV-файлы, а также файлы в любом другом мультимедиа-формате, предусмотренном в OS/2, он должен обеспечивать гладкое переключение между устройствами. Чтобы обеспечить гладкую передачу управления между драйверами, VREXX сначала открывает устройство (например, звуковой драйвер) с помощью команды OPEN. После открытия драйвера можно использовать команду LOAD для установки устройства с другим форматом wave-файлов. LOAD — предпочтительный метод открытия новых файлов, поскольку он действует гораздо быстрее, чем перезапуск драйвера. Но MIDI- или видеофайл загрузить в звуковое устройство невозможно, поэтому необходимо закрыть драйвер и перезапустить такой файл с соответствующим драйвером.

После того как файл открыт, VREXX запрашивает драйвер о типе используемых данных и затем сохраняет эту информацию для дальнейшего использования. Когда наступает время воспроизведения следующего по списку файла, VREXX делает попытку загрузить его в текущее устройство. Если драйвер выдает информацию, что файл имеет неправильный формат (выдавая код ошибки «Invalid media type» — неправильный тип данных), VREXX закрывает этот драйвер, загружает файл в правильный драйвер и затем проигрывает этот файл (см. рис. 8).

Вы можете загрузить VREXX и REXXTracks, а также расширенные варианты листингов программ, приведенных в этой статье, воспользовавшись службой PC Magazine Online.

Теперь, после изучения основных свойств всех содержащихся в OS/2 мультимедиа-устройств, вам, вероятно, будет интересно познакомиться с документацией по более сложным мультимедиа-функциям. К сожалению, по мультимедиа и REXX в настоящее время информации недостаточно. Одним из дополнительных источников информации по строковому интерфейсу REXX является «Справочник программиста мультимедиа» (Multimedia Programmer's Reference), который можно найти в IBM's Developer's Connection for OS/2, ежеквартальном CD, предоставляющим подписчикам доступ к самым последним программным средствам для OS/2 и документации для разработчиков. Вам, однако, необходимо иметь в виду, что этот продукт нацелен в основном на разработчиков, знакомых с языками Cи или Cи++, а не на рядового пользователя REXX.

Другим источником информации по мультимедиа и REXX является книга OS/2 Warp Unleashed Дэвида Московица и Дэвида Керра (David Moskowitz and David Kerr, 1995, Sams Publishing). Эта книга — прекрасный справочник общего назначения по REXX, и в главе, посвященной мультимедиа приведено много REXX-листингов, которые можно использовать в качестве блоков, вставляемых в ваши программы.

Линден де Кармо — инженер по разработке программного обеспечения для фирмы Motorola (Плантейшн, шт. Флорида). Вы можете связаться с ним по адресу lindend@ibm.net.