Страница 1 из 1

Элементарное звуковое наполнение готового wav файла

Добавлено: 26 май 2013, 02:59
Andy_G
Всем доброго времени суток! Есть готовая структура пустого wav файла. Помогите создать любое элементарное звуковое наполнение этого файла.

program wwav;
type
TWaveHeader = record
Marker1: Array[0..3] of Char;
BytesFollowing: LongInt;
Marker2: Array[0..3] of Char;
Marker3: Array[0..3] of Char;
Fixed1: LongInt;
FormatTag: Word;
Channels: Word;
SampleRate: LongInt;
BytesPerSecond: LongInt;
BytesPerSample: Word;
BitsPerSample: Word;
Marker4: Array[0..3] of Char;
DataBytes: LongInt;
end;

procedure CreateWavFile(const aSampleRate,aDuration,aBits,aChannels:integer;
const aName:String);
var WaveHeader:TwaveHeader;

f:file;
DataBytes:longint;
i:longint;
spm:longint;
begin
DataBytes := aChannels;
DataBytes := DataBytes * aSampleRate;
DataBytes := DataBytes * aBits;
DataBytes := DataBytes div 8;
DataBytes := DataBytes * aDuration;
DataBytes := DataBytes div 1000;

WaveHeader.Marker1 := 'RIFF';
WaveHeader.BytesFollowing := DataBytes + 36;
WaveHeader.Marker2 := 'WAVE';
WaveHeader.Marker3 := 'fmt';
WaveHeader.Fixed1 := 16;
WaveHeader.FormatTag := 1;
WaveHeader.SampleRate := aSampleRate;
WaveHeader.Channels := aChannels;
WaveHeader.BytesPerSecond := aChannels;
WaveHeader.BytesPerSecond := WaveHeader.BytesPerSecond * aSampleRate;
WaveHeader.BytesPerSecond := WaveHeader.BytesPerSecond * aBits;
WaveHeader.BytesPerSecond := WaveHeader.BytesPerSecond div 8;
WaveHeader.BytesPerSample := aChannels * aBits div 8;
WaveHeader.BitsPerSample := aBits;
WaveHeader.Marker4 := 'data';
WaveHeader.DataBytes := DataBytes;
Assign(f,aName);
Rewrite(f,i);
BlockWrite(f,WaveHeader,SizeOf(WaveHeader));
for i:=0 to WaveHeader.DataBytes-1 do
begin
.....//любой звук................................
end;
Close(f);
end;
begin
CreateWavFile(44100,3000,8,1,'mywave.wav');
end.