Video mu Mp3

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Video mu Mp3

Mesaj gönderen Lord_Ares »

Media player bileşeni kullanarak, mp3 ve video oynatıcısı yapmak istiyorum. Çalma listesine eklemiş olduğum mp3 ve videoları sırasıyla çaldırmak istiyorum. Fakat sıradaki parça video klip ise ayrı bir forumda tam ekran olarak oynatıcak ve klip bittiğinde bu formu kapatarak çalma listesinde sırada ne varsa devam etmesini istiyorum. Burada sorun sıradaki parçanın video mu mp3 mü olduğunu nasıl algılayacağım. Çünkü çalma listesine şarkı isimlerini uzantısı olmadan eklediğim için uzantıyı kontrol edemiyorum. Bunu nasıl yapmalıyım yol gösterirseniz sevinirim.
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: Video mu Mp3

Mesaj gönderen brs »

Üstdadım bu işinizi görür mü bilemiyorum...

Kod: Tümünü seç

var
  fullFileName : string;

begin
  // Set up a full file name with drive and path
  fullFileName := 'C:\Program Files\Borland\Delphi7\Projects\Unit1.dcu';

  // Show the component parts of this full name
  ShowMessage('Drive = '+ExtractFileDrive (fullFileName));
  ShowMessage('Dir   = '+ExtractFileDir   (fullFileName));
  ShowMessage('Path  = '+ExtractFilePath  (fullFileName));
  ShowMessage('Name  = '+extractfilename  (fullFileName));
  ShowMessage('Ext   = '+ExtractFileExt   (fullFileName));
end;
Drive = C:
Dir = C:\Program Files\Borland\Delphi7\Projects
Path = C:\Program Files\Borland\Delphi7\Projects\
Name = Unit1.dcu
Ext = .dcu
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Video mu Mp3

Mesaj gönderen Lord_Ares »

Teşekkürler Brs, bir de bu şekilde deneyeyim umarım olur.
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Video mu Mp3

Mesaj gönderen thelvaci »

Çalma listeniz TStrings türevi bir property'e sahip kontrol ise; bu durumda o listeye TStrings.AddObject ile herhangi bir nesne ekleyebilirsiniz. Aşağıdaki örneğe bir göz gezdirin:

Kod: Tümünü seç

  TMediaItem = class
  private
    fIsAudio : Boolean;
    fFileName : String;    
  public
    constructor Create(const AFileName : String);
    
    property IsAudio : Boolean read fIsAudio;
    property FileName : String read fFileName;
  end;
  
  constructor TMediaItem.Create(const AFileName : String);
  begin
    inherited Create;
    
    fFileName := AFileName;
    fIsAudio := false;
    // Burada fFileName'in uzantısına göre fIsAudio alanının değerini true yada false yapan kodu yazın.
  end;
  
  // Kullanacağınız noktada..
  FileName := 'c:\xyz.mp3';
  ListBox.Items.AddObject(FileName, TMediaItem.Create(FileName)); 
  
  // biçiminde ekleyebilir ve aşağıdaki biçimde de kontrol edebilirsiniz.
  
  var
    AnObject : TObject;
  begin
   AnObject := ListBox1.Items.Objects[ListBox1.ItemIndex];
   
   if Assigned(AnObject) then
     if AnObject is TMediaItem then
       if TMediaItem(AnObject).IsAudio then ShowMessage('Bu bir audiodur..');
  end;
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: Video mu Mp3

Mesaj gönderen brs »

ListBox yerine LisView tercih ederseniz video ve mp3 hakkında daha fazla bilgi ekleyebilirsiniz...

Kolon 1 adı
kolon 2 süresi
kolon 3 video veya mp3' yolu gibi...
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Video mu Mp3

Mesaj gönderen Lord_Ares »

thelvaci ilginiz ve örneğiniz için teşekkürler fakat vermiş olduğunuz örneği Class oluşturma hakkında yeterli bilgim olmadığı için malesef uyarlamaya çalıştım ama yapamadım. Yinede emeğiniz için teşekkürler.
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Video mu Mp3

Mesaj gönderen thelvaci »

Lord_Ares yazdı:thelvaci ilginiz ve örneğiniz için teşekkürler fakat vermiş olduğunuz örneği Class oluşturma hakkında yeterli bilgim olmadığı için malesef uyarlamaya çalıştım ama yapamadım. Yinede emeğiniz için teşekkürler.
Yapamayacak neyi var ki ? Zorlandığınız husus neresi ise izah etmeye çalışalım. Çalma listesi için hangi sınıfı kullanıyorsunuz ?
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Video mu Mp3

Mesaj gönderen Lord_Ares »

Formumda Çalma listesi , Templistbox adında iki adet listbox kullanıyorum.

1) Çalma listesi adlı listboxa , müzik klasörünün içindeki tüm m3 dosyalarının sadece şarkı isimlerini yüklüyorum.
2) Templiste adlı listboxa da yüklenen mp3 lerin , adı ve tam yollarıyla yüklüyorum.
Resim

İki adet listbox kullanarak yapmamım sebebi, listboxtaki tüm şarkıları sırayla tek tek sona kadar çalmasını sağlamak. media playera şarkının dosya yolunu vermek zorunda olduğum için bende templistbox adında ikinci bir listbox kullanmak zorunda kaldım. ( farklı bir yol bulamadım :D )

