Форум программистов, компьютерный форум, киберфорум
Наши страницы

PascalABC.NET

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
niburiec
0 / 0 / 0
Регистрация: 10.06.2014
Сообщений: 9
#1

Использование ProgressBar для отображения времени проигрывания файла MediaPlayer - PascalABC.NET

10.06.2014, 01:10. Просмотров 1828. Ответов 10
Метки нет (Все метки)

У меня вопрос, как можно задействовать элемент управления progressBar для отображения времени проигрывания мультимедиа файла, загруженного с помощью MediaPlayer ? Я использовал дизайнер форм. Подключил MediaPlayer. Файл открываю с помощью OpenFileDialog и проигрываю. А вот как подключить progressBar, чтобы он отображал длину проигранного времени по ходу проигрывания, не знаю. Подскажите кто-нибудь. MSDN мне ничего не даёт (или я не понимаю ). Там вроде нужно задействовать как-то MediaTimeline, а что к чему ? Я тут наворотил и сам запутался.

Добавлено через 36 минут
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
begin
  openFileDialog1.ShowDialog();
//var Player := new System.Windows.Media.MediaPlayer; {Присваиваем переменной "Player" новый экземпляр MediaPlayer'а}
 var Tiem := new System.Windows.Media.MediaTimeline;
  Player.Open( new System.Uri(OpenFileDialog1.FileName, System.UriKind.RelativeOrAbsolute)); {Задаём путь к файлу}
  label1.Text := OpenFileDialog1.FileName;
  Tiem.Source:= new System.Uri(OpenFileDialog1.FileName);
  label2.Text := Tiem.BeginTime.ToString;
  //label2.Text := Tiem.Duration.TimeSpan.Seconds;
  
  Player.Play(); {Воспроизводим файл}
end;
Вот такой бред. Пробовал использовать Duration - не получается. Не знаю короче как.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2014, 01:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Использование ProgressBar для отображения времени проигрывания файла MediaPlayer (PascalABC.NET):

ProgressBar для отображения процесса архивации - C#
Опыта в C# практически нет. И очень по Большой нужде пришлось столкнуться. Поэтому не судите с высока... Суть вопроса очень проста, а...

ProgressBar для отображения выполнения SQL-запроса - C#
Подскажите, как реализовать ProgressBar для SQL запроса. Запрос обычный SELECT... FROM ... LEFT JOIN .... , но таблицы очень большие и...

ProgressBar вместе с LabelText для отображения процентов прогресса - C#
Добрый день. Хочу чтобы в месте с ProgressBar еще бежали проценты. подскажите как? row = 4567; progressBar1.Maximum = row; ...

MediaPlayer и ProgressBar - Delphi FireMonkey
Не могу к MediaPlayer привязать ProgressBar для перемотки видео. До этого делал в vcl. Все без проблем. Но на FMX никак не могу, перелистал...

Создание потока для проигрывания файла - C++/CLI
Есть функция обработки данных с порта, данные обрабатываются каждую секунду. Хотелось бы сделать отдельный поток что бы в нем проигрывался...

Функция для отображения времени - PHP
Здраствуйте! Вот искал не мог найти нужно кароче функци для отображения времени постройки! Тоесть время сохраняетса в секундах и их нужно...

10
pavelDev
40 / 40 / 19
Регистрация: 13.11.2013
Сообщений: 175
Записей в блоге: 1
10.06.2014, 23:15 #2
примерно вот так (создать таймер и в нём отслеживать сколько прошло времени)
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
{$reference 'PresentationCore.dll'}
{$reference 'System.windows.forms.dll'}
{$reference 'System.Drawing.dll'}
{$apptype windows}
uses system.windows.forms;
var 
  p: System.Windows.Media.mediaPLayer;
  f: System.Windows.Forms.form;
  pbar: System.Windows.forms.progressBar;
  dlg:system.windows.forms.openFileDialog;
  but:system.windows.forms.button;
  t:timer;
procedure med(sender:object;E:system.EventArgs);
begin
t.Stop;
end;
  procedure Upd(sender:object;E:system.EventArgs);
  begin
pbar.Value:=Round(p.Position.TotalMilliseconds)*10000;
  end;
