Смекни!
smekni.com

Обзор элементов языка программирования (стр. 3 из 5)

Для написания программы Speaker1, мы использовали следующие идентификаторы:

Speaker1

Этот идентификатор является

названием программы

Crt В модуле CRT реализованы специальные процедуры и функции для работы с текстовой информацией на дисплее, позволяющие: управлять текстовыми режимами, организовывать окна вывода на экран, настраивать цвета символов на экране, управлять курсором. Кроме того, в модуль включены функции опроса клавиатуры и процедуры управления встроенным в ПЭВМ динамиком.
Speaker_port Имя константы, которому присвоено значение %61.
Portval Название порядкового типа данных, которое имеет значение Byte.
Byte

Порядковый тип данных. Длина, байт=1;

Диапазон значений 0…255

Delay Эта процедура приостанавливает выполнение программы на заданное число миллисекунд.
KeyPressed Возвращает значение типа Boolean, указывающее состояние буфера клавиатуры: False означает, что буфер пуст, a True - что в буфере есть хотя бы один символ, еще не прочитанный программой.
Выполнил Муханов А. 05.12.09. КР 3706002 000009 ПЗ лист Проверила Енсепова Г.К. 07.12.09.

13

изм лист № докум Подпись Дата

2.5 Описание наборов данных

В основе иерархии классов, обеспечивающих функционирование наборов данных в приложениях баз данных, лежит класс TDataSet. Хотя он почти не содержит методов, реально обеспечивающих работоспособность основных механизмов набора данных, тем не менее его значение трудно переоценить.

Этот класс задает структурную основу функционирования набора данных. Другими словами, это скелет набора данных, к методам которого необходимо лишь добавить требуемые вызовы соответствующих функций реальных технологий.

При решении наиболее распространенных задач программирования в процессе создания приложений баз данных класс TDataSet не нужен.

Тем не менее знание основных принципов работы набора данных всегда полезно. Кроме этого, класс TDataSet может использоваться разработчиками в качестве основы для создания собственных компонентов. Поэтому рассмотрим основные механизмы, реализованные в наборе данных.

2.6 Структура записей файлов

Multimedia Streaming – это архитектура, используемая в DirectShow для облегчения жизни программиста. Эта архитектура позволяет работать с мультимедиа данными, как с абстрактным потоком, не вдаваясь в подробности форматов хранения мультимедиа-файлов или специфику устройств-источников мультимедиа. Используя эту архитектуру, программист концентрируется не на расшифровке и преобразовании данных, а на управлении потоком данных, кадрами видео или аудио семплами.

На вершине иерархии находится базовый объект MultimediaStream, который является контейнером для объектов MediaStream. Объект Multimedia Stream может содержать один или несколько объектов Media Stream. В то время как каждый объект типа Media Stream предназначен для работы с данными какого-то одного типа (видео, аудио и т.п.) – Multimedia Stream – просто содержит методы для обращения к содержащимся в нем объектам MediaStream и не зависит от типа данных.

Сейчас мы создадим объект типа IAMMultiMediaStream. Этот интерфейс унаследован от IMultimediaStream и содержит, кроме прочего, функцию OpenFile, которая автоматически строит граф фильтров для воспроизведения файла:

CoCreateInstance(CLSID_AMMultiMediaStream,nil,CLSCTX_INPROC_SERVER, IID_IAMMultiMediaStream, AMStream);

Здесь переменная AMStreamимеет тип IAMMultiMediaStream.

Мы создали контейнер для мультимедийных потоков. Сверяемся с рисунком - мы на верхнем уровне иерархии. У нас есть объект типа IMultimediaStream – теперь в этот контейнер нужно проинициализировать и добавить один или несколько мультимедиа потоков, нужного нам типа. Сначала инициализация:

AMStream.Initialize(STREAMTYPE_READ,

AMMSF_NOGRAPHTHREAD, nil);

Выполнил Муханов А. 05.12.09. КР 3706002 000009 ПЗ лист Проверила Енсепова Г.К. 07.12.09.

14

изм лист № докум Подпись Дата

При инициализации указываем, что будут создаваться мультимедиа потоки для чтения, передав значение STREAMTYPE_READ (другие варианты STREAMTYPE_WRITE, STREAMTYPE_TRANSFORM).

Создадим теперь мультимедиа потоки для видео и звука:

AMStream.AddMediaStream(DDraw, MSPID_PrimaryVideo, 0, NewMediaStremVideo);

AMStream.AddMediaStream(nil, MSPID_PrimaryAudio, AMMSF_ADDDEFAULTRENDERER, NewMediaStremAudio);

Вызываем метод OpenFile – файл загружается, и автоматически строится граф фильтов:

AMStream.OpenFile('cool.avi', 0);

Осталось направить видео поток мультимедиа поток на Surface. Вот процедура, которая делает это:

procedure TForm1.RenderStreamToSurface(Surface : IDirectDrawSurface; MMStream : IMultiMediaStream);

var

PrimaryVidStream : IMediaStream;

DDStream : IDirectDrawMediaStream;

Sample : IDirectDrawStreamSample;

RECT : TRect;

ddsd : TDDSURFACEDESC;

Z : DWORD;

begin

