uses System.Classes;
{$INCLUDE spWav}
-function waveHeaderWrite(fp: TFileStream; sizeOfData: LongInt; ch: Byte;
- sampRate: LongWord; sampBits: Byte): integer;
+function waveHeaderWrite(fp: TFileStream; sp: SpParam): integer;
implementation
-function waveHeaderWrite(fp: TFileStream; sizeOfData: LongInt; ch: Byte;
- sampRate: LongWord; sampBits: Byte): integer;
+function waveHeaderWrite(fp: TFileStream; sp: SpParam): integer;
var
bytes: Byte;
wrWavHdr: WrSWaveFileHeader;
s: tWaveFormatPCM;
begin
wrWavHdr.hdrRiff := STR_RIFF;
- wrWavHdr.sizeOfFile := sizeOfData + SizeOf(WrSWaveFileHeader) - 8;
+ wrWavHdr.sizeOfFile := sp.sizeOfData + SizeOf(WrSWaveFileHeader) - 8;
wrWavHdr.hdrWave := STR_WAVE;
wrWavHdr.hdrFmt := STR_fmt;
wrWavHdr.sizeOfFmt := SizeOf(tWaveFormatPCM);
s.formatTag := 1;
- s.channels := ch;
- s.sampleParSec := sampRate;
- bytes := sampBits div 8;
- s.bytesPerSec := bytes * ch * sampRate;
- s.blockAlign := bytes * ch;
- s.bitsPerSample := sampBits;
+ s.channels := sp.channels;
+ s.sampleParSec := sp.samplePerSec;
+ bytes := sp.bitsPerSample div 8;
+ s.bytesPerSec := bytes * sp.channels * sp.samplePerSec;
+ s.blockAlign := bytes * sp.channels;
+ s.bitsPerSample := sp.bitsPerSample;
wrWavHdr.stWaveFormat := s;
wrWavHdr.hdrData := STR_data;
- wrWavHdr.sizeOfData := sizeOfData;
+ wrWavHdr.sizeOfData := sp.sizeOfData;
fp.WriteBuffer(wrWavHdr, SizeOf(WrSWaveFileHeader));
result := fp.Position;
end;
sizeOfData: LongWord;
end;
+ SpParam = record
+ samplePerSec: LongWord;
+ bitsPerSample: Byte;
+ sizeOfData: LongWord;
+ channels: Byte;
+ bytesPerSec: LongWord;
+ posOfData: LongInt;
+ startpos, endpos: LongInt;
+ end;
+
const
STR_RIFF = 'RIFF';
STR_WAVE = 'WAVE';
{$INCLUDE spWav}
function readFmtChank(fp: TFileStream; out waveFmtPcm: tWaveFormatPcm): integer;
-function wavHdrRead(wavefile: PChar; var sampRate: LongWord; var sampBits: Byte;
- var posOfData, sizeOfData: LongInt): integer;
+function wavHdrRead(wavefile: PChar; var sp: SpParam): integer;
implementation
end;
end;
-function wavHdrRead(wavefile: PChar; var sampRate: LongWord; var sampBits: Byte;
- var posOfData, sizeOfData: LongInt): integer;
+function wavHdrRead(wavefile: PChar; var sp: SpParam): integer;
var
waveFileHeader: SWaveFileHeader;
waveFmtPcm: tWaveFormatPcm;
fp.Free;
Exit;
end;
- sampRate := waveFmtPcm.sampleParSec;
- sampBits := waveFmtPcm.bytesPerSec;
+ sp.samplePerSec := waveFmtPcm.sampleParSec;
+ sp.bytesPerSec := waveFmtPcm.bytesPerSec;
fp.Seek(fPos + len, soFromBeginning);
end
else if CompareStr(chank.hdrFmtData, STR_data) = 0 then
begin
- sizeOfData := chank.sizeOfFmtData;
- Writeln('data\82Ì\92·\82³:', sizeOfData, '[bytes]');
- posOfData := fp.Position;
+ sp.sizeOfData := chank.sizeOfFmtData;
+ Writeln('data\82Ì\92·\82³:', sp.sizeOfData, '[bytes]');
+ sp.posOfData := fp.Position;
fp.Seek(fPos + len, soFromBeginning);
break;
end
len := chank.sizeOfFmtData;
Writeln(chank.hdrFmtData, '\82Ì\92·\82³[bytes]', len);
fPos := fp.Position;
- fp.Seek(len,soFromCurrent);
+ fp.Seek(len, soFromCurrent);
end;
end;
fp.Free;
wav in 'wav.pas',
WriteHeader in 'WriteHeader.pas';
-function effect8BitWav(fpIn, fpOut: TFileStream; sizeOfData: LongInt): integer;
-var
- i, j: integer;
- s: Single;
- c: array [0 .. 1] of Byte;
- mix: Byte;
+function cut(fpIn, fpOut: TFileStream; sp: SpParam): integer;
begin
- result := 0;
- i := 0;
- s := sizeOfData / SizeOf(@c);
- while i < s do
- begin
- try
- fpIn.ReadBuffer(c, SizeOf(@c));
- j := (c[0] + c[1]) div 2;
- mix := j;
- fpOut.WriteBuffer(mix, SizeOf(@mix));
- except
- result := -1;
- break;
- end;
- inc(i);
- end;
+
end;
-function effect16BitWav(fpIn, fpOut: TFileStream; sizeOfData: LongInt): integer;
-var
- i, j: integer;
- s: Single;
- c: array [0 .. 1] of ShortInt;
- mix: ShortInt;
+function checkRange(var sp: SpParam): integer;
begin
result := 0;
- i := 0;
- s := sizeOfData / SizeOf(@c);
- while i < s do
+ if sp.startpos * sp.bytesPerSec > sp.sizeOfData then
begin
- try
- fpIn.ReadBuffer(c, SizeOf(@c));
- j := (c[0] + c[1]) div 2;
- mix := j;
- fpOut.WriteBuffer(mix, SizeOf(@mix));
- except
- result := -1;
- break;
- end;
- inc(i);
+ Writeln('\8aJ\8en\88Ê\92u\82ª\83t\83@\83C\83\8b\83T\83C\83Y\82ð\92´\82¦\82Ä\82¢\82Ü\82·');
+ result := -1;
+ end
+ else if (sp.endpos + 1) * sp.bytesPerSec > sp.sizeOfData then
+ begin
+ Writeln('\8fI\97¹\88Ê\92u\82ª\83t\83@\83C\83\8b\83T\83C\83Y\82ð\92´\82¦\82Ä\82¢\82Ü\82·');
+ Writeln('\8fI\97¹\82ð\83t\83@\83C\83\8b\82Ì\8dÅ\8cã\82É\92²\90®\82µ\82Ü\82µ\82½');
+ sp.endpos := (sp.sizeOfData div sp.bytesPerSec) - 1;
end;
end;
-function wavDataWrite(fpIn, fpOut: TFileStream; posOfData, sizeOfData: LongInt;
- bytesPerSingleCh: SmallInt): integer;
+function wavDataWrite(fpIn, fpOut: TFileStream; sp: SpParam): integer;
begin
- fpIn.Position := posOfData;
- fpOut.Position := posOfData;
- if bytesPerSingleCh = 1 then
- result := effect8BitWav(fpIn, fpOut, sizeOfData)
- else
- result := effect16BitWav(fpIn, fpOut, sizeOfData);
+ fpIn.Position := sp.posOfData;
+ // fpOut.Position := sp.posOfData;
+ result:=cut(fpIn,fpOut,sp);
end;
-function wavWrite(inFile, outFile: PChar; sampRate: LongWord; sampBits: Byte;
- posOfData, sizeOfData: LongInt): integer;
+function wavWrite(inFile, outFile: PChar; sp: SpParam): integer;
var
- bytesPerSingleCh: Word;
fpIn, fpOut: TFileStream;
begin
try
fpIn := TFileStream.Create(inFile, fmOpenRead);
fpOut := TFileStream.Create(outFile, fmCreate);
- bytesPerSingleCh := sampBits div 8;
- if waveHeaderWrite(fpOut, sizeOfData div 2, WAV_MONAURAL, sampRate, sampBits) <> 44 then
+ sp.sizeOfData := (sp.endpos - sp.startpos + 1) * sp.bytesPerSec;
+ if waveHeaderWrite(fpOut, sp) > 44 then
raise EWriteError.Create('\83w\83b\83_\82ð\8f\91\82«\8d\9e\82ß\82Ü\82¹\82ñ');
- if wavDataWrite(fpIn, fpOut, posOfData, sizeOfData, bytesPerSingleCh) = -1
- then
+ if wavDataWrite(fpIn, fpOut, sp) = -1 then
raise EWriteError.Create('\83G\83\89\81[\94\90¶');
except
on EFOpenError do
fpOut.Free;
end;
result := -1;
+ Exit;
end;
result := 0;
end;
var
- sampRate: LongWord;
- sampBits: Byte;
- posOfData, sizeOfData: LongInt;
+ sp: SpParam;
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¢ }
- wavHdrRead(PChar(ParamStr(1)), sampRate, sampBits, posOfData, sizeOfData);
- wavWrite(PChar(ParamStr(1)), PChar(ParamStr(2)), sampRate, sampBits,
- posOfData, sizeOfData);
+ sp.startpos := LongInt(ParamStr(3));
+ sp.endpos := LongInt(ParamStr(4));
+ if sp.startpos > sp.endpos then
+ begin
+ Writeln('\8aJ\8en\95b\82Í\8fI\97¹\95b\82ð\92´\82¦\82Ä\82Í\82È\82è\82Ü\82¹\82ñ');
+ Exit;
+ end;
+ if wavHdrRead(PChar(ParamStr(1)), sp) = -1 then
+ Exit;
+ if wavWrite(PChar(ParamStr(1)), PChar(ParamStr(2)), sp) = -1 then
+ Exit;
Writeln('\8a®\97¹');
except
on E: Exception do
<DCC_RemoteDebug>true</DCC_RemoteDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
- <Debugger_RunParams>toujyo.wav effect.wav</Debugger_RunParams>
+ <Debugger_RunParams>toujyo.wav effect.wav 5 10</Debugger_RunParams>
<DCC_RemoteDebug>false</DCC_RemoteDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win64)'!=''">
<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/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.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/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.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: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>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\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 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 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\Unit1.pas=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\spWave.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\Unit1.pas=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\WriteHeader.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>