procedure setOp(s:object;E:system.EventArgs);
begin
pbar.Maximum:=Round(p.NaturalDuration.TimeSpan.TotalMilliseconds)*10000;
t.Start;
end;
procedure cl(sender:object;E:system.EventArgs);
begin
if dlg.ShowDialog=system.windows.forms.dialogResult.ok then
begin
p.Open(new system.Uri(dlg.FileName,system.UriKind.Relative));
p.Play;
t.Stop;
end;
end;
begin
f:=new System.Windows.Forms.Form;
but:=new System.Windows.Forms.Button;
dlg:=new System.Windows.Forms.OpenFileDialog();
p:=new System.Windows.Media.MediaPlayer;
t:=new System.Windows.Forms.Timer();
pbar:=new System.Windows.Forms.ProgressBar();
pbar.Minimum:=0;
 
f.Width:=900;
f.Height:=120;
 
p.MediaOpened+=SetOP;
p.MediaEnded+=med;
 
pbar.Top:=50;
pbar.Width:=f.ClientSize.Width;
 
t.Interval:=100;
t.Tick+=UPD;
 
but.Text:='ОТКРЫТЬ';
but.Click+=cl;
 
f.Controls.Add(pbar);
f.Controls.Add(but);
 
System.Windows.Forms.Application.EnableVisualStyles;
f.ShowDialog;
 
 
end.
1
niburiec
0 / 0 / 0
Регистрация: 10.06.2014
Сообщений: 9
11.06.2014, 14:32  [ТС] #3
За то время, что прошло с момента моего первого сообщения, я уже сам догадался использовать таймер. И даже прописал код. Вот только не знал, как его остановить по окончании проигрывания (ума не хватает). Спасибо за то, что показали как используется NaturalDuration.TimeSpan , сам догадаться не мог.

Добавлено через 17 минут
Однако, в строке 23 выбивает ошибку времени исполнения (Значение '-2019707296' не допустимо для 'Maximum' . 'Maximum' должно быть больше или равно 0).

И ещё вопрос, в MediaPlayer есть событие MediaEnded (происходит по окончании проигрывания). Как его использовать ?

Добавлено через 15 минут
Извиняюсь, плохо просмотрел код. MediaEnded нашел и уже понял. Ошибку времени выбивает, толко если долго копаться в диалоговом окне и то, через раз... Почему ? Не знаю.
0
erl27
891 / 740 / 432
Регистрация: 06.09.2013
Сообщений: 1,561
11.06.2014, 14:57 #4
Цитата Сообщение от niburiec Посмотреть сообщение
Ошибку времени выбивает
niburiec, попробуйте вместо 10000 поставить 1000 (19-я и 23-я строки)
1
pavelDev
40 / 40 / 19
Регистрация: 13.11.2013
Сообщений: 175
Записей в блоге: 1
12.06.2014, 12:13 #5
niburiec,я бы тебе вообще посоветовал бы работать с библиотекай bass(намного быстрее MediaPlayer да и прочих плюсов много )
0
niburiec
0 / 0 / 0
Регистрация: 10.06.2014
Сообщений: 9
12.06.2014, 17:01  [ТС] #6
Попробую.. И в интервале поставить 1000 вместо 100...

Добавлено через 1 минуту
Я бы попробовал Bass, но я начинающий и наверно ещё долго им буду. Если бы вы примерчик написали, чтоб т.с. наглядно посмотреть, я бы был очень признателен.
0
pavelDev
40 / 40 / 19
Регистрация: 13.11.2013
Сообщений: 175
Записей в блоге: 1
13.06.2014, 00:49 #7
(а вообще лучше напиши мне свой адрес вк или skype )
вообщем bass он не для .net но есть его не полная реализация для .net
вот http://webfile.ru/ac3aa5f6d6bca2b313c4813f2c7f7e28
0
niburiec
0 / 0 / 0
Регистрация: 10.06.2014
Сообщений: 9
13.06.2014, 05:28  [ТС] #8
Вот, значит, какой плеер у меня получился. Конечно же благодаря вашей помощи :

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
{$reference 'System.Windows.Forms.dll'}
{$reference 'System.Drawing.dll'}
{$reference 'PresentationCore.dll'}
{$apptype windows}  //Обязательно, иначе диалоговое окно может не открыться
 
uses 
  System, System.Windows.Forms;
  var    //описываем переменные
      frmMain : System.Windows.Forms.Form;           //Форма
      btn1 : System.Windows.Forms.Button;               //Кнопка 1
      btn2 : System.Windows.Forms.Button;               //Кнопка 2
      openfl : System.Windows.Forms.OpenFileDialog;//Диалоговое окно
      player : System.Windows.Media.MediaPLayer;   //Медиаплеер
      prbar : System.Windows.Forms.ProgressBar;      //Прогресбар
      time : System.Windows.Forms.Timer;                //Таймер
      lab1 : System.Windows.Forms.Label;                //Метка 1
      lab2 : System.Windows.Forms.Label;                //Метка 2
      lab3 : System.Windows.Forms.Label;
      sad : integer;                                //Переменная приращения времени
      wremya : real;
      trkbar : System.Windows.Forms.TrackBar;
 
