Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Отслеживание свойства Position в MediaPlayer


Автор: inside 13.7.2006, 18:46
Подскажите, как отслеживать сколько проиграл MediaPlayer, чтобы можно было создать полосу прокрутки. Хочется, чтобы она двигалась по мере проигрывания звука. Спасибо =) 

Автор: Paranoik 13.7.2006, 21:28
На таймер вешай...  smile 

Код

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if MediaPlayer1.FileName <> '' then begin
TrackBar1.Max := MediaPlayer1.Length;
TrackBar1.Position := MediaPlayer1.Position;
end;
end;
 

Автор: inside 13.7.2006, 22:59
я тоже сделал с таймером.. только с помощью WinAPI, SetTimer. 

TrackBar1.Max := MediaPlayer1.Length;
так писать бы не хотелось, потому что Трэкбар у меня не очень большой - и при динном файле слишком много делений - они сливаются. 

А таймер не подгружает проигрывание файла - может стоит в разные потоки?
 

Автор: Alexeis 13.7.2006, 23:26
Цитата(inside @  13.7.2006,  22:59 Найти цитируемый пост)
так писать бы не хотелось, потому что Трэкбар у меня не очень большой

ну так можно писать
Код

TrackBar1.Max := MediaPlayer1.Length div 1000;
//и в таймере
TrackBar1.Position := MediaPlayer1.Position div 1000;

Цитата(inside @  13.7.2006,  22:59 Найти цитируемый пост)
А таймер не подгружает проигрывание файл

нет особенно если его ставить где-то на 200мс
 

Автор: Paranoik 22.7.2006, 23:43
Цитата

так писать бы не хотелось, потому что Трэкбар у меня не очень большой - и при динном файле слишком много делений - они сливаются. 

ну дык отключи деления... 

Автор: SAVANE 6.9.2006, 17:05
Оно то пашет но у меня на проге начало подтормаживать программу!
А как сдлать так чтоб писало время до конца песни?

Автор: Alexeis 6.9.2006, 19:25
Цитата(SAVANE @  6.9.2006,  17:05 Найти цитируемый пост)
А как сдлать так чтоб писало время до конца песни? 

Вычитать из полного времени прошедшее.

Автор: BEST13 11.5.2008, 01:19
У меня тоже проблемка Positeon. Мне нужно что б файл открывался с опрделёного места, но почемуто не работает, вот код:
Код

SB_playClick(Sender);
TrackBar1.Position:=StrToInt(p);

вот сама процедура play ,может в ней дело?
Код

procedure TForm1.SB_playClick(Sender: TObject);
begin

 MediaPlayer.Close;
 If ListBox.ItemIndex < 0 then
 begin
 ShowMessage('Выбирите трек');
 MediaPlayer.Close;
 end
 else
 begin
 MediaPlayer.FileName:=ListBox.Items.Strings[ListBox.ItemIndex];
 MediaPlayer.Open;
 MediaPlayer.TimeFormat := tfMilliseconds;
 MediaPlayer.Display := Form2;
 MediaPlayer.DisplayRect := Form2.ClientRect;
 Timer1.Enabled:=True;
 TrackBar1.Max := MediaPlayer.TrackLength[0];
 Form2.TB_length_Ekran.Max := MediaPlayer.TrackLength[0];
  MediaPlayer.Play;
end;

Автор: BEST13 11.5.2008, 18:43
Ну помогите мне, пожалуйста

Автор: Данкинг 11.5.2008, 20:53
А что именно не работает-то? 

Автор: BEST13 11.5.2008, 21:53
Цитата

Мне нужно что б файл открывался с опрделёного места, но почемуто не работает,