Sizin verdiğiniz örnekteki TMediaItem classı da type bloğu altında tanımladım.
Constructor TMediaItem.Create kısmınıda implementationın hemen altına ekledim. (Doğru yermi emin değilim). İşte burada ilk hatayı aldım. fFileName değişkenini tanımadığını söyledi.

İlginiz için teşekkürler.
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: Video mu Mp3

Mesaj gönderen brs »

Üstadım uste belirtmiştim dikkatinizden kaçmış olabilir, sadece bir listview ile mp3'ün birçok bilgisini tutabilirsiniz...
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Video mu Mp3

Mesaj gönderen thelvaci »

TMediaItem'ı kullanabilirseniz zaten iki adet listbox'a da gereksiniminiz kalmayacak. Aşağıdaki kodu type bloğuna kopyalayın:

Kod: Tümünü seç

TMediaItem = class
  private
    fIsAudio : Boolean;
    fFileName : String;   
  public
    constructor Create(const AFileName : String);
   
    property IsAudio : Boolean read fIsAudio;
    property FileName : String read fFileName;
  end;
Cursor'u constructor Create üzerine getirin ve Ctrl+Shift+C tuşlarına basın. Ardından da; constructor'un içini bir önceki örnekte gönderdiğim şekilde ve kendinize özgü değiştirin. Hata vermemesi gerekir.
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Video mu Mp3

Mesaj gönderen Lord_Ares »

Brs, teşekkürler gördüm fakat projeyi listbox ile oluşturdum, dediğine geçmem için epey bir değişiklik yapmam gerekiyor :)))

Tuğrul hocam dediniz şekilde ekledim, ama bir yerde hata yapıyorum sanırım. Aşağıdaki şekilde kısa bir if döngüsü ekledim.

Kod: Tümünü seç

constructor TMediaItem.Create(const AFileName: String);
begin
    inherited Create;

    fFileName := AFileName;
    fIsAudio := false;
    
    if fFileName='.mp3' then fIsAudio:=true else fIsAudio:=false; 
     // Burada fFileName'in uzantısına göre fIsAudio alanının değerini true yada false yapan kodu yazın.
end;
Klasördeki mp3 leri listboxa eklerkende şöyle kullandım

Kod: Tümünü seç

Form1.ListBox2.Items.AddObject(yolu, TMediaItem.Create(yolu));
forma bir adet button ekleyerek denedim. Listbox2 içinde şarkının tam yolu ve ismi ( c:\xyz.mp3 )yazmasına rağmen IsAudio true olmuyor. Ek bir sorunda eğer listboxta satır seçili değil ise list index out of bounds hatası veriyor.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
    AnObject : TObject;
  begin
   AnObject := ListBox2.Items.Objects[ListBox2.ItemIndex];

   if Assigned(AnObject) then
     if AnObject is TMediaItem then
       if TMediaItem(AnObject).IsAudio then ShowMessage('Bu bir audiodur..') else ShowMessage('Değil..');
  end;
Birde siz ikinci listboxa ihtiyacınız kalmayacak demişsiniz ama ben listboxta sadece şarkı isimlerini göstermem gerekiyor. Bu şekilde olunca dosya yolu ve ismi görünüyor
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Video mu Mp3

Mesaj gönderen thelvaci »

Lütfen ama biraz dikkat.... Birinci sorununuz, fFileName = '.mp3' kıyaslamanız. Oysaki constructor'a parametre olarak 'c:\xyz.mp3' geçiyorsunuz ! Dosyanın uzantısını kontrol etmelisiniz constructor'daki kodda. (ExtractFileExt kullanabilirsiniz). İkinci sorununuz; listbox'ın AddObject metodunu aşağıdaki gibi kullanmak:

Kod: Tümünü seç

  ListBox.Items.AddObject('c:\xyz.mp3', TMediaItem.Create('c:\xyz.mp3'));
Oysa şu şekilde kullanmalısınız istediğinize ulaşmak için;

Kod: Tümünü seç

  ListBox.Items.AddObject('Buraya ne yazmak istiyorsanız artık', TMediaItem.Create('c:\xyz.mp3'));
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Video mu Mp3

Mesaj gönderen Lord_Ares »

hocam başta da dediğim gibi, bu konuda acemiyim. constructor hakkında bilgim olmadığı için zorlanıyorum. O yüzden gözümden kaçmış. Dediğiniz gibi
ExtractFileExt ile düzelttim şuan çalışıyor. Fakat en büyük sorun şu kaldı. Listboxta bir satır seçili ise çalışıyor değilse list index out of bounds hatası veriyor. Bunu nasıl aşacağım. Başka bir nesneye (button, edit gibi veya başka bir form açıkken..) tıklarken şarkı değişir ise listboxtaki bu seçililik durumu ortadan kalkacak ve list index out of bounds hatası verecektir.
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Video mu Mp3

Mesaj gönderen thelvaci »

ItemIndex'in durumunu kontrol etmelisiniz o durumda. Muhtemelen göreceğiniz değer -1 olacaktır.
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Video mu Mp3

Mesaj gönderen Lord_Ares »

Farklı bir form açıp tekrar geri döndüğümde listbox selected durumu devre dışı kaldığı için sıradaki diğer şarkıya geçmiyor. Sizin dediğiniz şekilde
deniyeyim. En son çalan itemindexi bir değişkende tutmayı deneyeceğim. Teşekkürler
Cevapla