|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Гистограмма WAV файла
Здравствуйте! Помогите разобраться! Как по звуковым ординатам построить гистограмму WAV? В сети ничего не нашел. Кто может разъяснить что-нибудь по этому поводу. Что из себя представляют ординаты? Как построить по ним график в Delphi?
|
#2
|
||||
|
||||
Цитата:
|
#3
|
||||
|
||||
>offtop Ну, немного ТС и прав - ведь для построения гистограммы нужны значения амплитуды звука, а она, как правило, является параметром по оси Y-ординат.
А для построения гистограммы очень просто - читаешь файл, снимаешь значения, производишь квантирование (шаг гистограммы), и рисуешь на канве прямоугольниками. |
#4
|
|||
|
|||
Цитата:
|
#5
|
||||
|
||||
В этом массиве значения в попугаях. В свое время разбирался, так и не понял откуда начинается минимум и заканчивается максимум.
Если кто поянит - буду благодарен — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#6
|
||||
|
||||
да, строй его в TChart
Пишу программы за еду. __________________ |
#7
|
|||
|
|||
Цитата:
|
#8
|
|||
|
|||
Цитата:
|
#9
|
||||
|
||||
Цитата:
Код:
var WavInfo: TWavInfo; KX, KY: Extended; i, X, Y, DY, Chanel: Integer; begin KX := 1; // Коэффициент пропорциональности по абсциссе KY := 0.01; // Коэффициент пропорциональности по ординате DY := Height div 2; // Смещение по ординате Chanel := 0; // Номер рисуемого канала Repaint; for i := Low(WavInfo.Samples) to High(WavInfo.Samples) do begin X := Trunc(KX * i); Y := Trunc(KY * Smallint(WavInfo.Samples[i, Chanel]) + DY); Canvas.MoveTo(X, DY); Canvas.LineTo(X, Y); end; end; А вот так можно рисовать обычную волну: Код:
var WavInfo: TWavInfo; KX, KY: Extended; i, X, Y, DY, Chanel: Integer; begin KX := 1; // Коэффициент пропорциональности по абсциссе KY := 0.01; // Коэффициент пропорциональности по ординате DY := Height div 2; // Смещение по ординате Chanel := 0; // Номер рисуемого канала Repaint; for i := Low(WavInfo.Samples) to High(WavInfo.Samples) do begin X := Trunc(KX * i); Y := Trunc(KY * Smallint(WavInfo.Samples[i, Chanel]) + DY); if i = Low(WavInfo.Samples) then Canvas.MoveTo(X, Y) else Canvas.LineTo(X, Y); end; end; |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Dmitry_DM (27.08.2012)
|
#10
|
|||
|
|||
Цитата:
|
#11
|
|||
|
|||
А как задать расположение канвы на форме?, да еще и на определенном PageControl1?
|