Я записывою поизицыю трекбара в переменю s , потом считываю и вызываю процедуру плей ,а играть начинает сначало(, а не стого момента 

Автор: HEyMEXA 11.5.2008, 22:00
Цитата

У меня тоже проблемка Positeon. Мне нужно что б файл открывался с опрделёного места, но почемуто не работает, вот код:



вот как с помощью трек бара можно перейти на нужно место в фильме или еще в чом нибуть

Код

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
mediaplayer1.Position:=trackbar1.Position;
mediaplayer1.Play;
end;

Автор: Qu1nt 11.5.2008, 22:10
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  with MediaPlayer1 do
  begin
    FileName := 'c:\cool.mp3';
    Open;
    Play;
    TrackBar1.Max := TrackLength[0];
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  e: TNotifyEvent;
begin
  with TrackBar1 do
  begin
    e := OnChange;
    OnChange := nil;
    Position := MediaPlayer1.Position;
    OnChange := e;
  end;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  MediaPlayer1.Position := TrackBar1.Position;
  MediaPlayer1.Play;
end;

Timer1 - для самостоятельного передвижения ползунка (%

Автор: BEST13 11.5.2008, 22:23
Цитата

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  with MediaPlayer1 do
  begin
    FileName := 'c:\cool.mp3';
    Open;
    Play;
    TrackBar1.Max := TrackLength[0];
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  e: TNotifyEvent;
begin
  with TrackBar1 do
  begin
    e := OnChange;
    OnChange := nil;
    Position := MediaPlayer1.Position;
    OnChange := e;
  end;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  MediaPlayer1.Position := TrackBar1.Position;
  MediaPlayer1.Play;
end;




это у меня есть и трекбар двигаеться, и если его мышкой перемишять оно перематывает а вот чтоб он сразу начал играть с определёной точки нет. Может у меня где тов других процедурах ошибки? Вот весь код програмы:
Код

procedure TForm1.FormCreate(Sender: TObject);
var i:Integer;
begin



   p:=true;
   igrait:=false;
end;

procedure TForm1.SB_OPENClick(Sender: TObject);
var
i: integer; nam,s,p: string;  f:textfile;
begin
  OpenDialog.Title := 'Выбор клипа';
  if OpenDialog.Execute then
     if OpenDialog.DefaultExt = 'bpl' then
       begin
       ListBox.Clear;
       ListBox1.Clear;
       AssignFile(f,OpenDialog.FileName);
       Reset(f);
         While not Eof(f) do
          begin
           Readln(f,s);
           Listbox.Items.Add(s);
           Delete(s,1,LastDelimiter('\',s));
           ListBox1.Items.Add(s);
          end;
       end
     else
  begin
  for i:=0 to OpenDialog.Files.Count-1 do
    begin
    ListBox.Items.Add(OpenDialog.Files.Strings[i]);
    nam:=ExtractFileName(OpenDialog.Files.Strings[i]);
    ListBox1.Items.Add(nam);
     end;
  end;
  If OpenDialog.FilterIndex=2 then
   begin

       s:=''; p:='';
       ListBox.Clear;
       ListBox1.Clear;
       AssignFile(f,OpenDialog.FileName);
       Reset(f);
       Readln(f,s);
       Read(f,p);
       Listbox.Items.Add(s);
       ListBox.ItemIndex:=0;
       Delete(s,1,LastDelimiter('\',s));
       ListBox1.Items.Add(s);
       ListBox1.ItemIndex:=ListBox.ItemIndex;

       SB_playClick(Sender);
       TrackBar1.Position:=StrToInt(p);

    end;
  ListBox.ItemIndex:=0;
  ListBox1.ItemIndex:=ListBox.ItemIndex;
end;

procedure TForm1.SB_playClick(Sender: TObject);
begin

 MediaPlayer.Close;
 If ListBox.ItemIndex < 0 then
 begin
 ShowMessage('Выбирите трек');
 MediaPlayer.Close;
 end
 else
 begin
 MediaPlayer.FileName:=ListBox.Items.Strings[ListBox.ItemIndex];
 MediaPlayer.Open;
 MediaPlayer.TimeFormat := tfMilliseconds;
 MediaPlayer.Display := Form2;
 MediaPlayer.DisplayRect := Form2.ClientRect;
 Timer1.Enabled:=True;
 TrackBar1.Max := MediaPlayer.TrackLength[0];
 Form2.TB_length_Ekran.Max := MediaPlayer.TrackLength[0];
  MediaPlayer.Play;
end;


end;

procedure TForm1.SB_StopClick(Sender: TObject);
begin
 MediaPlayer.Stop;
 MediaPlayer.Close;
  Timer1.Enabled:=False;
end;

procedure TForm1.SB_VolumClick(Sender: TObject);
begin
  if TB_Volume.Visible=False then
    TB_Volume.Visible := True
  else
  TB_Volume.Visible := False;
end;

procedure TForm1.TB_VolumeChange(Sender: TObject);
var
  volume:LongWord;
begin

  volume := 6500* (TB_Volume.Max - TB_Volume.Position);
  volume := volume +   (volume shl 16);
  waveOutSetVolume(MIDI_MAPPER,volume);
end;
procedure TForm1.SB_NOVOLUMeClick(Sender: TObject);

begin

  if p then
   begin
    waveOutSetVolume(MIDI_MAPPER,0);
    p:=false;
   end
  else
   begin
    TB_VolumeChange(SEnder);
    p:=true
    end;
end;

procedure TForm1.MediaPlayerNotify(Sender: TObject);
begin

 if ListBox1.ItemIndex < ListBox1.Count-1  then
 if MediaPlayer.Position=MediaPlayer.Length then
 begin
  ListBox.ItemIndex:=ListBox.ItemIndex+1;
  ListBox1.ItemIndex:=ListBox.ItemIndex;
  SB_PlayClick(sender)
  end


end;

procedure TForm1.Timer1Timer(Sender: TObject);
 var e,r : tnotifyevent;    m,s :integer;
begin
 e:=TrackBar1.OnChange;
 trackBar1.OnChange:=nil;
 TrackBar1.position:=MediaPlayer.position;
  trackBar1.OnChange:=e;
 Form2.TB_length_Ekran.Position:=TrackBar1.position;

 L_time.Caption :=FormatTime(MediaPlayer.Position) + ' / '+ FormatTime(MediaPlayer.Length);
 Form2.L_Ekran_Time.Caption:=  L_time.Caption;

 if (mediaplayer.position = mediaplayer.Length)and(ListBox.Items.Count-1=ListBox.ItemIndex) then
   begin
  MediaPlayer.Stop;
  Form2.Color:=clActiveCaption;
  end;


end;


procedure TForm1.SB_PauseClick(Sender: TObject);
begin
MediaPlayer.Pause;
end;

procedure TForm1.SB_BackClick(Sender: TObject);
begin
   if ListBox.ItemIndex > 0 then
     begin
        ListBox.ItemIndex := ListBox.ItemIndex - 1;
        SB_playClick(Sender);
              end;
              ListBox1.ItemIndex:=ListBox.ItemIndex;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
  ListBox.ItemIndex := ListBox1.ItemIndex;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
 MediaPlayer.position:=TrackBar1.position;
 Form2.TB_length_Ekran.Position:=TrackBar1.Position;
   MediaPlayer.Play;
end;

procedure TForm1.SB_NextClick(Sender: TObject);
begin
     if ListBox1.ItemIndex < ListBox1.Count then
     begin
        ListBox.ItemIndex := ListBox.ItemIndex + 1;
        SB_playClick(Sender);
              end;
              ListBox1.ItemIndex:=ListBox.ItemIndex;
end;

procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
SB_playClick(Sender);
end;

procedure TForm1.N1Click(Sender: TObject);
begin
SB_playClick(Sender);
end;

procedure TForm1.N2Click(Sender: TObject);
begin
SB_PauseClick(Sender);
end;

procedure TForm1.N3Click(Sender: TObject);
begin
SB_StopClick(Sender);
end;

procedure TForm1.N5Click(Sender: TObject);
begin
SB_NextClick(Sender);
end;

procedure TForm1.N6Click(Sender: TObject);
begin
SB_BackClick(Sender);
end;



procedure TForm1.N8Click(Sender: TObject);
begin

Form3.Visible:=True;

end;

procedure TForm1.N10Click(Sender: TObject);
var poz:integer;
begin
   SB_StopClick(Sender);
   form3.Close;
   ListBox.ItemIndex:=ListBox1.ItemIndex;
   ListBox1.DeleteSelected;
   ListBox.DeleteSelected;
   ListBox.ItemIndex:=poz;
   ListBox.ItemIndex:=ListBox1.ItemIndex;
end;

function TForm1.FormatTime(Time: Integer): string;
const
  sec  = 1000;
  min  = 60 * sec;
  hour = 60 * min;
var
  h, m, s : Integer;
begin
  h := Time div hour;
  m := (Time div min) mod 60;
  s := (Time div sec) mod 60;
  if Time < hour then
    Result := Format('%d:%.2d', [m, s])
  else
  Result := Format('%d:%.2d:%.2d', [h, m, s]);
end;

procedure TForm1.SB_Save_AsClick(Sender: TObject);
var i:integer;  f:textfile;
begin
    SD.DefaultExt:='bpl';
   if Sd.Execute then
     begin
       AssignFile(F, SD.FileName);
       Rewrite(f);
       For i:=0 to ListBox.Count-1  do
         begin
          writeln(f,Listbox.Items.Strings[i]);
         end;
       CloseFile(f);
      end;
end;


procedure TForm1.SB_SaveV_asClick(Sender: TObject);
var i:integer; f:textfile;
begin
 SD.DefaultExt:='bvb';
 if sd.Execute then
  begin
   AssignFile(f,SD.FileName);
   Rewrite(f);
   writeln(f,Listbox.Items.Strings[Listbox.ItemIndex]);
   Writeln(f,TrackBar1.Position);
   CloseFile(f);
 end;
end;

Автор: HEyMEXA 11.5.2008, 22:32
выложи исходники гораздо легче будет разобраься чем в этом ужасно длином коде а то не поймеш где именно там начинаеться воспроизведение

Автор: BEST13 12.5.2008, 21:41
Вот исходник, буду блогадарен за исправления и советы по рацыонализацыи кода. Зарание спосибо

Автор: Qu1nt 12.5.2008, 22:17
1.
Зачем столько мусора таскать с собой? В папке с программой создай "батник" с таким содержанием и запусти.
Код

del /s *.~*
del /s *.dcu
del /s *.dsk
del /s *.obj
del /s *.dsm
del /s *.rsm
del /s *.ddp
del /s *.cfg
del /s *.local
del /s *.bdsgroup
del /s *.identcache
del /s *.log
rd __history /S /Q

Не забывай удалять екзешник. Итого: уменьшение архива в пять раз.
2.
Читать код с таким оформлением - отказываюсь.

Автор: BEST13 12.5.2008, 22:43
что за файлы удали этот код, буду оч блогадарен если обясните (а то я новичок,и первый раз с бат файлом работал)?

Автор: Qu1nt 12.5.2008, 22:49
Всякие-разные временные файлы (%

Автор: BEST13 14.5.2008, 16:31
Ну так ,кто-то нашол у меня ошибку?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)