Смекни!
smekni.com

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

Установка

В комплекте с материнской платой идут драйвера под Win98 SE, WinME и Win2K. Драйвера звуковых устройств выполнены в виде WDM-драйверов.

Конфигурация тестового компьютера:

- материнская плата Intel D815EFV;

- процессор Intel РЗ-550Е;

- видеокарта GeForce2 MX;

- звуковая плата EgoSys WaveTerminal 2496;

- сетевая карта Realtek 8029.

- Операционная система Win98SErus 4.10.2222А, DirectX 8.0а rus.

По умолчанию автоинсталлятор от Intel устанавливает все необходимые патчи и сам автоматически перезагружает компьютер в процессе по мере необходимости, что очень приятно (не нужно сидеть и всё время тупо нажимать кнопку Далее). Однако после всех установок в системе стоит SoundMAX версии 2, несмотря на то, что на компакте имеется дистрибутив последней версии драйверов - SoundMAX2. После корректного удаления второй версии ставим третью:

После перезагрузки в системном трее появляется синенькая эмблемка AnalogDevices.

После выбора верхнего пункта появляется панель управления многочисленными настройками SoundMAX2.0.

Настройка динамиков позволяет выбрать три варианта: наушники, рядом расположенные стереоколонки, разнесённые на некоторое расстояние стереоколонки. Звуковые среды - это выбор типа среды окружения. Доступно свыше десятка пресетов. Виртуальное пространственное звучание- функция создания виртуальных источников в наушниках или колонках. Клик на картинку переносит нас на сайт Sensaura в виртуальный магазин, где можно купить этот апгрейд (предназначенный только для SonudMAX2.0) или загрузить 21-дневную trial-версию.

3.2 Инструкция пользователю по работе с программой

Эта инструкция предназначена для программы zvuko_zapis, который наглядно показан в приложении В (стр. 23). Для начала, чтобы получить работоспособную программу надо её текст вставить в Турбо Паскаль и откомпилировать её и она (наша программа) сохранится там, где сохранён исходник программы. Далее у нас появится екзешник (т.е. файл с расширением .EXE) – это и есть наша программа. Теперь осталось её запустить. После запуска наша программа будет иметь такой вид:

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

18

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

Тут с её использованием всё просто. Если имеется микрофон, то можно сразу записывать звук нажав на кнопку «Запись», который выделен красным цветом. Кнопка «Start» предназначена для воспроизведения записанного звука. Кнопка «Stop» останавливает запись и подготавливает его для воспроизведения.

Записанный звук сохраняется под расширением .WAV. Кнопка «Входы» предназначен для приёма и показа звука с одного из входов. Звук показывается на рабочей области программы кривыми линиями. Кривые линии - это диапазон звука.

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

19

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

Заключение

Выполняя нашу курсовую работу, мы задались целью выяснить, какие есть способы программирование звука и видео и по возможности внести что-то свое. Выяснив, что на данный момент существует несколько способов программирование звука, мы решили написать программу звука на языке Турбо Паскаль.

В этой курсовой работе мы описали в основном 3 программы: speaker1, speaker2 и zvuko_zapis.

В основу разработанной программы звука на языке Турбо Паскаль заложена программа speaker1 предназначенная для генерации последовательности прямоугольных звуковых импульсов и его улучшенный вариант - программа speaker2. Учтено, что манипуляции с мышью не должно приводить к прерывистому звучанию динамика, и использовано вещественное значение частоты, а также программа zvuko_zapis, предназначенный для записи звука и приёма и показа звука с одного из входов.

Также рассмотрена работа DirectShow, для чего он предназначен и как он воспроизводит видео форматы.

Рассмотрев много языков программирования, которые позволяют осуществлять программирование звука и видео, мы остановили свой выбор на языке Турбо Паскаль.

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

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

20

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

Приложения

Приложение А

Текст программы speaker1

Листинг:

Programspeaker1;

Uses crt;

Const

Speaker_port = %61;

Var

Portval : byte;

Begin

Portval := port[speaker_port] and $FC;

While not KeyPressed do

begin

Port[speaker_port] := portval or 2;

Delay(5);

Port[speaker_port] := portval;

Delay(5);

End;

ReadKey;

End.

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

21

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

Приложение Б

Текст программы speaker2

Листинг :

Programspeaker2;

Uses crt;

Const

Speaker_port = $61;

Pit_control = $42;

Pit_channel_2 = $42;

Pit_freq = $1224dd;

