--- /dev/null
+unit WriteHeader;
+
+interface
+
+uses System.Classes;
+
+{$INCLUDE spWav}
+function waveHeaderWrite(fp: TFileStream; sizeOfData: integer; ch: SmallInt;
+ sampRate: Cardinal; sampBits: SmallInt): integer;
+
+implementation
+
+function waveHeaderWrite(fp: TFileStream; sizeOfData: integer; ch: SmallInt;
+ sampRate: Cardinal; sampBits: SmallInt): integer;
+var
+ bytes: SmallInt;
+ wrWavHdr: WrSWaveFileHeader;
+ s: tWaveFormatPCM;
+begin
+ wrWavHdr.hdrRiff := STR_RIFF;
+ wrWavHdr.sizeOfFile := sizeOfData + SizeOf(WrSWaveFileHeader) - 4;
+ wrWavHdr.hdrWave := STR_WAVE;
+ wrWavHdr.hdrFmt := STR_fmt;
+ wrWavHdr.sizeOfFmt := SizeOf(tWaveFormatPCM);
+ wrWavHdr.stWaveFormat := s;
+ s.formatTag := 1;
+ s.channels := ch;
+ s.sampleParSec := sampRate;
+ bytes := sampBits div 8;
+ s.bytesPerSec := bytes * ch * sampRate;
+ s.blockAlign := bytes * ch;
+ s.bytesPerSec := sampBits;
+ wrWavHdr.hdrData := STR_data;
+ wrWavHdr.sizeOfData := sizeOfData;
+ fp.WriteBuffer(wrWavHdr, SizeOf(WrSWaveFileHeader));
+ result:=fp.Position;
+end;
+
+end.
bitsPerSample: Word;
end;
+ WrSWaveFileHeader = record
+ hdrRiff: array [0..3] of AnsiChar;
+ sizeOfFile: Cardinal;
+ stWaveFormat: tWaveFormatPCM;
+ hdrWave: array [0..3] of AnsiChar;
+ hdrFmt: array [0..3] of AnsiChar;
+ sizeOfFmt: Cardinal;
+ hdrData: array [0..3] of AnsiChar;
+ sizeOfData: Cardinal;
+ end;
+
const
STR_RIFF = 'RIFF';
STR_WAVE = 'WAVE';
uses
System.Classes, System.SysUtils;
-{$INCLUDE spWave}
+{$INCLUDE spWav}
+
function readFmtChank(fp: TFileStream; waveFmtPcm: tWaveFormatPcm): integer;
function wavHdrRead(wavefile: PChar; var sampRate, sampBits: SmallInt;
var posOfData, sizeOfData: Cardinal): integer;
sizeOfData := chank.sizeOfFmtData;
Writeln('data\82Ì\92·\82³:', sizeOfData, '[bytes]');
posOfData := fp.Position;
- fp.Seek(sizeOfData - 4, soFromCurrent);
+ fp.Seek(sizeOfData - 4, soCurrent);
break;
end
else
{$R *.res}
uses
- System.SysUtils, System.Classes,
- wav in 'wav.pas';
+ System.SysUtils,
+ System.Classes,
+ wav in 'wav.pas',
+ WriteHeader in 'WriteHeader.pas';
-function dump8BitWav(fpIn: TFileStream; sizeOfData: SmallInt): integer;
+function effect8BitWav(fpIn, fpOut: TFileStream; sizeOfData: SmallInt): integer;
var
i: integer;
s: Single;
- c: array [0 .. 1] of ShortInt;
+ c: array [0 .. 1] of Word;
begin
result := 0;
i := 0;
begin
try
fpIn.ReadBuffer(c, SizeOf(c));
+ c[0] := 128;
+ fpOut.WriteBuffer(c, SizeOf(c));
except
result := -1;
break;
end;
- Writeln(c[0],',',c[1]);
+ Writeln(c[0], ',', c[1]);
inc(i);
end;
end;
-function dump16BitWav(fpIn: TFileStream; sizeOfData: SmallInt): integer;
+function effect16BitWav(fpIn, fpOut: TFileStream; sizeOfData: SmallInt)
+ : integer;
var
i: integer;
s: Single;
begin
try
fpIn.ReadBuffer(c, SizeOf(c));
+ c[0] := 0;
+ fpOut.WriteBuffer(c, SizeOf(c));
except
result := -1;
break;
end;
- Writeln(c[0],',',c[1]);
+ Writeln(c[0], ',', c[1]);
inc(i);
end;
end;
-function dumpDataSub(fpIn: TFileStream; posOfData, sizeOfData: integer;
- bytesPerSingleCh: SmallInt): SmallInt;
+function wavDataWrite(fpIn, fpOut: TFileStream; posOfData, sizeOfData: integer;
+ bytesPerSingleCh: SmallInt): integer;
begin
fpIn.Seek(posOfData, soFromCurrent);
if bytesPerSingleCh = 1 then
- result := dump8BitWav(fpIn, sizeOfData)
+ result := effect8BitWav(fpIn, fpOut, sizeOfData)
else
- result := dump16BitWav(fpIn, sizeOfData);
+ result := effect16BitWav(fpIn, fpOut, sizeOfData);
end;
-function dumpData(inFile: PChar; sampBits, posOfData, sizeOfData: SmallInt)
- : SmallInt;
+function wavWrite(inFile, outFile: PChar; sampRate: Cardinal; sampBits: Word;
+ posOfData, sizeOfData: integer): integer;
var
- bytesPerSingleCh: SmallInt;
- fpIn: TFileStream;
+ bytesPerSingleCh: Word;
+ fpIn, fpOut: TFileStream;
begin
- result := -1;
- bytesPerSingleCh := sampBits div 8;
- if FileExists(inFile) = false then
- begin
- Writeln('\83I\81[\83v\83\93\82Å\82«\82Ü\82¹\82ñ.');
- Exit;
- end;
- fpIn := TFileStream.Create(inFile, fmOpenRead);
try
- if dumpDataSub(fpIn, posOfData, sizeOfData, bytesPerSingleCh) <> 0 then
+ if FileExists(inFile) = true then
+ fpIn := TFileStream.Create(inFile, fmOpenRead)
+ else
begin
- Writeln('\83G\83\89\81[\94\90¶.');
+ result := -1;
+ Writeln(inFile, '\82ð\83I\81[\83v\83\93\82Å\82«\82Ü\82¹\82ñ');
+ Exit;
+ end;
+ fpOut := TFileStream.Create(outFile, fmCreate);
+ bytesPerSingleCh := sampBits div 8;
+ if waveHeaderWrite(fpOut, sizeOfData, bytesPerSingleCh, sampRate, sampBits)
+ = -1 then
+ begin
+ result := -1;
+ Writeln('\83w\83b\83_\82ð\8f\91\82«\8d\9e\82ß\82Ü\82¹\82ñ');
Exit;
end;
+ if wavDataWrite(fpIn, fpOut, posOfData, sizeOfData, bytesPerSingleCh) = -1
+ then
+ begin
+ result := -1;
+ Write('\83G\83\89\81[\94\90¶');
+ end;
finally
fpIn.Free;
+ fpOut.Free;
end;
- result := 0;
end;
var
begin
try
{ TODO -oUser -cConsole \83\81\83C\83\93 : \82±\82±\82É\83R\81[\83h\82ð\8bL\8fq\82µ\82Ä\82\82¾\82³\82¢ }
- if ParamCount <> 1 then
- begin
- Writeln('wav \83t\83@\83C\83\8b\82ð\83_\83\93\83v\82µ\82Ü\82·.'#13#10, '\88ø\90\94\82É <\93ü\97Í\83t\83@\83C\83\8b\96¼> \82ð\8ew\92è\82µ\82Ä\82\82¾\82³\82¢.'#13#10#13#10,
- '\97á : dumpWav in.wav');
- Exit;
- end;
wavHdrRead(PChar(ParamStr(1)), sampRate, sampBits, posOfData, sizeOfData);
- dumpData(PChar(ParamStr(1)), sampBits, posOfData, sizeOfData);
+ wavWrite(PChar(ParamStr(1)), PChar(ParamStr(2)), sampRate, sampBits,
+ posOfData, sizeOfData);
Writeln('\8a®\97¹');
except
on E: Exception do
<DCC_RemoteDebug>true</DCC_RemoteDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
+ <Debugger_RunParams>easy.wav effect.wav</Debugger_RunParams>
<DCC_RemoteDebug>false</DCC_RemoteDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win64)'!=''">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="wav.pas"/>
+ <DCCReference Include="WriteHeader.pas"/>
<BuildConfiguration Include="Release">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
<Transaction>2017/07/29 10:51:42.000.518,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2017/09/17 22:32:14.000.990,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\WebModuleUnit1.pas</Transaction>
<Transaction>2017/10/14 15:27:41.000.965,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\FormUnit1.pas</Transaction>
- <Transaction>2017/10/14 15:27:42.000.078,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
<Transaction>2017/10/14 15:27:42.000.160,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\WebModuleUnit1.pas</Transaction>
+ <Transaction>2017/10/14 15:27:42.000.078,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
<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: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.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.809,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerContainerUnit1.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:55:16.000.244,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.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.109,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.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 16:00:53.000.058,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerContainerUnit1.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.440,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\WebModuleUnit1.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:33:21.000.032,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.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: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/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 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/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>
</Transactions>
</BorlandProject>