![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте! Помогите разобраться! Как по звуковым ординатам построить гистограмму WAV? В сети ничего не нашел. Кто может разъяснить что-нибудь по этому поводу. Что из себя представляют ординаты? Как построить по ним график в Delphi?
|
|
#2
|
||||
|
||||
|
Цитата:
|
|
#3
|
||||
|
||||
|
>offtop Ну, немного ТС и прав - ведь для построения гистограммы нужны значения амплитуды звука, а она, как правило, является параметром по оси Y-ординат.
А для построения гистограммы очень просто - читаешь файл, снимаешь значения, производишь квантирование (шаг гистограммы), и рисуешь на канве прямоугольниками. |
|
#4
|
|||
|
|||
|
Цитата:
|
|
#5
|
||||
|
||||
|
В этом массиве значения в попугаях. В свое время разбирался, так и не понял откуда начинается минимум и заканчивается максимум.
Если кто поянит - буду благодарен ![]() |
|
#6
|
||||
|
||||
|
да, строй его в TChart
|
|
#7
|
|||
|
|||
|
Цитата:
|
|
#8
|
||||
|
||||
|
"c:\Program Files\Borland\Delphi7\Demos\TeeChart\teedemo.dpr"
|
|
#9
|
|||
|
|||
|
Цитата:
|
|
#10
|
||||
|
||||
|
Цитата:
Код:
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)
| ||
|
#11
|
|||
|
|||
|
Цитата:
|
|
#12
|
|||
|
|||
|
А как задать расположение канвы на форме?, да еще и на определенном PageControl1?
|
|
#13
|
||||
|
||||
|
Цитата:
|
|
#14
|
|||
|
|||
|
Цитата:
Код:
procedure TForm1.Button_WAVgraphClick(Sender: TObject);
var
WavInfo: TWavInfo;
KX, KY: Extended;
i, X, Y, DY, Chanel: Integer;
begin
with PaintBox1, canvas do
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);
PaintBox1.Canvas.MoveTo(X, DY);
PaintBox1.Canvas.LineTo(X, Y);
end;
end;
end; |
|
#15
|
||||
|
||||
|
Цитата:
Код:
PaintBox1.Canvas.MoveTo(X, DY);
PaintBox1.Canvas.LineTo(X, Y)Цитата:
рисовать (выводить рисунок) в событии PaintBox1.OnPaint |
![]() |
|
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|
|