interface
-uses System.Classes, spWav;
+uses System.Classes, System.SysUtils, spWav;
function waveHeaderWrite(fp: TFileStream; const sp: SpParam): integer;
+function wavWrite(inFile, outFile: PChar; const wHdr: WrSWaveFileHeader;
+ var sp: SpParam): integer;
implementation
+uses effect;
+
function waveHeaderWrite(fp: TFileStream; const sp: SpParam): integer;
var
bytes: Byte;
result := fp.Position;
end;
+function wavDataWrite(fpIn, fpOut: TFileStream; const sp: SpParam): integer;
+var
+ pInMem, pOutMem: TMemoryStream;
+begin
+ result := 0;
+ fpIn.Position := sp.sizeOfData;
+ pInMem := TMemoryStream.Create;
+ pOutMem := TMemoryStream.Create;
+ try
+ if pInMem.CopyFrom(fpIn, sp.sizeOfData) = -1 then
+ begin
+ result := -1;
+ Exit;
+ end;
+ if sp.bitsPerSample = 8 then
+ result := effect8BitWav(pInMem, pOutMem, sp)
+ else
+ result := effect16BitWav(pInMem, pOutMem, sp);
+ if fpOut.CopyFrom(pOutMem, sp.sizeOfData) = 0 then
+ begin
+ result := -1;
+ Writeln('\8f\91\82«\8d\9e\82Ý\8e¸\94s');
+ end;
+ finally
+ pInMem.Free;
+ pOutMem.Free;
+ end;
+end;
+
+function wavWrite(inFile, outFile: PChar; const wHdr: WrSWaveFileHeader;
+ var sp: SpParam): integer;
+var
+ fpIn, fpOut: TFileStream;
+begin
+ result := 0;
+ try
+ fpIn:=TFileStream.Create(inFile,fmOpenRead);
+ fpOut := TFileStream.Create(outFile, fmCreate);
+ fpOut.WriteBuffer(wHdr, SizeOf(WrSWaveFileHeader));
+ if wavDataWrite(fpIn, fpOut, sp) = -1 then
+ raise EWriteError.Create('');
+ except
+ on EFOpenError do
+ begin
+ Writeln(outFile, '\82ð\83I\81[\83v\83\93\82Å\82«\82Ü\82¹\82ñ');
+ result := -1;
+ end;
+ on EWriteError do
+ begin
+ Writeln('\83w\83b\83_\82ð\8f\91\82«\8d\9e\82ß\82Ü\82¹\82ñ');
+ result := -1;
+ end;
+ end;
+ fpIn.Free;
+ fpOut.Free;
+end;
+
end.
--- /dev/null
+unit effect;
+
+interface
+
+uses System.Classes, System.SysUtils, spWav;
+
+function effect8BitWav(InInMem, InOutMem: TMemoryStream; sp: SpParam): integer;
+function effect16BitWav(InInMem, InOutMem: TMemoryStream; sp: SpParam): integer;
+procedure usage;
+
+implementation
+
+function effect8BitWav(InInMem, InOutMem: TMemoryStream; sp: SpParam): integer;
+var
+ i, j: Integer;
+ pInMem, pOutMem: TBytes;
+begin
+ j:=sp.sizeOfData-2;
+ pInMem:=InInMem.Memory;
+ pOutMem:=InOutMem.Memory;
+ for i := 0 to sp.sizeOfData div 2 do
+ begin
+ pOutMem[2*i]:=pInMem[j];
+ pOutMem[2*i+1]:=pInMem[j+1];
+ dec(j,2);
+ end;
+end;
+
+function effect16BitWav(InInMem, InOutMem: TMemoryStream; sp: SpParam): integer;
+var
+ i, j, k: Integer;
+ pInMem, pOutMem: TBytes;
+begin
+ pInMem:=InInMem.Memory;
+ pOutMem:=InOutMem.Memory;
+ k:=sp.sizeOfData div 2;
+ while i < k do
+ begin
+ pOutMem[i]:=pInMem[j];
+ pOutMem[i+1]:=pInMem[j+1];
+ inc(i,2);
+ dec(j,2);
+ end;
+end;
+
+procedure usage;
+begin
+ Writeln('\82Ì\82±\82¬\82è\94g');
+ Writeln('\97á\81Feffect.wav 100 2000');
+end;
+
+end.
uses
System.SysUtils,
System.Classes,
- spWav in 'spWav.pas';
-
-function wavDataWrite(fpOut: TFileStream; const sp: SpParam): integer;
-var
- i: integer;
- s, tempsamplePerCycle, deltaAdd, curLevel: Single;
- curSampling, samplePerCycle: LongInt;
- c: array [0..1] of ShortInt;
-begin
- tempsamplePerCycle:=sp.samplePerSec*sp.cycleuSec div 1000000;
- samplePerCycle:=Trunc(tempsamplePerCycle);
- if samplePerCycle <= 0 then
- begin
- Writeln('\8eü\94g\90\94\82ª\8d\82\82·\82¬');
- result:=-1;
- Exit;
- end;
- deltaAdd:=65535/samplePerCycle;
- curLevel:=0;
- curSampling:=0;
- i:=0;
- s:=sp.sizeOfData/SizeOf(@c);
- while i < s do
- begin
- inc(i);
- c[0]:=ShortInt(Trunc(curLevel-32788));
- c[1]:=c[0];
- fpOut.WriteBuffer(c,SizeOf(@c));
- curLevel:=curLevel+deltaAdd;
- inc(curSampling);
- if curSampling > samplePerCycle then
- begin
- curLevel:=0;
- curSampling:=0;
- end;
- end;
-end;
-
-function wavWrite(outFile: PChar; const wHdr: WrSWaveFileHeader;
- var sp: SpParam): integer;
-var
- fpIn, fpOut: TFileStream;
-begin
- result := 0;
- try
- fpOut := TFileStream.Create(outFile, fmCreate);
- fpOut.WriteBuffer(wHdr, SizeOf(WrSWaveFileHeader));
- if wavDataWrite(fpOut, sp) = -1 then
- raise EWriteError.Create('');
- except
- on EFOpenError do
- begin
- Writeln(outFile, '\82ð\83I\81[\83v\83\93\82Å\82«\82Ü\82¹\82ñ');
- result := -1;
- end;
- on EWriteError do
- begin
- Writeln('\83w\83b\83_\82ð\8f\91\82«\8d\9e\82ß\82Ü\82¹\82ñ');
- result := -1;
- end;
- end;
- fpOut.Free;
-end;
-
-procedure usage;
-begin
- Writeln('\82Ì\82±\82¬\82è\94g');
- Writeln('\97á\81Feffect.wav 100 2000');
-end;
+ spWav in 'spWav.pas',
+ effect in 'effect.pas',
+ WriteHeader in 'WriteHeader.pas';
procedure setupHeader(var wHdr: WrSWaveFileHeader; var sp: SpParam);
var
usage;
Exit;
end;
- totalLength := StrToInt(ParamStr(2));
- sp.cycleuSec := StrToInt(ParamStr(3));
- sp.channels := WAV_STEREO;
- sp.samplePerSec := 44100;
- sp.bitsPerSample := 16;
- sp.sizeOfData := sp.bitsPerSample * sp.channels * sp.samplePerSec *
- totalLength div 8;
- setupHeader(hdrHeader, sp);
- if wavWrite(PChar(ParamStr(1)), hdrHeader, sp) = -1 then
+ if wavWrite(PChar(ParamStr(1)), PChar(ParamStr(2)), hdrHeader, sp) = -1 then
Exit;
Writeln('\8a®\97¹');
except
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="spWav.pas"/>
+ <DCCReference Include="effect.pas"/>
+ <DCCReference Include="WriteHeader.pas"/>
<BuildConfiguration Include="Release">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
<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.652,=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.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.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.037,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.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.244,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.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:23:22.000.440,=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: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:21.000.133,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerContainerUnit1.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.377,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\Unit1.pas</Transaction>
+ <Transaction>2018/05/13 21:58:48.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.282,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\WriteHeader.pas</Transaction>
</Transactions>
</BorlandProject>