//Процедура выполнения при нажатии кнопки "Открыть.."
procedure btn1_click(sender : object; E : EventArgs);
begin 
    if openfl.ShowDialog() = System.Windows.Forms.DialogResult.OK then //Если нажата кнопка <Открыть>
          prbar.Value:=0; // Выставляем положенин прогрессбара в 0
          time.Stop(); //Останавливаем таймер если пользователь сходу открыл следующий файл
          sad := 1; // Обновляем переменную sad до 1, если пользователь сходу открыл следующий файл
          player.Open( new System.Uri(openfl.FileName.Tostring, System.UriKind.RelativeOrAbsolute)); //Задаём путь до файла
          player.Play(); //Воспроизводим файл
end;
 
//Процедура выполнения при нажатии кнопки "Стоп"
procedure btn2_click(sender : object; E : EventArgs);
begin 
    player.Stop(); //Останавливаем музыку
    time.Stop(); //Останавливаем таймер
    sad := 1; // Обновляем переменную sad до 1
end;
    
//Процедура конца проигрывания файла
procedure closed_media(sender : object; E : EventArgs);
begin
    //prbar.Value:=0; // Выставляем положенин прогрессбара в 0
    time.Stop(); //Останавливаем таймер
    sad := 1;
end;
 
//Процедура начала проигрывания файла
procedure open_media(sender : object; E : EventArgs);
begin
    prbar.Maximum:=Round(player.NaturalDuration.TimeSpan.TotalMilliseconds)*1000; // Длина звукового файла
    time.Start();
    lab1.Text:= '';
    lab1.Text := '1' + '  секунд';
    wremya := prbar.Maximum/1000000;
    lab2.Text := 'Продолжительность ' + wremya.ToString;
end;
 
//Процедура обработки таймера
procedure time_tik(sender : object; E : EventArgs);
begin
    prbar.Value:=Round(player.Position.TotalMilliseconds)*1000;
    sad := sad+1;
    lab1.Text := sad.ToString + '  секунд';
end;
 
//Процедура обработки громкости
procedure trkbar_trkbarValue(sender : object; E : EventArgs);
begin
    player.Volume := trkbar.Value/10;
end;    
 
