Arsip: bagaimana cara Save Wav

more 13 years ago
alevan
Para Master tolong bantu saya,....
saya sedang mengerjakan skripsi tentang Kriptografi dengan data yang diolah adalah Wav,
masalahnya sesudah data wav saya olah saya ingin menyimpannya kembali dalam bentuk wav. bagaimana caranya, saya punya headernya dan data hasil olahnya, kalau bisa saya diberi source code, deadline dah mepet,. saya sudah googleing tapi ref terlalu sedikit. mohon bantuannya

more 13 years ago
jrp
Saat anda membuka file Wav tersebut, menggunakan cara apa? Pada saat proses menggunakan struktur data apa? Sayang anda tidak menjelaskan secara spesifik bagaimana proses pembacaan dan pengolahan berlangsung, sehingga anda bingung menyimpannya kembali.
Kalau saat membuka file anda menggunakan stream, maka menyimpannya kembali juga dengan stream.
jrp

more 13 years ago
heriy4nt0
@alevan: Wah sepi banget,..... ada yang mau tolong saya,....Perllihatkan code program yang telah anda tulis untuk membuka file wav, saya pingin tahu dengan cara apa anda membukanya (menggunakan perintah mci.. atau mmio.., dengan begitu moga2 sy bisa bantu.

more 13 years ago
alevan
type
TwaveHeader = packed record
Marker_RIFF : array of char;
chunkSize : cardinal;
Marker_WAVE : array of char;
Marker_fmt : array of char;
SubChunkSize: cardinal;
{
Audio Format see mmsystem.pas
1 : WAVE_FORMAT_PCM
}
FormatTag: word;
{ nChannels : 1 jika mono, 2 jika stereo }
NumChannels : word;
SampleRate : longint;
BytesPerSecond: longint;
BytesPerSample: word;
BitsPerSample : word;
{ Harus bernilai 'data' }
Marker_data : array of char;
{ Jumlah seluruh sampel dalam byte }
DataBytes : longint;
end;
TChannel = record
{
tiap sample dinyatakan sebagai signed integer
berukuran 16-bit (2 byte).
tipe data ini pada delphi adalah smallint
yang memiliki nilai dalam jangkauan -32767..32768
}
Data : array of smallint;
end;
Procedure TForm_Utama.LoadFromStream(Stream: TStream);
var
x : Integer;
tmpstr : string;
i : integer;
begin
FillChar(wavehdr, sizeof(wavehdr), 0);
Stream.Read(wavehdr, sizeof(wavehdr));
{ Log Header data }
with memo1.Lines
do begin
Add('Header size : '+inttostr(sizeof(wavehdr)));
tmpstr := wavehdr.Marker_RIFF;
Add('RIFF ID : '+tmpstr+''' ');
Add('Chunk size : '+inttostr(wavehdr.ChunkSize));
tmpstr := wavehdr.Marker_WAVE;
Add('WAVE ID : '+tmpstr+''' ');
tmpstr := wavehdr.Marker_fmt;
Add('''fmt '' ID : '+tmpstr+''' ');
Add('SubChunk size : '+inttostr(wavehdr.SubChunkSize));
Add('Format : '+inttostr(wavehdr.FormatTag));
Add('Num Channels : '+inttostr(wavehdr.NumChannels));
Add('Sample rate : '+inttostr(wavehdr.SampleRate));
Add('Bytes per second : '+inttostr(wavehdr.BytesPerSecond));
Add('bits per sample : '+inttostr(wavehdr.BitsPerSample));
Add('Data Length : '+inttostr(wavehdr.DataBytes));
end;
numsamples := (wavehdr.DataBytes div wavehdr.NumChannels) div wavehdr.BytesPerSample;
case wavehdr.NumChannels of
1:begin
SetLength(wavedata[0].Data, numsamples);
Stream.Read(wavedata[0].Data[0], numsamples);
StringGrid1.Cells[0,0] := 'Data';
stringgrid1.ColCount := 1;
For i := 0 to high(wavedata[0].Data)
Do Begin
StringGrid1.RowCount:= StringGrid1.RowCount+1;
StringGrid1.Cells[0,i+1]:= inttostr(wavedata[0].Data[i]);
End;
end;
2:begin
SetLength(wavedata[0].Data, numsamples);
SetLength(wavedata[1].Data, numsamples);
StringGrid1.Cells[0,0] := 'Left';
StringGrid1.Cells[1,0] := 'Right';
for i := 0 to high(wavedata[0].Data)
do begin
StringGrid1.RowCount:= StringGrid1.RowCount+1;
Stream.Read(wavedata[0].Data[i], 2);
Stream.Read(wavedata[1].Data[i], 2);
StringGrid1.Cells[0,i+1]:= inttostr(wavedata[0].Data[i]);
StringGrid1.Cells[1,i+1]:= inttostr(wavedata[1].Data[i]);
end;
end;
end;
End;
saya buka datanya seperti ini,,.............
setelah itu saya simpan dengan cara di bawah ini(saya temukan dengan googling)
procedure TForm5.Button2Click(Sender: TObject);
var
Datawav : Array Of smallInt;
temp : string;
i : longint;
RecStream : TFileStream;
nChannels : Word; { number of channels (i.e. mono, stereo, etc.) }
nSamplesPerSec : DWORD; { sample rate }
nAvgBytesPerSec : DWORD; { transfer rata-rata per detik }
nBlockAlign : Word;
wBitsPerSample : Word; { number of bits per sample of mono data }
begin
If Form_utama.Wavehdr.NumChannels = 1
Then Begin
SetLength(Datawav, (StringGrid2.RowCount-1));
for i := 0 to (StringGrid2.RowCount-1)-1 do
begin
Datawav[i] := StrToInt(StringGrid2.Cells[1,i+1]);
end;
End
Else Begin
SetLength(Datawav, ((StringGrid2.RowCount-1))2);
for i := 0 to ((StringGrid2.RowCount-1) 2)-1 do
begin
If (i mod 2 <> 0)
Then Datawav[i] := StrToInt(StringGrid2.Cells[1,i+1])
Else Datawav[i] := StrToInt(StringGrid2.Cells[2,i+1]);
end;
End;
nChannels := Form_utama.Wavehdr.NumChannels;
wBitsPerSample := Form_utama.Wavehdr.BitsPerSample;
nBlockAlign := nChannels wBitsPerSample div 8;
nSamplesPerSec := Form_utama.Wavehdr.SampleRate;
nAvgBytesPerSec := nSamplesPerSec nBlockAlign;
RecStream := TFileStream.Create('Hasil Kripto2.wav',fmCreate);
{ Write header portion of wave file }
temp := 'RIFF';
RecStream.write(temp[1], length(temp));
temp :=#0#0#0#0;
RecStream.write(temp[1], length(temp)); { File size: to be updated }
temp := 'WAVE';
RecStream.write(temp[1], length(temp));
temp := 'fmt ';
RecStream.write(temp[1], length(temp));
temp :=#$10#0#0#0;
RecStream.write(temp[1], length(temp)); { Fixed }
temp :=#1#0;
RecStream.write(temp[1], length(temp)); { PCM format }
if nChannels = 1 then
temp :=#1#0
else
temp :=#2#0;
RecStream.write(temp[1], length(temp));
RecStream.write(nSamplesPerSec, 2);
temp :=#0#0;
RecStream.write(temp[1], length(temp)); { SampleRate is given as dWord }
RecStream.write(nAvgBytesPerSec, 4);
RecStream.write(nBlockAlign, 2);
RecStream.write(wBitsPerSample, 2);
temp := 'data';
RecStream.write(temp[1],length(temp));
temp :=#0#0#0#0;
RecStream.write(temp[1],length(temp)); { Data size: to be updated }
RecStream.Write(Datawav[0], Length(Datawav) * SizeOf(SmallInt));
{complete WAV header Rewrite some fields of header }
i := RecStream.Size - 8; { size of file }
RecStream.Position := 4;
RecStream.write(i,4);
i := i - $24; { size of data }
RecStream.Position := 40;
RecStream.write(i,4);
RecStream.Free;
end;
memang tersimpan dalam bentuk wav dan dapat di play, tapi ketika dibuka dengan metode yang sama datanya berubah, saya sangat butuh bantuannya,.....

more 13 years ago
jrp
Kalau melihat kodenya (maaf saya tidak menjalankan kodenya karena tidak bisa langsung copas & run), hal berikut ini dapat disarankan:
Jika kripto yang anda lakukan sama sekali tidak mengubah panjang data WAV, maka pertahankan header yang anda dapatkan pada saat membaca (jangan diubah sedikitpun), dan tuliskan kembali header itu apa adanya pada saat menyimpan WAV olahan.
Soalnya, saya lihat di kode anda ada yg seperti ini:
temp :=#0#0;
RecStream.write(temp[1], length(temp)); { SampleRate is given as dWord }
Terus terang saya tidak tahu mengenai format WAV, tapi rasanya ragu... apa boleh sample rate sebuah WAV diisi dengan 2 buah karakter#0?
Jika dalam proses kripto anda mengubah panjang WAV (saya rasa format, channel, dsb kemungkinan besar tidak berubah), maka ubahlah bagian header yg berhubungan dengan hal itu saja/seperlunya. Lebih baik jangan utak-atik bagian lain dari header.
jrp

more 13 years ago
heriy4nt0
memang tersimpan dalam bentuk wav dan dapat di play, tapi ketika dibuka dengan metode yang sama datanya berubah, saya sangat butuh bantuannya,.....Saya tidak tahu kripto yang anda gunakan, hanya jika itu merubah panjang data wav - maka anda harus mendefenisikan ulang panjang data pada header wav tersebut. Ada referensi bagus saya link-kan disini : http://www.codeproject.com/KB/cs/WAVE_Processor_In_CSharp.aspx http://www.codeproject.com/KB/audio-video/Concatenation_Wave_Files.aspx http://www.sonicspot.com/guide/wavefiles.html Anda harus membacanya jika skripsi anda mengenai ini, kode program memang dalam C#, namun karena anda sudah memperlihatkan kode program anda disini, saya berikan konversi ke delphi2009 merge 2 wav file. http://www.mediafire.com/file/24xr1rj2za0ggfj/Projects.rar Semoga skripsi anda dapat selesai tepat waktu.

more 13 years ago
heriy4nt0
Yang saya maksud merubah panjang data -- dibagian header wav ada parameter penyimpan panjang data. Jadi bukan merubah panjang header wav, namun merubah parameternya.

more 13 years ago
alevan
Maaf saya masih bingung cara menghitung panjang data pada headernya,.........
dan saya menggunakan delphi 7 jadi ada beberapa komponen yang ga ada,.............
more ...
- Pages:
- 1
reply |
Report Obsolete
AI Forward

🚀 We're thrilled to partner with Alibaba Cloud for "AI Forward - Alibaba Cloud Global Developer Summit 2025" in Jakarta! Join us and explore the future of AI. Register now:
https://int.alibabacloud.com/m/1000400772/
#AlibabaCloud #DeveloperSummit #Jakarta #AIFORWARD
Last Articles
Last Topic
- PascalTalk #6: (Podcast) Kuliah IT di luar negeri, susah gak sih?
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #5: UX: Research, Design and Engineer
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #4: Obrolan Ringan Seputar IT
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #2: Membuat Sendiri SMART HOME
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #3: RADically Fast and Easy Mobile Apps Development with Delphi
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #1: Pemanfaatan Artificial Intelligence di Masa Covid-19
by LuriDarmawan in Tutorial & Community Project more 4 years ago - Tempat Latihan Posting
by LuriDarmawan in OOT more 5 years ago - Archive
- Looping lagi...
by idhiel in Hal umum tentang Pascal Indonesia more 12 years ago - [ask] koneksi ke ODBC user Dsn saat runtime dengan ado
by halimanh in FireBird more 12 years ago - Validasi menggunakan data tanggal
by mas_kofa in Hal umum tentang Pascal Indonesia more 12 years ago
Random Topic
- otomatis click di caption pada sebuah form
by wati in Hal umum tentang Pascal Indonesia more 13 years ago - convert date format di MySQl
by dinoblackbox in MySQL more 16 years ago - Gmn Menghitung Qty + Price = Sub Total dengan DBGrid...?
by artanewbie2012 in Hal umum tentang Pascal Indonesia more 12 years ago - gimana cara insert data pada satu field?
by putukaca in MySQL more 17 years ago - command prompt
by muktaf in MySQL more 16 years ago - select month firebird
by vera in FireBird more 17 years ago - Retrieve table structure
by bboyz in Tip n Trik Pemrograman more 17 years ago - dos command via delphi
by e_soep in Tip n Trik Pemrograman more 17 years ago - [ask]enkripsi & shreder dengan delphi ??
by R960XT in Enginering more 18 years ago - [ASK]procedur pencarian data di data grid
by Iansx in Tip n Trik Pemrograman more 18 years ago