Arsip: bagaimana cara Save Wav

 
user image
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
user image
more 13 years ago

alevan

Wah sepi banget,..... ada yang mau tolong saya,....
user image
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
user image
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.
user image
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,.....
user image
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
user image
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.
user image
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.
user image
more 13 years ago

alevan

ok,.... thanks untuk infonya,... saya akan coba dulu,.............
user image
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
Share to

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

Random Topic

Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com