begin
  //Форма
   frmMain := new Form;
   frmMain.Text := 'Плеер с элементами OpenFileDialog и ProgressBar';
   frmMain.Width:= 640;
   frmMain.Height:= 250;   
   frmMain.StartPosition:= FormStartPosition.CenterScreen;
   frmMain.BackColor := System.Drawing.Color.LightSteelBlue;
   frmMain.MaximizeBox := false;
   //frmMain.Icon:= System.Drawing.Icon.ExtractAssociatedIcon('00067.ico'); {Иконка} 
   {должна быть в папке с программой если не указан полный путь}
   
   //Кнопка 1
   btn1 := new Button;
   btn1.AutoSize := true;
   btn1.Font := new System.Drawing.Font ( ' Times New Roman ' , 14 , System.Drawing.FontStyle.Bold ); //Свойства шрифта
   btn1.ForeColor := System.Drawing.Color.DarkBlue; //Цвет надписи на кнопке
   btn1.Text := 'Открыть.. ';
   btn1.BackColor := System.Drawing.Color.Lavender; //Цвет фона кнопки
   btn1.Left := 260;
   btn1.Top := 40;
   btn1.Visible := true;
   frmMain.Controls.Add(btn1);
   btn1.Click +=  btn1_click ;
   
   //Кнопка 2
   btn2 := new Button;
   btn2.AutoSize := true;
   btn2.Font := new System.Drawing.Font ( ' Times New Roman ' , 14 , System.Drawing.FontStyle.Bold ); //Свойства шрифта
   btn2.ForeColor := System.Drawing.Color.DarkBlue;
   btn2.Text := 'Стоп ';
   btn2.BackColor := System.Drawing.Color.Lavender;
   btn2.Left := 280;
   btn2.Top := 90;
   btn2.Visible := true;
   frmMain.Controls.Add(btn2);
   btn2.Click +=  btn2_click ;
   
   //Диалоговое окно
  openfl := new System.Windows.Forms.OpenFileDialog();
  openfl.InitialDirectory := 'E:\Музыка\Для заставок'; //Открытая директория по умолчанию
  openfl.Filter := 'файлы с расширением(*.mp3)|*.mp3|Все файлы(*.*)|*.*'; //Фильтр типов файлов
  openfl.FilterIndex := 1;  //Какой тип файлов открыт по умолчанию
  
  //Новый экземпляр MediaPlayer'а
  player := new System.Windows.Media.MediaPlayer(); 
  player.MediaOpened += open_media;  //Действие при начале проигрывания файла
  player.MediaEnded += closed_media;  //Действие по окончании проигрывания файла
  
  //Таймер
  time:= new System.Windows.Forms.Timer();
  time.Interval := 1000;
  time.Tick += time_tik;
  
  //Метка 1
  lab1:= new System.Windows.Forms.Label();
  lab1.Left:= 50;
  lab1.Top:= 140;  
  lab1.AutoSize:= true;
  lab1.Font:= new System.Drawing.Font('Arial', 16, System.Drawing.FontStyle.Bold);
  lab1.ForeColor := System.Drawing.Color.DarkBlue; //Цвет надписи
  lab1.BackColor := System.Drawing.Color.Transparent;
  lab1.Text:= '';   
  frmMain.Controls.Add(lab1);
  
  //Метка 2
  lab2:= new System.Windows.Forms.Label();
  lab2.Left:= 300;
  lab2.Top:= 140;  
  lab2.AutoSize:= true;
  lab2.Font:= new System.Drawing.Font('Arial', 16, System.Drawing.FontStyle.Bold);
  lab2.ForeColor := System.Drawing.Color.DarkBlue; //Цвет надписи
  lab2.BackColor := System.Drawing.Color.Transparent;
  lab2.Text:= '';   
  frmMain.Controls.Add(lab2);
  
  //Метка 3
  lab3:= new System.Windows.Forms.Label();
  lab3.Left:= 435;
  lab3.Top:= 60;  
  lab3.AutoSize:= true;
  lab3.Font:= new System.Drawing.Font('Arial', 16, System.Drawing.FontStyle.Bold);
  lab3.ForeColor := System.Drawing.Color.DarkBlue; //Цвет надписи
  lab3.BackColor := System.Drawing.Color.Transparent;
  lab3.Text:= 'Громкость';   
  frmMain.Controls.Add(lab3);
  
  //Прогрессбар
  prbar := new System.Windows.Forms.ProgressBar();
  prbar.Minimum := 0;
  prbar.Top := 170;
  prbar.Left := 20;
  prbar.Width := 590;
  prbar.BackColor := System.Drawing.Color.MediumSpringGreen; //Цвет фона прогрессбара
  prbar.ForeColor := System.Drawing.Color.Green; //Цвет прогресcбара
  prbar.Style := System.Windows.Forms.ProgressBarStyle.Continuous; //Стиль прогресcбара
  frmMain.Controls.Add(prbar); //Отображаем прогрессбар на форме
 
  //Трекбар громкости
  trkbar := new System.Windows.Forms.TrackBar();
  trkbar.Minimum := 0; //Минимальное значение
  trkbar.Maximum := 10;  //Максимальное значение
  trkbar.Value := 5; //Начальное положение ползунка громкости
  trkbar.Top := 93;
  trkbar.Left := 380;
  trkbar.Width := 230;
  frmMain.Controls.Add(trkbar);
  trkbar.Scroll  += trkbar_trkbarValue; //Передаем управление подпрограмме
  
  //переменная приращения интервалов для отсчёта времени
  sad := 1;
 
   
  Application.Run(frmMain);
end.
Кое-что я конечно исправил, кое-что добавил. Но тут возникла ещё куча вопросов с progressBar - ом . Например, как можно реализовать с его помощью отображение пиков громкости; ещё лучше разложить хотя бы на три полосы частотки (низкие, средние,высокие). Я не знаю как объяснить, чтоб меня было понять. Вобщем типа прыгающих столбиков в такт с музыкой ?
0
pavelDev
40 / 40 / 19
Регистрация: 13.11.2013
Сообщений: 175
Записей в блоге: 1
13.06.2014, 12:40 #9
это спектор или эквалайзер называется (позже скину код)
кстати вот что вашему коду не хватает
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
{$reference 'System.Windows.Forms.dll'}
{$reference 'System.Drawing.dll'}
{$reference 'PresentationCore.dll'}
{$apptype windows}
 
