if DirectSound.SetCooperativeLevel(Handle, DSSCL_NORMAL) <> DS_OK then Raise Exception.Create('Unable to set Cooperative Level');
end;
procedure TForm1.AppCreateWriteSecondary3DBuffer;
var
BufferDesc : DSBUFFERDESC;
Caps : DSBCaps;
PCM : TWaveFormatEx;
begin
FillChar(BufferDesc, SizeOf(DSBUFFERDESC), 0);
FillChar(PCM, SizeOf(TWaveFormatEx), 0);
with BufferDesc do begin
PCM.wFormatTag:=WAVE_FORMAT_PCM;
if isStereo then PCM.nChannels:=2
else PCM.nChannels:=1;
PCM.nSamplesPerSec:=SamplesPerSec;
PCM.nBlockAlign:=(Bits div 8)*PCM.nChannels;
PCM.nAvgBytesPerSec:=PCM.nSamplesPerSec * PCM.nBlockAlign;
PCM.wBitsPerSample:=Bits;
PCM.cbSize:=0;
dwSize:=SizeOf(DSBUFFERDESC);
dwFlags:=DSBCAPS_STATIC or DSBCAPS_CTRL3D;
dwBufferBytes:=Time*PCM.nAvgBytesPerSec;
lpwfxFormat: [email protected];
end;
if DirectSound.CreateSoundBuffer(BufferDesc, Buffer, nil) <> DS_OK then Raise Exception.Create('Create Sound Buffer failed');
end;
procedure TForm1.AppWriteDataToBuffer;
var
AudioPtr1, AudioPtr2: Pointer;
AudioBytes1, AudioBytes2: DWord;
h: HResult;
Temp: Pointer;
begin
H:=Buffer.Lock(OffSet, SoundBytes, AudioPtr1, AudioBytes1, AudioPtr2, AudioBytes2, 0);
if H = DSERR_BUFFERLOST then begin
Buffer.Restore;
if Buffer.Lock(OffSet, SoundBytes, AudioPtr1, AudioBytes1, AudioPtr2, AudioBytes2, 0) <> DS_OK then Raise Exception.Create('Unable to Lock Sound Buffer');
end
else if H <> DS_OK then Raise Exception.Create('Unable to Lock Sound Buffer');
Temp: [email protected];
Move(Temp^, AudioPtr1^, AudioBytes1);
if AudioPtr2 <> nil then begin
Temp: [email protected];
Inc(Integer(Temp), AudioBytes1);
Move(Temp^, AudioPtr2^, AudioBytes2);
end;
if Buffer.UnLock(AudioPtr1, AudioBytes1, AudioPtr2, AudioBytes2) <> DS_OK then Raise Exception.Create('Unable to UnLock Sound Buffer');
end;
procedure TForm1.CopyWAVToBuffer;
var
Data : PChar;
FName : TFileStream;
DataSize : DWord;
Chunk : String[4];
Pos : Integer;
begin
FName:=TFileStream.Create(Name,fmOpenRead);
Pos:=24;
SetLength(Chunk,4);
repeat
FName.Seek(Pos, soFromBeginning);
FName.Read(Chunk[1], 4);
Inc(Pos);
until Chunk = 'data';
FName.Seek(Pos+3, soFromBeginning);
FName.Read(DataSize, SizeOf(DWord));
GetMem(Data, DataSize);
FName.Read(Data^, DataSize);
FName.Free;
AppWriteDataToBuffer(Buffer, 0, Data^, DataSize);
FreeMem(Data, DataSize);
end;
var Pos : Single = -25;
procedure TForm1.AppSetSecondary3DBuffer;
begin
if Buffer.QueryInterface(IID_IDirectSound3DBuffer, _3DBuffer) <> DS_OK then Raise Exception.Create('Failed to create IDirectSound3D object');
if _3DBuffer.SetPosition(Pos, 1, 1, 0) <> DS_OK then Raise Exception.Create('Failed to set IDirectSound3D Position');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CopyWAVToBuffer('xhe4.wav',SecondarySoundBuffer);
if SecondarySoundBuffer.Play(0, 0, DSBPLAY_LOOPING) <> DS_OK then ShowMessage('Can''t play the Sound');
Timer1.Enabled:=True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
SecondarySound3DBuffer.SetPosition(Pos,1,1,0);
Pos:=Pos + 0.1;
end;
end.
ΠΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅
CD-ROM
ΠΡΠΊΡΡΡΠΈΠ΅ ΠΈ Π·Π°ΠΊΡΡΡΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΎΠ² CD-ROM
Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ Π²ΠΎΠΏΡΠΎΡΠ° "ΠΡΠΊΡΡΡΠΈΠ΅ ΠΈ Π·Π°ΠΊΡΡΡΠΈΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄Π° CD-ROM", ΡΠΎ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ CD-ROMΠ° Π² ΡΠΈΡΡΠ΅ΠΌΠ΅, ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ:
// ____ _ ______ __
// / __ \_____(_) _____/_ __/___ ____ / /____
// / / / / ___/ / | / / _ \/ / / __ \/ __ \/ / ___/
// / /_/ / / / /| |/ / __/ / / /_/ / /_/ / (__ )
// /_____/_/ /_/ |___/\___/_/ \____/\____/_/____/
//
(*******************************************************************************
* DriveTools 1.0 *
* *
* (c) 1999 Jan Peter Stotz *
* *
********************************************************************************
* *
* If you find bugs, has ideas for missing featurs, feel free to contact me *
* [email protected] *
* *
********************************************************************************
* Date last modified: May 22, 1999 *
*******************************************************************************)
unit DriveTools;
interface
uses Windows, SysUtils, MMSystem;
function CloseCD(Drive: Char): Boolean;
function OpenCD(Drive: Char): Boolean;
implementation
function OpenCD(Drive : Char): Boolean;
Var
Res: MciError;
OpenParm: TMCI_Open_Parms;
Flags: DWord;
S: String;
DeviceID: Word;
begin
Result:=false;
S:=Drive+':';
Flags:=mci_Open_Type or mci_Open_Element;
With OpenParm do begin
dwCallback := 0;
lpstrDeviceType := 'CDAudio';
lpstrElementName := PChar(S);
end;
Res := mciSendCommand(0, mci_Open, Flags, Longint(@OpenParm));
IF Res<>0 Then exit;
DeviceID:=OpenParm.wDeviceID;
try
Res:=mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0);
IF Res=0 Then exit;
Result:=True;
finally
mciSendCommand(DeviceID, mci_Close, Flags, Longint(@OpenParm));
end;
end;
function CloseCD(Drive : Char) : Boolean;
Var
Res: MciError;
OpenParm: TMCI_Open_Parms;
Flags: DWord;
S: String;
DeviceID: Word;
begin
Result:=false;
S:=Drive+':';
Flags:=mci_Open_Type or mci_Open_Element;
With OpenParm do begin
dwCallback := 0;lpstrDeviceType := 'CDAudio';
lpstrElementName := PChar(S);
end;
Res:= mciSendCommand(0, mci_Open, Flags, Longint(@OpenParm));
IF Res<>0 Then exit;
DeviceID:=OpenParm.wDeviceID;
try
Res:=mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0);
IF Res=0 Then exit;
Result:=True;
finally
mciSendCommand(DeviceID, mci_Close, Flags, Longint(@OpenParm));
end;
end;
end.
ΠΡΠΈΡΠ»Π°Π» Vadim Petrov.
ΠΠ»Π°Π²ΠΈΠ°ΡΡΡΠ°
ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ
ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ·ΡΠΊΠΎΠ² ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΠ»Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ·ΡΠΊΠ° ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π²ΡΠ·ΠΎΠ² LoadKeyboardLayout:
var russian, latin: HKL;
russian:=LoadKeyboardLayout('00000419', 0);
latin:=LoadKeyboardLayout('00000409', 0); Π³Π΄Π΅ ΡΠΎ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅
SetActiveKeyboardLayout(russian);
ΠΡΠΈΡΠ»Π°Π» Igor Nikolaev aKa The Sprite.
ΠΠ°ΠΊ ΠΎΡΠ»ΠΎΠ²ΠΈΡΡ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ GetAsyncKeyState(KeyCode)
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΊΠΎΠ΄Ρ ΠΊΠ»Π°Π²ΠΈΡ(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ A β 65).
GetAsyncKeyState Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π΅Π½ΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΅ΡΠ»ΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΅Π΅ Π²ΡΠ·ΠΎΠ²Π° Π½Π°ΠΆΠ°ΡΠ° ΡΠΊΠ°Π·Π°Π½Π°Ρ ΠΊΠ»Π°Π²ΠΈΡΠ°.
//----ΠΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡΠ»Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ Β«AΒ»
//ΠΡΠΎΡ ΠΊΠΎΠ΄ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π² ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ
//ΡΠ°ΠΉΠΌΠ΅ΡΠ° Ρ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΎΠΌ Β«1Β»
if getasynckeystate(65)<>0 then showmessage('A β pressed');
//----------
ΠΡΠΈΡΠ»Π°Π» Igor Nikolaev aKa The Sprite.
ΠΠ»Π°Π²ΠΈΡΠ° Ρ ΠΊΠΎΠ΄ΠΎΠΌ #0
Delphi 1
Π Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΠ½Π° ΡΠ»ΡΠΆΠΈΡ ΡΠ»Π°Π³ΠΎΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ, ΠΏΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΠ΄ #0 ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠΈ Π½Π°ΠΆΠ°ΡΠΎ Π½Π΅ Π±ΡΠ»ΠΎ. Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΡΠΌΡΠΌ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ), ΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄ΠΎΠΊ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠΆΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π» Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ, ΠΈ Key Π±ΡΠ» ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π² #0.