AKhirnya selama 1 bulanan lebih aku ngerjain listing....buat write WAV lagi..
Alhamdullilah dah bisa walaupun agak dikit berbeda,,,kaya ada pengurangan kualitas suara gitu..
ni codenya...
Procedure SaveWaveToStream(Stream : TStream);
var
waveformatex : TWaveFormatEx;
Datacount, riffcount, tempInt, i : integer;
DataLength : integer;
Data : Array of SmallInt;
const
Mono : Word = $0001;
SampleRate : integer = 22050; // 8000, 11025, 22050, or 44100
RiffId : String = 'RIFF';
WaveId : String = 'WAVE';
FmtId : String = 'fmt ';
DataId : String = 'data';
begin
with WaveFormatEx do
begin
wFormatTag := WAVE_FORMAT_PCM;
nChannels := Mono;
nSamplesPerSec := SampleRate;
wBitsPerSample := 16 ;
nBlockAlign := (nChannels * wBitsPerSample) div 8;
nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;
cbSize := 0;
end;
SetLength(Data, Length(hasil_inversedct1));
for i := 0 to Length(hasil_inversedct1) - 1 do
begin
application.ProcessMessages;
Data[i] := Round(hasil_inversedct1[i]);
end;
DataCount := Length(Data)* SizeOf(SmallInt);
DataLength:= Length(Data); // datacount div WaveFormatEx.nChannels div WaveFormatex.wBitsPerSample;
RiffCount := Length(WaveId) + Length(FmtId) + SizeOf(DWORD) +
SizeOf(TWaveFormatEx) + Length(DataId) + SizeOf(DWORD) + DataCount;
{ Tulis Wave Header }
Stream.WriteBuffer(RiffId[1], 4); // 'RIFF'
Stream.WriteBuffer(RiffCount, SizeOf(DWORD)); // File Data Size
Stream.WriteBuffer(WaveId[1],Length(WaveId)); // 'WAVE'
Stream.WriteBuffer(FmtId[1],Length(FmtId)); // 'Fmt '
TempInt := SizeOf(TWaveFormatEx); // ukuran panjang byte untuk format PCM (16 byte)
Stream.WriteBuffer(TempInt, 4); // TWeveFormat Data Size
Stream.WriteBuffer(WaveFormatEx, SizeOf(TWaveFormatEx)); // WaveFormatex Record
Stream.WriteBuffer(DataId[1], Length(DataId)); // 'data'
Stream.WriteBuffer(DataLength, 4); // data size
Stream.WriteBuffer(Data[0], Length(Data) * SizeOf(SmallInt)); // sample data
end;
procedure TForm1.Button8Click(Sender: TObject);
var
FileStream : TFileStream;
begin
edit4.Clear;
FileStream := TFileStream.Create('c:\Write.wav',fmCreate);
try
FileStream.CopyFrom(FileStream,0);
SaveWaveToStream(FileStream);
finally
FileStream.Free;
edit4.Text := 'Selesai Simpan wav';
end;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
SndPlaySound('C:\Write.wav', SND_LOOP );
end;
Minggu, 09 Desember 2007
write wav buat skripsiku
Diposting oleh
NURSYAFRIADY
di
20.08
Langganan:
Posting Komentar (Atom)
0 komentar:
Posting Komentar