![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#91
|
||||
|
||||
|
Цитата:
Код:
... NumSamples := wChankSize div (SampleSize * Header.wChannels); ... |
|
#92
|
|||
|
|||
|
Цитата:
Код:
procedure WriteWav(const FileName: String);
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;
wChannels : WORD;
end;
var
Header: THeader;
NumSamples, BytsPerSample, Sample, I, J: Longword;
fs: TFileStream;
wChankSize : Cardinal;
begin
NumSamples := wChankSize div (SampleSize * Header.wChannels);
BytsPerSample := 2;
Header.ChunkID := 'RIFF';
Header.ChunkSize := StrToInt(Form1.Memo2.Lines[1]);
Header.Format := 'WAVE';
Header.Subchunk1ID := 'fmt ';
Header.Subchunk1Size := StrToInt(Form1.Memo2.Lines[4]);
Header.AudioFormat := $0001;
Header.NumChannels := StrToInt(Form1.Memo2.Lines[6]);
Header.SampleRate := StrToInt(Form1.Memo2.Lines[7]);
Header.ByteRate := StrToInt(Form1.Memo2.Lines[8]);
Header.BlockAlign := StrToInt(Form1.Memo2.Lines[9]);
Header.BitsPerSample := StrToInt(Form1.Memo2.Lines[10]);
Header.Subchunk2ID := 'data';
Header.Subchunk2Size := StrToInt(Form1.Memo2.Lines[12]);
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;
end. |
|
#93
|
||||
|
||||
|
Цитата:
Код:
... NumSamples := wChankSize div (SampleSize * Header.wChannels); ... |
|
#94
|
|||
|
|||
|
Цитата:
|
|
#95
|
||||
|
||||
|
Цитата:
|
|
#96
|
|||
|
|||
|
Цитата:
|
|
#97
|
||||
|
||||
|
Цитата:
Это нужно сильно постараться, чтобы сделать неправильно... |
|
#98
|
|||
|
|||
|
Цитата:
Код:
begin Sample := 1111; fs.WriteBuffer(Sample, BytsPerSample); end; Код:
begin fs.WriteBuffer(NumSamples); |
|
#99
|
||||
|
||||
|
Цитата:
Цитата:
|
|
#100
|
|||
|
|||
|
Цитата:
Код:
NumSamples := ??????? |
|
#101
|
|||
|
|||
|
Цитата:
|
|
#102
|
||||
|
||||
|
Цитата:
|
|
#103
|
|||
|
|||
|
Цитата:
Стоп! Что-то я не то сделал. Я убрал Sample:= 1111, и стало по вышеописанному, а что, NumSamples передать уже третьим в процедуру WriteWav? Там уже и так Код:
fs.WriteBuffer(Sample, BytsPerSample); Последний раз редактировалось Dmitry_DM, 16.08.2012 в 15:08. |
|
#104
|
||||
|
||||
|
Цитата:
|
|
#105
|
|||
|
|||
|
Цитата:
|