Procedure sound (frequency : word);

Var

Counter : word;

Begin

Counter := pit_freq div frequency;

Port[pit_control] := $b6;

Port[pit_channel_2] := lo(counter);

Port[pit_channel_2] := hi(counter);

Port[speaker_port] := port[speaker_port] or 2;

End;

Procedure nosound;

Begin

Port[speaker_port] := port[speaker_port] and $fc;

End;

Begin

Sound(200);

Repeat until keypressed;

Nosound;

End.

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

22

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

Приложение В

Текст программы

Листинг:

unit zvuko_zapis;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, ComCtrls, MMSystem, Buttons;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Label1: TLabel;

Image1: TImage;

Button2: TButton;

Label2: TLabel;

BitBtn1: TBitBtn;

CheckBox1: TCheckBox;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

procedure Button2Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

private

{ Private declarations }

public

procedure OnWaveIn(var Msg: TMessage); message MM_WIM_DATA;

{ Public declarations }

end;

TData16 = array [0..127] of smallint;

PData16 = ^TData16;

tWaveFileHdr = packed record

riff: array[0..2] of Char;

len: DWord;

cWavFmt: array[0..7] of Char;

dwHdrLen: DWord;

wFormat: Word;

wNumChannels: Word;

dwSampleRate: DWord;

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

23

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

Продолжение Приложения В

dwBytesPerSec: DWord;

wBlockAlign: Word;

wBitsPerSample: Word;

cData: array[0..2] of Char;

dwDataLen: DWord;

end;

constBufSize=11000; { Размербуферана 1 сек}

var

Form1: TForm1;

implementation

var

WaveIn: hWaveIn;

hBuf: THandle;

BufHead: TWaveHdr;

m:array[1..bufSize] of smallInt;

h,w,h2:integer;

zs:boolean=false;//запущен звук

//Для записи в wav

rec:boolean=false; //идет запись

mz :array of smallInt;

waveHdr:tWaveFileHdr;

qz:integer; //записано звука;

{$R *.DFM}

PROCEDURE iniWav;

begin

WaveHdr.riff:='RIFF';

WaveHdr.cWavFmt:='WAVEfmt ';

WaveHdr.dwHdrLen:=16;

WaveHdr.wFormat:=1;

WaveHdr.wNumChannels:=1;

WaveHdr.dwSampleRate:=11000;

WaveHdr.wBlockAlign:=4;

WaveHdr.dwBytesPerSec:=22000;

WaveHdr.wBitsPerSample:=16;

WaveHdr.cData:='data';

WaveHdr.dwDataLen:=qz*2;

end;

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

24

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

ПродолжениеПриложенияВ

procedure TForm1.Button1Click(Sender: TObject);

var

header: TWaveFormatEx;

BufLen: word;

buf: pointer;

begin

if zs then exit;

with header do begin

wFormatTag := WAVE_FORMAT_PCM;

nChannels := 1; // количество каналов

nSamplesPerSec := 11000;// частота

wBitsPerSample := 16; // бит на отсчет

nBlockAlign := nChannels * (wBitsPerSample div 8);

nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;

cbSize := 0;

end;

WaveInOpen(Addr(WaveIn), WAVE_MAPPER, addr(header),Form1.Handle, 0, CALLBACK_WINDOW);

BufLen := header.nBlockAlign * BufSize;

hBuf := GlobalAlloc(GMEM_MOVEABLE and GMEM_SHARE, BufLen);

Buf := GlobalLock(hBuf);

with BufHead do begin

lpData := Buf;

dwBufferLength := BufLen;

dwFlags := WHDR_BEGINLOOP;

end;

WaveInPrepareHeader(WaveIn, Addr(BufHead), sizeof(BufHead));

WaveInAddBuffer(WaveIn, addr(BufHead), sizeof(BufHead));

zs:=true;

WaveInStart(WaveIn);

End;

procedure TForm1.Button2Click(Sender: TObject);

begin

if not zs then Exit;

WaveInReset(WaveIn);

WaveInUnPrepareHeader(WaveIn, addr(BufHead), sizeof(BufHead));

WaveInClose(WaveIn);

GlobalUnlock(hBuf);

GlobalFree(hBuf);

zs:=false;

end;

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

25

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

Продолжение Приложения В

procedureTForm1.OnWaveIn;

var

data16: PData16;

i,d,z,s,x,y,xx,max,s0: integer;

begin

//сразу пустим запись дальше чтоб не прерывалась