uses 
  System, System.Windows.Forms;
 var f:Form;
 P:System.Windows.Forms.progressbar;
procedure md(sender:object;E:System.Windows.Forms.mouseeventargs);
begin
if (E.Button=System.Windows.Forms.mouseButtons.Left) and (E.Location.X<P.Maximum) and (E.Location.X>P.Minimum) then
P.Value:=E.Location.X;
if (E.Button=System.Windows.Forms.mouseButtons.Left) and (E.Location.X<P.Minimum) then 
P.Value:=0;
end;
 procedure hd(sender:object;E:System.EventArgs);
 begin
 P.Maximum:=f.ClientSize.Width;
 P.Width:=f.ClientSize.Width;
 end;
 begin
 f:=new System.Windows.Forms.Form();
f.Text:='Кликни на прогресс бар что бы поменять его значение ';
 P:=new System.Windows.Forms.ProgressBar();
 P.Width:=f.ClientSize.Width;
 P.Maximum:=f.Width;
 P.MouseMove+=md;
 f.SizeChanged+=HD;
 f.Controls.Add(P);
 System.Windows.Forms.Application.EnableVisualStyles;
 f.ShowDialog;
 end.
Добавлено через 18 минут
немного подправил процедуру (если несколько раз открыть файл то там не правильно показывает сколько секунд,я же это поправил)
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure btn1_click(sender : object; E : EventArgs);
begin 
    if openfl.ShowDialog() = System.Windows.Forms.DialogResult.OK then //Если нажата кнопка <Открыть>
          begin
          prbar.Value:=0; // Выставляем положенин прогрессбара в 0
          time.Stop(); //Останавливаем таймер если пользователь сходу открыл следующий файл
          
          time.Start;//естественно запускаем таймер вновь 
          sad := 1; // Обновляем переменную sad до 1, если пользователь сходу открыл следующий файл
           lab1.Text := sad.ToString + '  секунд';//обновляем инфу иначе она обновится после первого тика таймера 
            
            
          player.Open( new System.Uri(openfl.FileName.Tostring, System.UriKind.RelativeOrAbsolute)); //Задаём путь до файла
          player.Play(); //Воспроизводим файл
end;
end;
Добавлено через 15 минут
и я вам писал что лучше использовать bass. вот эквалайзер но использует bass (стандартными средствами это сделать вроде бы нельзя я имею в виду mediaPlayer)
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
{$apptype windows}
{$reference 'System.Windows.Forms.dll'}
{$reference 'System.Drawing.dll'}  
{$reference 'BassWrapper.dll'} //сакчиваем здесь [url]http://webfile.ru/ac3aa5f6d6bca2b313c4813f2c7f7e28[/url] (две библиотеки должны лежать вместе BassWrapper.dll и bass.dll) 
{$platformtarget x86}
uses
  basswrapper,  System.Drawing, System.Windows.forms;
 
type
  PlayerSpectrum = class(UserControl)//описываем класс 
  private 
    fBandCount := 27;
    peaks := new integer[128];
    limit := new integer[128];
    
    procedure SetBandCount(value: integer);
    begin
      fBandCount := value;
      Invalidate;
    end;
    
    procedure PlayerSpectrum_Paint(sender: Object; e: PaintEventArgs);
    begin
      var g := e.Graphics;
      var ColWidth := round(Width / BandCount); 
      for var i := 0 to BandCount - 1 do
      begin
        var YPos := Trunc(Abs(FFtData[i + 5]) * 500);
        if YPos > Height then YPos := Height;
        if YPos >= peaks[i] then peaks[i] := YPos
        else peaks[i] := peaks[i] - 1;
        
        if YPos >= limit[i] then limit[i] := YPos - 1
        else limit[i] := limit[i] - 3;
        
        if (Height - peaks[i]) > Height then
          peaks[i] := 0;
        if (Height - limit[i]) > Height then
          limit[i] := 0;
        
       g.DrawLine(new Pen(PeakColor), i * (ColWidth + 1), Height - peaks[i],
            i * (ColWidth + 1) + ColWidth - 1, Height - peaks[i]);
        
        g.FillRectangle(new SolidBrush(ColumnColor),
          i * (ColWidth + 1), Height - limit[i],
          ColWidth, Height);
      end;
    end;
    
    procedure InitializeComponent;
    begin
      Paint += PlayerSpectrum_Paint;
    end;
  
  public 
    FFTData := new Single[2048];
    PeakColor := Color.Yellow;
    ColumnColor := Color.White;
    
    property BandCount: integer read fBandCount write SetBandCount;
 
    constructor ;
    begin
      SetStyle(ControlStyles.ResizeRedraw, true);
      SetStyle(ControlStyles.AllPaintingInWmPaint, true);
      SetStyle(ControlStyles.DoubleBuffer, true);
      InitializeComponent;
    end;
  end;
 
