Здравствуйте еще раз! Вот процедура:
Код:
procedure WriteWav(const FileName: String);
type
TMassiv = array of array of Integer;
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;
Massiv: TMassiv;
begin
NumSamples := 1079; {Massiv[I, J];}
BytsPerSample := 2;
Header.ChunkID := 'RIFF'
Header.Format := 'WAVE';
Header.Subchunk1ID := 'fmt ';
Header.Subchunk1Size := 16;
Header.AudioFormat := $0001;
Header.NumChannels := 1;
Header.SampleRate := 22050;
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('New File.wav',fmCreate);
try
fs.WriteBuffer(Header, SizeOf(Header));
for I := 1 to NumSamples do
begin
for J := 1 to Header.NumChannels do
begin
Sample := 1111;
fs.WriteBuffer(Sample, BytsPerSample);
end;
end;
finally
fs.Free;
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
if SaveDialog2.Execute then
begin
WriteWav(SaveDialog2.FileName);
end;
end;
Для записи Wav требуются
Код:
Header.ChunkID := 'RIFF'
Header.Format := 'WAVE';
Header.Subchunk1ID := 'fmt ';
Header.Subchunk1Size := 16;
Header.AudioFormat := $0001;
Header.NumChannels := 1;
Header.SampleRate := 22050;
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;
Собственно вопрос: как сделать, чтобы данные не вводить, а считывать строки из memo2 ? Перед этим в memo2 записывается содержимое txt файла.
Наверное надо сделать как то так:
Код:
Header.ChunkID := ReadString.Memo2('RIFF');
Но как-то правильнее....