![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
Пытаюсь написать программку. Использую в ней функции BlockSize, Terminated, а Delphi 7 утверждает что не знаит таких... Как кто думает в чем дело?
|
|
#2
|
||||
|
||||
|
скорее всего не подключены нужные модули в Uses
|
|
#3
|
||||
|
||||
|
Вот основной вопрос тогда: какие не подключены?
|
|
#4
|
||||
|
||||
|
дык,мы же не телепаты ... показывай код
|
|
#5
|
||||
|
||||
|
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MMSystem, ComCtrls , MPlayer, Menus, Buttons, ExtCtrls, Gauges, WinSock;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure CheckAudio(Sender: TObject);
procedure StructFormat;
procedure OpenDevice;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
WOutCaps: TWAVEOUTCAPS;
wfx: TWAVEFORMATEX;
hEvent: THandle;
hwo: HWAVEOUT;
si: TSYSTEMINFO;
wh: array[0..1] of TWAVEHDR;
Buf: array[0..1] of PChar;
CnlBuf: array[0..1] of PChar;
implementation
{$R *.dfm}
//проверяем наличие аудиоустройства
procedure TForm1.CheckAudio(Sender: TObject);
begin
FillChar(WOutCaps, SizeOf(TWAVEOUTCAPS), #0);
if MMSYSERR_NOERROR <> WaveOutGetDevCaps(0, @WOutCaps, SizeOf(TWAVEOUTCAPS)) then
begin
ShowMessage('Error');
Exit;
end;
end;
//заканчиваем проверять наличие аудиоустройства
//заполняем структуру формата
procedure TForm1.StructFormat;
begin
FillChar(wfx, Sizeof(TWAVEFORMATEX), #0);
with wfx do
begin
wFormatTag:= WAVE_FORMAT_PCM;
nChannels:= 2;
nSamplesPerSec:= 44100;
wBitsPerSample:= 16;
nBlockAlign:= wBitsPerSample div 8 * nChannels;
nAvgBytesPerSec:= nSamplesPerSec * nBlockAlign;
cbSize:=0;
end;
end;
//заканчиваем заполнять структуру формата
//открываем устройство
procedure TForm1.OpenDevice;
begin
hEvent := CreateEvent(nil, false, false, nil);
if WaveOutOpen(@hwo, 0, @wfx, hEvent, 0, CALLBACK_EVENT) <> MMSYSERR_NOERROR then
begin
GetSystemInfo(si);
buf[0]:= VirtualAlloc(nil, ( BlockSize * 4)+ si.dwPageSize-1) div si.dwPagesize * si.dwPageSize, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
buf[1]:= PChar(LongInt(Buf[1])+ BlockSize);
ChlBuf[0]:= PChar(LongInt(Buf[1]) + BlockSize);
ChlBuf[1]:= PChar(LongInt(CnlBuf[0]) + BlockSize div 2);
for I:= 0 to 1 do
begin
FillChar(wh[i], sizeof(TWAVEHDR), #0);
wh[i].lpData:= buf[i];
wh[i].dwBufferLength:= BlockSize;
waveOutPrepareHeader(hwo, @wh[i], sizeof(TWAVEHDR));
end;
Generator(CnlBuf[0], Typ[0], Freq[0], Lev[0], BlockSize div 2, tPred[0]);
Generator(CnlBuf[1], Typ[1], Freq[1], Lev[1], BlockSize div 2, tPred[1]);
Mix(buf[i], CnlBuf[0], CnlBuf[1], BlockSize div 2);
I:=0;
while not Terminated do
begin
waveOutWrite(hwo, @wh[i], sizeof(WAVEHDR));
WaitForSingleObject(hEvent, INFINITE);
I:=I xor 1;
Generator(CnlBuf[0], Typ[0], Freq[0], Lev[0], BlockSize div 2, tPred[0]);
Generator(CnlBuf[1], Typ[1], Freq[1], Lev[1], BlockSize div 2, tPred[1]);
Mix(buf[i], CnlBuf[0], CnlBuf[1], BlockSize div 2);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDevice;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
waveOutReset(hwo);
waveOutUnprepareHeader(hwo, @wh[0], sizeof(WAVEHDR));
waveOutUnprepareHeader(hwo, @wh[1], sizeof(WAVEHDR));
CloseHandle(hEvent);
end;
end.Нашел код. Решил воплотить в жизнь, а не работает. Всё что знал, всё подключил. |
|
#6
|
||||
|
||||
|
Код:
procedure TForm1.OpenDevice; var BlockSize:dword; ChlBuf :array of string; i:integer; Terminated :boolean; begin hEvent := CreateEvent(nil, false, false, nil); if WaveOutOpen(@hwo, 0, @wfx, hEvent, 0, CALLBACK_EVENT) <> MMSYSERR_NOERROR then begin GetSystemInfo(si); buf[0]:= VirtualAlloc(nil, ((BlockSize * 4)+ si.dwPageSize-1) div si.dwPagesize * si.dwPageSize, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE); buf[1]:= PChar(LongInt(Buf[1])+ BlockSize); ChlBuf[0]:= PChar(LongInt(Buf[1]) + BlockSize); ChlBuf[1]:= PChar(LongInt(CnlBuf[0]) + BlockSize div 2); for I:= 0 to 1 do begin FillChar(wh[i], sizeof(TWAVEHDR), #0); wh[i].lpData:= buf[i]; wh[i].dwBufferLength:= BlockSize; waveOutPrepareHeader(hwo, @wh[i], sizeof(TWAVEHDR)); end; // Generator(CnlBuf[0], Typ[0], Freq[0], Lev[0], BlockSize div 2, tPred[0]); // какая-то процедура // Generator(CnlBuf[1], Typ[1], Freq[1], Lev[1], BlockSize div 2, tPred[1]); // какая-то процедура // Mix(buf[i], CnlBuf[0], CnlBuf[1], BlockSize div 2); // какая-то процедура I:=0; while not Terminated do begin waveOutWrite(hwo, @wh[i], sizeof(WAVEHDR)); WaitForSingleObject(hEvent, INFINITE); I:=I xor 1; // Generator(CnlBuf[0], Typ[0], Freq[0], Lev[0], BlockSize div 2, tPred[0]); // какая-то процедура // Generator(CnlBuf[1], Typ[1], Freq[1], Lev[1], BlockSize div 2, tPred[1]); // какая-то процедура // Mix(buf[i], CnlBuf[0], CnlBuf[1], BlockSize div 2); // какая-то процедура end; end; end; Процедур: Generator и Mix нет в коде ... поэтому он их и не находит Последний раз редактировалось Yurk@, 19.09.2009 в 23:21. |