var
  f: Form;
  P: PlayerSpectrum;
  chan: integer;
  t: timer;
 
procedure tt(sender: object; E: System.EventArgs);
begin
  var g := new single[2048];
  (Bass.BASS_ChannelGetData(chan, g, integer(BASSData.BASS_DATA_FFT2048)));
  
  P.FFTData := g;
  P.Invalidate;
end;
procedure fsc(sender:object;E:System.EventArgs);
begin
//if (f.Size.Height<500) and (f.Size.Height<500) then
begin
P.Width:=f.Width;
P.Height:=f.Height;
P.fBandCount:=f.Size.Width div 10;
end
end;
 
begin
  F := new Form;
  f.MaximumSize:=new System.Drawing.Size(800,600);
  
  P := new PlayerSpectrum;
  P.Size:=new System.Drawing.Size(f.Width,f.Height);
 
  P.fBandCount:=f.Size.Width div 10;
    P.PeakColor := System.Drawing.Color.red;
  P.ColumnColor:=Color.Blue;
  P.Location:=new System.Drawing.Point(0,-38);
  f.SizeChanged+=fsc;
  var g := new Single[2048];
  
  if not Bass.BASS_Init(-1, 44100, 0, System.IntPtr.Zero, nil) then //и так первое инитилизируем bass в противном случие генирируем исключение
    raise new Exception('Bass Init error!');
  
  var d := new openfiledialog();
  d.ShowDialog; 
  Chan := Bass.Bass_StreamCreateFile(false, (d.FileName), 0, 0, BASSFlag.BASS_UNICODE);//! создаём поток для Bass
  Bass.BASS_ChannelPlay(chan, false);
  
  t := new System.Windows.Forms.Timer;
  t.Tick += tt;
  t.Interval := 1;
  t.Start;
  
  
  F.Controls.Add(P);
  
  F.ShowDialog;
end.
1
niburiec
0 / 0 / 0
Регистрация: 10.06.2014
Сообщений: 9
13.06.2014, 13:20  [ТС] #10
Спасибо за информацию. И вообще, вам бы не мешало книгу написать со своими примерами. А то по графике в Pascal ABC.NET информации почти никакой, и никто не хочет написать, чтоб всем было доступно. Ведь сам Pascal ABC.NET, насколько я понял, очень мощная вещь и, при этом, довольно простая. Если подумать, то на нём можно делать всё, наверное. Я по ходу ещё и С++ немножко читаю. Однако почему-то мне Pascal ближе. Может в силу привычки? А ещё мне было бы интересно изучить возможности Pascal ABC.NET в 3D, в OpenGL например. Уверен, что и это возможно.
0
pavelDev
40 / 40 / 19
Регистрация: 13.11.2013
Сообщений: 175
Записей в блоге: 1
13.06.2014, 13:43 #11
ну естественно нет ничего не возможного. я к примеру написал загрузчик obj(opengl.ну там можно покрутить по масштабировать и т.д ) а вот тоже мой пример с 3d графикой тут Полезные коды для PascalABC.NET вообщем нужна помощь обращайтесь
0
13.06.2014, 13:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2014, 13:43
Привет! Вот еще темы с ответами:

Функция для отображения времени. - Java
какую использовать функцию, что бы отображалось время? now.get(now.HOUR_OF_DAY) -&gt; ето для часов, а для минут как?

Использовать ProgressBar для показа оставшегося времени на тест - Visual Basic .NET
Приветствую всех, не могу разобраться как пользоваться прогресс баром. Например хочу внедрить его в программу для прохождения тестов. 1...

ProgressBar для отображения процесса удаления файлов (с учетом размера файлов) - C#
Есть папки, которые периодически заполняются ненужными файлами. Нужно создать прогрессБар на каждую папку, когда удаляются файлы из них....

Описать класс для отображения даты и времени - Delphi
Описать класс для отображения даты и времени Time с полями: год, месяц, число, час и минута. Предусмотреть два перегруженных конструктора...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru