interface
-uses System.Classes, System.SysUtils, spWav;
+uses System.Classes, System.SysUtils, Math, spWav;
-function effect8BitWav(InInMem, InOutMem: TMemoryStream; sp: SpParam): integer;
-function effect16BitWav(InInMem, InOutMem: TMemoryStream; sp: SpParam): integer;
+function effect8BitWav(const sp: SpParam): integer;
+function effect16BitWav(const sp: SpParam): integer;
procedure usage;
function effectwav(const sp: SpParam): integer;
implementation
-function effect8BitWav(InInMem, InOutMem: TMemoryStream; sp: SpParam): integer;
+function effect8BitWav(const sp: SpParam): integer;
var
- i, j: integer;
- pInMem, pOutMem: TBytes;
+ i, delayStart: integer;
+ pMem, pCpy: array of Byte;
+ s: TMemoryStream;
+ L, R, DuetL, DuetR: SmallInt;
begin
- i := sp.posOfData div SizeOf(Byte);
- j := sp.sizeOfData div SizeOf(Byte) - 1;
- pInMem := InInMem.Memory;
- pOutMem := InOutMem.Memory;
- while i < j do
- begin
- pOutMem[i] := pInMem[j];
- pOutMem[i + 1] := pInMem[j + 1];
- inc(i, 2);
- dec(j, 2);
+ result := 0;
+ try
+ s := TMemoryStream.Create;
+ s.ReadBuffer(sp.pWav^, sp.sizeOfData);
+ pMem := sp.pWav;
+ pCpy := s.Memory;
+ delayStart := sp.samplePerSec * sp.cycleuSec;
+ for i := delayStart to sp.sizeOfData div (sp.bitsPerSample *
+ SizeOf(Byte)) do
+ begin
+ L := pMem[i + 0];
+ R := pMem[i + 1];
+ DuetL := pCpy[i + 0 - delayStart];
+ DuetR := pCpy[i + 1 - delayStart];
+ inc(L, DuetL);
+ inc(R, DuetR);
+ pMem[i+0]:=L;
+ pMem[i+1]:=R;
+ end;
+ except
+ result := -1;
end;
end;
-function effect16BitWav(InInMem, InOutMem: TMemoryStream; sp: SpParam): integer;
+function effect16BitWav(const sp: SpParam): integer;
var
- i, j: integer;
- pInMem, pOutMem: array of SmallInt;
+ i, delayStart: integer;
+ pMem, pCpy: array of SmallInt;
+ s: TMemoryStream;
+ L, R, DuetL, DuetR: SmallInt;
begin
- pInMem := InInMem.Memory;
- pOutMem := InOutMem.Memory;
- i := sp.posOfData div SizeOf(SmallInt);
- j := sp.sizeOfData div SizeOf(SmallInt) - 1;
- while i < j do
- begin
- pOutMem[i] := pInMem[j];
- pOutMem[i + 1] := pInMem[j + 1];
- inc(i, 2);
- dec(j, 2);
+ result := 0;
+ try
+ s := TMemoryStream.Create;
+ s.ReadBuffer(sp.pWav^, sp.sizeOfData);
+ pMem := sp.pWav;
+ pCpy := s.Memory;
+ delayStart := sp.samplePerSec * sp.cycleuSec;
+ for i := delayStart to sp.sizeOfData div (sp.bitsPerSample *
+ SizeOf(SmallInt)) do
+ begin
+ L := pMem[i + 0];
+ R := pMem[i + 1];
+ DuetL := pCpy[i + 0 - delayStart];
+ DuetR := pCpy[i + 1 - delayStart];
+ inc(L, DuetL);
+ inc(R, DuetR);
+ L := SmallInt(max(-32768, min(32767, L)));
+ R := SmallInt(max(-32768, min(32767, R)));
+ pMem[i + 0] := L;
+ pMem[i + 1] := R;
+ end;
+ except
+ result := -1;
end;
end;
if sp.channels = 1 then
begin
Writeln('\83X\83e\83\8c\83I\83t\83@\83C\83\8b\82É\82µ\82Ä\82\82¾\82³\82¢');
- result:=-1;
+ result := -1;
end;
if sp.bitsPerSample = 8 then
- result:=effect8bitWav(sp)
+ result := effect8BitWav(sp)
else
- result:=effect16bitWav(sp);
+ result := effect16BitWav(sp);
end;
end.
MMSystem,
spWav in 'spWav.pas',
wav in 'wav.pas',
- selectFile in 'selectFile.pas';
+ selectFile in 'selectFile.pas',
+ effect in 'effect.pas';
var
sp: SpParam;
pMem: TMemoryStream;
fileName: string;
- hdrHeader: WrSWaveFileHeader;
+
+function getPara(var sp: SpParam): integer;
+var
+ i: integer;
+begin
+ sp.pWav:=pMem.Memory;
+ Writeln('\82Q\8fd\8f¥\82Ì\8e\9e\8aÔ\8d·');
+ Readln(i);
+ sp.cyclicSec:=i;
+ result:=0;
+end;
begin
try
Exit;
if readWav(ParamStr(1), pMem) = false then
Exit;
- PlaySound(pMem.Memory, 0, SND_ASYNC or SND_NODEFAULT or SND_MEMORY);
- Readln;
- PlaySound(nil, 0, SND_PURGE);
+ if getPara(sp) = -1 then
+ begin
+ pMem.Free;
+ Exit;
+ end;
+ if effectWav(sp) = 0 then
+ begin
+ PlaySound(pMem.Memory, 0, SND_ASYNC or SND_NODEFAULT or SND_MEMORY);
+ Readln;
+ PlaySound(nil, 0, SND_PURGE);
+ end;
pMem.Free;
+ Finalize(sp.pWav);
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
<Transaction>2017/10/19 20:49:15.000.988,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2017/10/19 20:49:16.000.218,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerContainerUnit1.pas</Transaction>
<Transaction>2017/10/19 20:49:16.000.125,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
- <Transaction>2017/10/19 20:49:45.000.816,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
<Transaction>2017/10/19 20:49:45.000.913,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerContainerUnit1.pas</Transaction>
+ <Transaction>2017/10/19 20:49:45.000.816,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
<Transaction>2017/10/19 20:50:18.000.999,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
<Transaction>2017/10/19 20:50:19.000.049,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerContainerUnit1.pas</Transaction>
+ <Transaction>2017/10/19 21:37:00.000.271,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2017/10/19 21:37:00.000.652,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerContainerUnit1.pas</Transaction>
<Transaction>2017/10/19 21:37:00.000.365,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
- <Transaction>2017/10/19 21:37:00.000.271,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2017/10/28 22:58:31.000.296,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2017/10/29 14:44:00.000.024,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
- <Transaction>2017/10/29 16:13:37.000.174,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
<Transaction>2017/10/29 16:13:37.000.037,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
+ <Transaction>2017/10/29 16:13:37.000.174,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
<Transaction>2017/10/29 16:13:37.000.809,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerContainerUnit1.pas</Transaction>
- <Transaction>2017/10/29 16:55:16.000.343,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerContainerUnit1.pas</Transaction>
<Transaction>2017/10/29 16:55:16.000.109,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
+ <Transaction>2017/10/29 16:55:16.000.343,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerContainerUnit1.pas</Transaction>
<Transaction>2017/10/29 16:55:16.000.244,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
<Transaction>2017/10/30 15:04:38.000.106,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\WebModuleUnit1.pas</Transaction>
<Transaction>2017/11/01 16:00:52.000.956,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
<Transaction>2017/11/01 18:12:24.000.771,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\WebModuleUnit1.pas</Transaction>
<Transaction>2017/11/01 18:21:25.000.947,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
<Transaction>2017/11/01 18:21:26.000.254,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\WebModuleUnit1.pas</Transaction>
- <Transaction>2017/11/01 18:23:22.000.193,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\FormUnit1.pas</Transaction>
<Transaction>2017/11/01 18:23:22.000.344,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
+ <Transaction>2017/11/01 18:23:22.000.193,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\FormUnit1.pas</Transaction>
<Transaction>2017/11/01 18:23:22.000.440,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\WebModuleUnit1.pas</Transaction>
<Transaction>2017/11/01 18:33:21.000.133,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerContainerUnit1.pas</Transaction>
<Transaction>2017/11/01 18:33:21.000.032,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
<Transaction>2018/01/01 12:40:34.000.125,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2018/01/01 12:40:55.000.044,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2018/05/07 18:00:45.000.726,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
- <Transaction>2018/05/07 18:01:10.000.795,C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.pas=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\wav.pas</Transaction>
- <Transaction>2018/05/07 18:01:39.000.274,C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Project1.dproj=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\wav_proj.dproj</Transaction>
+ <Transaction>2018/05/07 18:01:10.000.795,C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\wav.pas=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
+ <Transaction>2018/05/07 18:01:39.000.274,C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\wav_proj.dproj=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Project1.dproj</Transaction>
<Transaction>2018/05/07 21:20:21.000.796,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\Unit1.pas</Transaction>
- <Transaction>2018/05/07 21:20:27.000.646,C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\spWave.pas=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\Unit1.pas</Transaction>
+ <Transaction>2018/05/07 21:20:27.000.646,C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\Unit1.pas=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\spWave.pas</Transaction>
<Transaction>2018/05/09 21:56:39.000.226,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\Unit1.pas</Transaction>
- <Transaction>2018/05/09 21:56:54.000.027,C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\WriteHeader.pas=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\Unit1.pas</Transaction>
+ <Transaction>2018/05/09 21:56:54.000.027,C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\Unit1.pas=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\WriteHeader.pas</Transaction>
<Transaction>2018/05/13 12:45:57.000.431,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\spWav.pas</Transaction>
<Transaction>2018/05/13 21:58:37.000.377,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\Unit1.pas</Transaction>
- <Transaction>2018/05/13 21:58:48.000.578,C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\Unit1.pas=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\effect.pas</Transaction>
+ <Transaction>2018/05/13 21:58:48.000.578,C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\effect.pas=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\Unit1.pas</Transaction>
<Transaction>2018/05/13 22:29:03.000.282,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\WriteHeader.pas</Transaction>
<Transaction>2018/05/13 22:46:16.000.228,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\wav.pas</Transaction>
<Transaction>2018/05/14 20:20:05.000.202,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\selectFile.pas</Transaction>
+ <Transaction>2018/05/14 21:42:27.000.589,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\effect.pas</Transaction>
</Transactions>
</BorlandProject>