implementation
function effect8BitWav(const sp: SpParam): integer;
-const
- j = 24;
-var
- i, a, b, pmin, pmax, temp_size, offset0, offset1, p, q: integer;
- k, m, ma, pitch, rate: Single;
- pMem, pCpy: array of SmallInt;
- r: array of Single;
- s: TMemoryStream;
begin
- result := 0;
- s := TMemoryStream.Create;
- try
- SetLength(pCpy, sp.sizeOfData);
- s.Write(sp.pWav^, sp.sizeOfData);
- s.Position := 0;
- s.Read(Pointer(pCpy)^, sp.sizeOfData);
- pMem := sp.pWav;
- temp_size := trunc(sp.samplePerSec * sp.bitsPerSample * sp.channels * 0.01);
- pmin := trunc(sp.samplePerSec * sp.bitsPerSample * sp.channels * 0.005);
- pmax := trunc(sp.samplePerSec * sp.bitsPerSample * sp.channels * 0.02);
- SetLength(r, pmax - pmin);
- offset0 := sp.posOfData;
- offset1 := sp.posOfData;
- rate := 0.66;
- while offset0 + pmax * 2 < sp.sizeOfData do
- begin
- ma := 0.0;
- p := pmin;
- for b := 0 to pmax - pmin - 1 do
- begin
- r[b] := 0.0;
- for a := sp.posOfData to sp.posOfData + temp_size do
- r[b] := r[b] + pCpy[a] * pCpy[a + b];
- if r[b] > ma then
- begin
- ma := r[b];
- p := b;
- end;
- end;
- for i := 0 to p - 1 do
- begin
- pMem[offset1 + i] := pCpy[offset0 + i];
- pMem[offset1 + i + p] := trunc(pCpy[offset0 + p + i] * (p - i) / p +
- pCpy[offset0 + i] * i / p);
- end;
- q := trunc(rate * p / Abs(1.0 - rate) + 0.5);
- for i := p to q - 1 do
- begin
- if offset0 + i >= sp.sizeOfData then
- break;
- pMem[offset1 + p + i] := pCpy[offset0 + i];
- end;
- inc(offset0, q);
- inc(offset1, p + q);
- end;
- pitch := 1.5;
- for i := sp.posOfData to sp.sizeOfData do
- begin
- m := pitch * i;
- q := trunc(m);
- for a := q - j div 2 to q + j div 2 do
- if (m >= sp.posOfData) and (m < sp.sizeOfData) then
- pMem[a] := trunc(pMem[a + 0] + pCpy[a + 0] * sinc(pi * (m - a)));
- end;
- except
- result := -1;
- end;
- Finalize(r);
- s.Free;
- Finalize(pCpy);
end;
function effect16BitWav(const sp: SpParam): integer;
m, ma, pitch, rate: Single;
pMem, pCpy: array of SmallInt;
r: array of Single;
- s: TMemoryStream;
begin
result := 0;
- s := TMemoryStream.Create;
try
- SetLength(pCpy, sp.sizeOfData);
- s.Write(sp.pWav^, sp.sizeOfData);
- s.Position := 0;
- s.Read(Pointer(pCpy)^, sp.sizeOfData);
pMem := sp.pWav;
temp_size := trunc(sp.samplePerSec * sp.bitsPerSample * sp.channels * 0.01);
pmin := trunc(sp.samplePerSec * sp.bitsPerSample * sp.channels * 0.005);
offset0 := sp.posOfData;
offset1 := sp.posOfData;
rate := 0.66;
+ SetLength(pCpy, sp.sizeOfData);
k := (sp.sizeOfData - sp.posOfData) div sp.channels;
for b := 0 to pmax - pmin - 1 do
begin
r[b] := 0.0;
for a := sp.posOfData to sp.posOfData + temp_size do
- r[b] := r[b] + pCpy[a] * pCpy[a + b];
+ r[b] := r[b] + pMem[a] * pMem[a + b];
if r[b] > ma then
begin
ma := r[b];
p := pmin;
for i := 0 to p do
begin
- pMem[offset1 + i] := pCpy[offset0 + i];
- pMem[offset1 + i + p] := trunc(pCpy[offset0 + p + i] * (p - i) / p +
- pCpy[offset0 + i] * i / p);
+ pCpy[offset1 + i] := pMem[offset0 + i];
+ pCpy[offset1 + i + p] := trunc(pMem[offset0 + p + i] * (p - i) / p +
+ pMem[offset0 + i] * i / p);
end;
q := trunc(rate * p / (1.0 - rate) + 0.5);
for i := p to q - 1 do
begin
if offset1 + i + p >= k then
break;
- pMem[offset1 + p + i] := pCpy[offset0 + i];
+ pCpy[offset1 + p + i] := pMem[offset0 + i];
end;
inc(offset0, q);
inc(offset1, p + q);
q := trunc(m);
for a := q - j div 2 to q + j div 2 do
if (a >= sp.posOfData) and (a < k) then
- pMem[i] := pMem[a] + pCpy[a] * trunc(sinc(pi * (m - a)))
+ pMem[i] := pCpy[a] + pMem[a] * trunc(sinc(pi * (m - a)))
else
pMem[i] := 0;
end;
end;
Finalize(pCpy);
Finalize(r);
- s.Free;
end;
function sinc(x: Single): Single;
<Transaction>2017/10/19 20:48:10.000.837,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
<Transaction>2017/10/19 20:48:11.000.893,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerContainerUnit1.pas</Transaction>
<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.125,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.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.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.365,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.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/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.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/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.032,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.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>2017/11/01 18:33:39.000.795,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\WebModuleUnit1.pas</Transaction>
<Transaction>2017/11/01 19:08:03.000.193,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\WebModuleUnit1.pas</Transaction>
<Transaction>2017/11/30 19:11:41.000.772,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.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>