Я построил диограмму так: Назначил F:=
TFileStream.Create(OpenDialog1.FileName, fmOpenRead ); Затем считал
заголовок Wav- SampleCount, SamplesPerSec, BitsPerSample, Channeles. Затем
считал данные- GetMem(buf, SampleCount * Channeles * BitsPerSample); Описал
массив Volume- SetLength(Volume, SampleCount); Затем - F.Read(buf^,
SampleCount*2); F.Free; Затем заполнил массив - buf16 := buf; for h := 0 to SampleCount - 1 do begin Volume[h] := abs(buf16^); inc(buf16); end; FreeMem(buf);
Затем строил график(в экранных координатах) - по горизонтальной оси
откладывал значения SampleCount, по вертикальной значения Volume[h].
График получается точно такой же как в SoundForge.
Единственно, я писал программу для конкретного случая - у меня файлы по 10
минут, моно, 11025 Гц., 16 бит. Так что программа у меня не универсальная. Но
работает нормально. По времени: обработка файла и построение графика около 4 -5
секунд.
|