MMStream.GetMediaStream(MSPID_PrimaryVideo, PrimaryVidStream);

PrimaryVidStream.QueryInterface(IID_IDirectDrawMediaStream, DDStream);

ddsd.dwSize := sizeof(ddsd);

DDStream.GetFormat(ddsd, Palitra, ddsd, Z);

rect.top:=(480-ddsd.dwHeight)div 2; rect.left:=(640 - ddsd.dwWidth) div 2;

rect.bottom := rect.top+ddsd.dwHeight; rect.right := rect.left+ddsd.dwWidth;

DDStream.CreateSample(Surface, Rect, 0, Sample);

MMStream.SetState(STREAMSTATE_RUN);

end;

Метод IDirectDrawStreamSample.UpdateвыводиточереднойкадрнаSurface. При достижении конца потока он вернет ошибку с кодом $40002 (MS_S_ENDOFSTREAM), я в этом случае просто перематываю поток к началу, методом Seek.

В этой программе инициализируется DirectDraw, создается Surface , а затем на него выводится видео из avi-файла.

Выполнил Муханов А. 05.12.09. КР 3706002 000009 ПЗ лист Проверила Енсепова Г.К. 07.12.09.

15

изм лист № докум Подпись Дата

2.7 Постановка проблемной программы (процедуры)

2.7.1 Описание проблемной программы

У программы Speaker1 (стр. 21) есть существенный недостаток. Обработка центральным процессором прерываний во время её выполнения влияет на точность соблюдения временных задержек. Попробуем подвигать мышью во время работы программы, и мы услышим перерывы в звучании динамика. По этой причине использование процедуры задержки DELAY является нежелательным. Процедура вывода звука, кроме того, «захватывает» центральный процессор, и одновременно выполнение других процедур оказывается невозможным. Улучшенный вариант программы использует второй канал таймера (программа speaker 2, стр. 22 ).

Надо помнить, что для использования таймера необходимо сначала подключить динамик ко второму каналу PPI, а затем записать единичные значения двух младших битов в порт динамика.

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

2.7.2 Блок - схема проблемной программы

Блок-схема программы speaker2 (стр. 34) отличается от блок-схемы speaker1 (стр. 33) тем, что он более совершенен и не имеет такого недочёта как проблемы с мышью при его движении. Более наглядно можно посмотреть на

Выполнил Муханов А. 05.12.09. КР 3706002 000009 ПЗ лист Проверила Енсепова Г.К. 07.12.09.

16

изм лист № докум Подпись Дата

3 Организация производства

3.1 Комплекс технических средств, необходимый для решения задач

Для полноценной работы наших программы speaker1 и speaker2 необходим звук, который будет описан ниже.

Интегрированный AC-linkконтроллер в Intel 82801ВА I/OControllerHub (ICH2), имеющий поддержку AMRи CNR;

СтереоАС'97-аудиокодекAnalog Devices AD 1885;

На плате расположены пластмассовые разъёмы с цветной РС99 маркировкой (микрофонный вход, линейный выход, линейный вход), а также два внутренних разъёма - AUXin, CDin.

Программная часть:

Комплект П/О SoundMAXwithSPX от AnalogDevices с весом дистрибутива драйверов в 54 Мбайт. Заявлена оптимизация под ММХ и SSE2 SIMD инструкции для процессоров IntelPentiumIII и Pentium 4.

Драйвера:

Win98 SE, WinME иWin2K.

Совместимость с игровыми 2D SoundAPI:

- DirectSound/DirectX 8.0;

- Sound Production extensions (SPX);

- EAX2.0;

- A2D 1.0;

- Sensaura Macro FX / ZoomFX;

- IA-SIGI2DL2. Характеристики аудиокодека:

- полный дуплекс вплоть до 16 бит 48 кГц;

- SNR = 94дБА;

- THD = 0,01 %;

- IMD=90дБ;

- FR = 20 Гц - 20 кГц +/- 0.1 дБ.

- MIDI:

- wavetable синтезатор 4 Мбайт DLS2, 128 GM-инструментов;

- 1.2 Мбайт, 260 XGlite-инструментов;

- 1024 MAX voice программных голоса;

- SPX - SoundProductioneXtention - технология аудиорендеринга нового поколения.

Синтезом звука разработчики управляют напрямую из игр и мультимедиа-приложений. ЗD-звук от Sensaura:

- EnvironmentFX, звуковой рендер 2D с 26 пресетами и полной поддержкой ЕАХ1.0/2.0, I2DL2 реверберации;

- эффекты ближнего поля SensauraMacroFX;

- эффекты дальнего поля SensauraZoomFX;

Выполнил Муханов А. 05.12.09. КР 3706002 000009 ПЗ лист Проверила Енсепова Г.К. 07.12.09.

17

изм лист № докум Подпись Дата

- технология, использующая отдельные HRTF-фильтры для наушников, 2/4/6 колонок DigitalEar (возможен апгрейд до технологии индивидуальной подстройки HRTF-фильтров VirtualEar);

- технология VirtualTheaterSurround для прослушивания 4 и 5.1-канальных саундтреков в фильмах (возможен апгрейд до аналогичной технологии для наушников HeadphoneVirtualTheaterSurround).