Показать сообщение отдельно
  #56  
Старый 14.08.2012, 12:16
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Здравствуйте еще раз! Вот процедура:
Код:
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');
Но как-то правильнее....
Ответить с цитированием