|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#31
|
|||
|
|||
Цитата:
|
#32
|
||||
|
||||
Цитата:
|
#33
|
|||
|
|||
Цитата:
|
#34
|
||||
|
||||
Цитата:
Можно конечно, но сложно. Ведь те данные оформлены для чтения человеком. А обычно чем лучше что-то читается человеком, тем хуже это получается у программ. И наоборот. |
#35
|
|||
|
|||
Цитата:
|
#36
|
||||
|
||||
Цитата:
Ну а если хочешь чтобы твоя программа не зависела от сторонних утилит, то тебе нужно изучать алгоритмы шифрования, а вовсе не структуру wav-файла. Если же хочешь изобрести свой алгоритм шифрования, то готовься к тому, что он скорее всего окажется не такой стойкий к взлому как общепринятые алгоритмы. |
#37
|
|||
|
|||
Цитата:
|
#38
|
||||
|
||||
Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#39
|
|||
|
|||
Цитата:
|
#40
|
||||
|
||||
Цитата:
Код:
procedure WriteWav(); type TChunkID = packed array [0..3] of Char; THeader = packed record ChunkID : TChunkID; ChunkSize : Longword; Format : TChunkID; Subchunk1ID : TChunkID; Subchunk1Size : Longword; AudioFormat : Word; NumChannels : Word; SampleRate : Longword; ByteRate : Longword; BlockAlign : Word; BitsPerSample : Word; Subchunk2ID : TChunkID; Subchunk2Size : Longword; end; var Header: THeader; NumSamples, BytsPerSample, Sample, I, J: Longword; fs: TFileStream; begin NumSamples := ;// Здесь записываешь количество сэмплов у твоего звука BytsPerSample := 2; // Размер сэмплов в байтах твоего звука. Обычно 1 или 2, но можно и 3 и 4. Header.ChunkID := 'RIFF'; Header.Format := 'WAVE'; Header.Subchunk1ID := 'fmt '; Header.Subchunk1Size := 16; Header.AudioFormat := $0001; // Только PCM Header.NumChannels := ;// Здесь записываешь число каналов своего звука. 1 - моно, 2 - стерео и т.д. Header.SampleRate := ;// Здесь записываешь частоту дискретизации своего звука. Типа 8000, 44100 и т.п. Header.BitsPerSample := BytsPerSample * 8; Header.BlockAlign := Header.NumChannels * BytsPerSample; Header.ByteRate := Header.SampleRate * Header.BlockAlign; Header.Subchunk2ID := 'data'; Header.Subchunk2Size := NumSamples * Header.BlockAlign; Header.ChunkSize := Header.Subchunk2Size + SizeOf(Header) - 8; fs := TFileStream.Create(Имя файла в который выводить, fmCreate); try fs.WriteBuffer(Header, SizeOf(Header)); for I := 1 to NumSamples do begin for J := 1 to Header.NumChannels do begin Sample := ;{ Здесь читаешь очередной сэмпл оттуда, куда их записывал твой конвертор "из относительного в абсолютное частотное звучание"} fs.WriteBuffer(Sample, BytsPerSample); end; end; finally fs.Free; end; end; |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Dmitry_DM (12.08.2012)
|
#41
|
|||
|
|||
Цитата:
Код:
procedure TForm1.Button4Click(Sender: TObject); procedure WriteWav(); type TChunkID = packed array [0..3] of Char; THeader = packed record ChunkID : TChunkID; ChunkSize : Longword; Format : TChunkID; Subchunk1ID : TChunkID; Subchunk1Size : Longword; AudioFormat : Word; NumChannels : Word; SampleRate : Longword; ByteRate : Longword; BlockAlign : Word; BitsPerSample : Word; Subchunk2ID : TChunkID; Subchunk2Size : Longword; end; var Header: THeader; NumSamples, BytsPerSample, Sample, I, J: Longword; fs: TFileStream; begin NumSamples := 22050;// Здесь записываешь количество сэмплов у твоего звука BytsPerSample := 2; // Размер сэмплов в байтах твоего звука. Обычно 1 или 2, но можно и 3 и 4. Header.ChunkID := 'RIFF'; Header.Format := 'WAVE'; Header.Subchunk1ID := 'fmt '; Header.Subchunk1Size := 16; Header.AudioFormat := $0001; // Только PCM Header.NumChannels := 1;// Здесь записываешь число каналов своего звука. 1 - моно, 2 - стерео и т.д. Header.SampleRate := 44100;// Здесь записываешь частоту дискретизации своего звука. Типа 8000, 44100 и т.п. Header.BitsPerSample := BytsPerSample * 8; Header.BlockAlign := Header.NumChannels * BytsPerSample; Header.ByteRate := Header.SampleRate * Header.BlockAlign; Header.Subchunk2ID := 'data'; Header.Subchunk2Size := NumSamples * Header.BlockAlign; Header.ChunkSize := Header.Subchunk2Size + SizeOf(Header) - 8; //fs := TFileStream.Create('Writen.wav', fmCreate); try fs.WriteBuffer(Header, SizeOf(Header)); for I := 1 to NumSamples do begin for J := 1 to Header.NumChannels do begin Sample := что сюда записать, чтобы для начала и для моего понимания, в файл шли теперешние сэмплы (не измененные)? ;{ Здесь читаешь очередной сэмпл оттуда, куда их записывал твой конвертор "из относительного в абсолютное частотное звучание"} fs.WriteBuffer(Sample, BytsPerSample); if SaveDialog2.Execute then Form1.fs.SaveToFile(Form1.SaveDialog2.FileName + '.wav'); fs.Free; end; end; finally end; end; end. |
#42
|
||||
|
||||
Цитата:
Цитата:
Код:
Sample := Massiv[I, J]; Цитата:
Код:
procedure TForm1.Button4Click(Sender: TObject); begin if SaveDialog2.Execute then begin WriteWav(SaveDialog2.FileName); end; end; |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Dmitry_DM (12.08.2012)
|
#43
|
|||
|
|||
Цитата:
|
#44
|
||||
|
||||
Цитата:
|
#45
|
|||
|
|||
Цитата:
|