Установка
В комплекте с материнской платой идут драйвера под 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) – это и есть наша программа. Теперь осталось её запустить. После запуска наша программа будет иметь такой вид:
18
Тут с её использованием всё просто. Если имеется микрофон, то можно сразу записывать звук нажав на кнопку «Запись», который выделен красным цветом. Кнопка «Start» предназначена для воспроизведения записанного звука. Кнопка «Stop» останавливает запись и подготавливает его для воспроизведения.
Записанный звук сохраняется под расширением .WAV. Кнопка «Входы» предназначен для приёма и показа звука с одного из входов. Звук показывается на рабочей области программы кривыми линиями. Кривые линии - это диапазон звука.
19
Заключение
Выполняя нашу курсовую работу, мы задались целью выяснить, какие есть способы программирование звука и видео и по возможности внести что-то свое. Выяснив, что на данный момент существует несколько способов программирование звука, мы решили написать программу звука на языке Турбо Паскаль.
В этой курсовой работе мы описали в основном 3 программы: speaker1, speaker2 и zvuko_zapis.
В основу разработанной программы звука на языке Турбо Паскаль заложена программа speaker1 предназначенная для генерации последовательности прямоугольных звуковых импульсов и его улучшенный вариант - программа speaker2. Учтено, что манипуляции с мышью не должно приводить к прерывистому звучанию динамика, и использовано вещественное значение частоты, а также программа zvuko_zapis, предназначенный для записи звука и приёма и показа звука с одного из входов.
Также рассмотрена работа DirectShow, для чего он предназначен и как он воспроизводит видео форматы.
Рассмотрев много языков программирования, которые позволяют осуществлять программирование звука и видео, мы остановили свой выбор на языке Турбо Паскаль.
Выполненное работа дает возможность использование программу, как преподавателям, так и студентам, для этого достаточно лишь установить данную программу на компьютер.
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.
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.
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;
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;
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;
25
Продолжение Приложения В
procedureTForm1.OnWaveIn;
var
data16: PData16;
i,d,z,s,x,y,xx,max,s0: integer;
begin
//сразу пустим запись дальше чтоб не прерывалась