media player

FireMonkey ve Mobil uygulama (iOS, Android, Windows Phone) ile ilgili sorularınızı bu foruma sorabilirsiniz.
Cevapla
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

media player

Mesaj gönderen Serhat »

İyi akşamlar;

Projemde media player ekli olmasına rağmen resimdeki gibi sanki eklememiş gibi kodların altı kırmızı. bu neden olabilir?

Media playa istediğim soundu atamak için opendialog yerine ne kullanabilirim? neden android uygulamaya opendialog ekleyemiyorum acaba...

Kod: Tümünü seç

procedure PlayAudio(ResourceID: string);
var
  ResStream: TResourceStream;
  TmpFile: String;
begin
  ResStream := TResourceStream.Create(HInstance, ResourceID, RT_RCDATA);
  try
    TmpFile := TPath.Combine(TPath.GetTempPath, 'tmp.mp3');

    ResStream.Position := 0;
    ResStream.SaveToFile(TmpFile);
     MediaPlayer.FileName := TmpFile;

     MediaPlayer1.Play;

  finally
    ResStream.Free;
  end;
end;
Resim
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: media player

Mesaj gönderen fesiharslan »

Merhaba;
Projeyi Compile ettiğinizde Messages penceresinde uyarı yoksa, kırmızı çizgili uyarıları dikate almayın.
Derleme sırasında bir uyarı varsa bunu paylaşın yardımcı olalım.
Ayrıca interface bölümündeki Uses kısmında MediaPlayer Unit'inin tanımlı olup olmadığına bakın. Tanımlı değilse FMX.Media referansını ekleyin.
FMX kütüphanesinde OpenDialog nesnesi yok. Harici yazılım veya uygulamaların birçoğu kendi uygulamalarına özgü diyalog pencereleri geliştirmişlerdir.
En mantıklısı;
Mobil cihazın müzik klasörünün altında yer alan tüm klasör ve dosyaları listeleyerek yapabilirsiniz. Oluşturduğunuz bu arama penceresi ( Diyalog penceresi)'nı tüm uygulamalarınız kullanabilirsiniz.
Bunun için System.IOUtils.TPath.GetSharedMusicPath klasörünü ana klasör olarak seçin ve bu klasörün altındaki tüm klasör ve alt klasörlere birlikte belirlenmiş olduğunuz dosya tiplerini bir listbox'ta listeleyip, seçebilirsiniz.
En son fesiharslan tarafından 05 Haz 2016 12:47 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: media player

Mesaj gönderen fesiharslan »

Daha önce paket programlar bölümüne paylaştığım bir ses kayıt ve MediaPlayer uygulaması.
viewtopic.php?f=12&t=35720
Ayrıca yine aynı bölümde paylaştığım bir müzik player uygulamasında, müzik dosyaları bir ListView'e alınmakta (Klasör ve alt klasörler de dahil arama fonksiyonları kullanılmıştır) ve seçilen müzik dosyası çalınmaktadır.
Link:
viewtopic.php?f=12&t=35733&p=192629&hilit=Dosya#p192629

İyi çalışmalar...
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

Re: media player

Mesaj gönderen Serhat »

Hocam; Uses kısmında FMX.Media tanımlı fakat bu hata neden oluşmuş olabilir ki...

[DCC Error] Main.pas(188): E2003 Undeclared identifier: 'MediaPlayer1'
[DCC Error] Main.pas(188): E2066 Missing operator or semicolon
[DCC Error] Main.pas(190): E2066 Missing operator or semicolon
[DCC Warning] Main.pas(216): W1000 Symbol 'SharedActivityContext' is deprecated: 'Use TAndroidHelper.Context'
[DCC Error] Main.pas(324): E2250 There is no overloaded version of 'Synchronize' that can be called with these arguments
[DCC Fatal Error] Alarm.dpr(6): F2063 Could not compile used unit 'Main.pas'
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: media player

Mesaj gönderen fesiharslan »

Hatada, Interface bölümünde MediaPlayer1 nesnesinin tanımlı olmadığı bildiriliyor.
Interface > type bölümünde

Kod: Tümünü seç

MediaPlayer1:TMediaPlayer;
tanımlı olup olmadığına bakın. Tanımlı değilse yukarıdaki tanımlamayı ekleyin.
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: media player

Mesaj gönderen fesiharslan »

Sonradan dikkatimi çekti.
Hata, kullanmış olduğunuz procedure (PlayAudio(ResourceID: string))'den kaynaklanıyor. Oluşturduğunuz procedure Formunuza ait bir metod olmadığından, derleyici tarafından tanımsız olarak algılanıyor.
Yapmanız gereken;

1. Yol Procedure'ü Form Class'ına entegre etmeniz.

Bunun için procedure adının ön kısmına Form Class adını ekleyin.

Örneğin;

Kod: Tümünü seç

procedure TForm1.PlayAudio(ResourceID: string);
Daha sonra imleç procedure içindeyken Ctrl+Shift+C tuşlarına birlikte basarak procedurun Interface kısmının tamamlanmasını sağlayın.
Böylece procedure form sınıfına ait olduğundan form sınıfının tüm kaynaklarını kullanacaktır ve uygulamanız hata vermeyecektir.

2. Yol Procedure'ü Form Class'ına entegre etmeden doğrudan Form Adı ile form kaynaklarını kullanın.

Örneğin

Kod: Tümünü seç

procedure PlayAudio(ResourceID: string);
var
  ResStream: TResourceStream;
  TmpFile: String;
begin
  ResStream := TResourceStream.Create(HInstance, ResourceID, RT_RCDATA);
  try
    TmpFile :=TPath.Combine(TPath.GetTempPath, 'tmp.mp3');

    ResStream.Position := 0;
    ResStream.SaveToFile(TmpFile);
    Form1.MediaPlayer1.FileName := TmpFile;

    Form1.MediaPlayer1.Play;

  finally
    ResStream.Free;
  end;
end;
İyi çalışmalar...
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

Re: media player

Mesaj gönderen Serhat »

Hocam kusuruma bakmayın konuyu açtığım için utandım; uykusuzluktan kafa gitmiş :shock:

Hocam ikici bir konu açmadan aslında yapmak istediğimi bu konu üzerinden müsaadenizle sorayım; Android uygulama yani apk ile birlikte bir mp3'ü telefona yüklenmesini sağlayabilir miyim veya telefonun zil seslerini listviewde nasıl listeleyebilirmiyim.


Saygılarımla...
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: media player

Mesaj gönderen fesiharslan »

Serhat yazdı:Hocam kusuruma bakmayın konuyu açtığım için utandım; uykusuzluktan kafa gitmiş :shock:

Hocam ikici bir konu açmadan aslında yapmak istediğimi bu konu üzerinden müsaadenizle sorayım; Android uygulama yani apk ile birlikte bir mp3'ü telefona yüklenmesini sağlayabilir miyim veya telefonun zil seslerini listviewde nasıl listeleyebilirmiyim.


Saygılarımla...
Rica ederim. Zaman zaman hepimizin başına bu tip olaylar gelmiştir.

Apk ile birlikte mp3 dosyasını 2 farklı yolla yükleyebilirsiniz.

1. Yol; Uygulama içerisinde Resources kullanmak;
1- Project > Resources and Images penceresinden bir mp3 dosyası (veya herhangi bir dosya da olabilir) ekleyin.
2- Aynı pencerede bu resource dosyasına tanımlayıcı bir isim verin (Resource Identifier).
3- Resource Type alanından da kaynak dosya tipini RCDATA seçin ve OK butonu ile işlemcinizi tamamlayın.
4- Projeyi Build edin.
5- Build işlemi sonucu oluşan .dres dosya adını implementation bölümünde {$R DresDosyaAdı.dres} şeklinde tanımlayın.
6- Daha sonra uygulama içerisinde (ilk açılışta da olabilir) herhangi bir satırda ResourceStream metodu ile mp3 dosyasını alarak herhangi bir klasöre kopyalayabilirsiniz.

Örneğin;

Kod: Tümünü seç

var
  Mp3Stream: TResourceStream;
begin
  Mp3Stream := TResourceStream.Create(HInstance, 'ResAdi', RT_RCDATA);

2. Yol; Deployment kullanarak dosya yüklemek;

1- Project > Deployment Manager penceresinden Add butonu ile mp3 dosyasını ekleyin.
2- Remote path sütunundan dosyanın kopyalanacağı konumu belirleyin.
3- Projeyi Build edin.
Not: Bu yöntemde, dosya apk kurulumu sırasında Remote Path kısmında belirttiğiniz konuma otomatik olarak kurulacaktır. Ek bir kod yazmanıza gerek yok.
İyi geceler...
Kullanıcı avatarı
dogan
Üye
Mesajlar: 173
Kayıt: 17 Eki 2014 10:11

Re: media player

Mesaj gönderen dogan »

Selmalar;

Daha önceden sizin yapmış olduğunuz bir media play uygulaması vardı forumda aradım bulamadım, bu nedenden yeni konu açmaktansa bu konu üzerinden, takıldığım konu hakkında yardımcı olabilir misiniz.

Hocam telefondaki mp3 leri listviewe listelemek istiyorum fakat uygulamayı harddiske kurduğumda telefondaki mp3 göremiyorum bunun için ne yapabilirim...


Kod: Tümünü seç

function TForm1.GetArsHedef(): String;
const
  DosyaAdi: String = 'Gorusme.mp3';
begin
{$IFDEF ANDROID}          // Dahili Hafıza Müzik (/storage/emulated/0/Music) klasörü
  Result := TPath.Combine(TPath.GetSharedMusicPath, DosyaAdi);
{$ELSE}
{$IFDEF IOS}    { /private/var/mobile/Applications/<application ID> }
  Result := TPath.GetHomePath + '/Documents/' + DosyaAdi;
{$ELSE}    { Win=C:\Users\Public\Music }
  Result := TPath.Combine(TPath.GetSharedMusicPath, DosyaAdi);
{$ENDIF}
{$ENDIF}
end;

procedure TForm1.Image1Click(Sender: TObject);
var
  Konum: string;
  AramaSecenegi: TSearchOption;
begin
  Konum := TPath.GetDirectoryName(GetArsHedef());
  if not TDirectory.Exists(Konum) then
  begin
    ShowMessage('Belirtilen konum bulunamadı');
    Exit;
  end;
  { ilk Klasörden başlayarak en iç klasöre kadar ardaşık tüm dosyaları sıralar. }
  AramaSecenegi := TSearchOption.soAllDirectories;
  // LSearchOption := TSearchOption.soTopDirectoryOnly; //Ana klasör ve dosyaları listeler (Alt Klasörleri listelemez)
  ListView1.Items.Clear;
  for Konum in TDirectory.GetFiles(Konum, '*.mp3', AramaSecenegi) do
    With ListView1.Items.Add do
    begin
      Text := (ListView1.Items.Count).ToString + ' - ' + TPath.GetFileName(Konum);
      Detail := Konum;
    end;
end;
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: media player

Mesaj gönderen fesiharslan »

dogan yazdı:Selmalar;

Daha önceden sizin yapmış olduğunuz bir media play uygulaması vardı forumda aradım bulamadım, bu nedenden yeni konu açmaktansa bu konu üzerinden, takıldığım konu hakkında yardımcı olabilir misiniz.

Hocam telefondaki mp3 leri listviewe listelemek istiyorum fakat uygulamayı harddiske kurduğumda telefondaki mp3 göremiyorum bunun için ne yapabilirim...


Kod: Tümünü seç

function TForm1.GetArsHedef(): String;
const
  DosyaAdi: String = 'Gorusme.mp3';
begin
{$IFDEF ANDROID}          // Dahili Hafıza Müzik (/storage/emulated/0/Music) klasörü
  Result := TPath.Combine(TPath.GetSharedMusicPath, DosyaAdi);
{$ELSE}
{$IFDEF IOS}    { /private/var/mobile/Applications/<application ID> }
  Result := TPath.GetHomePath + '/Documents/' + DosyaAdi;
{$ELSE}    { Win=C:\Users\Public\Music }
  Result := TPath.Combine(TPath.GetSharedMusicPath, DosyaAdi);
{$ENDIF}
{$ENDIF}
end;

procedure TForm1.Image1Click(Sender: TObject);
var
  Konum: string;
  AramaSecenegi: TSearchOption;
begin
  Konum := TPath.GetDirectoryName(GetArsHedef());
  if not TDirectory.Exists(Konum) then
  begin
    ShowMessage('Belirtilen konum bulunamadı');
    Exit;
  end;
  { ilk Klasörden başlayarak en iç klasöre kadar ardaşık tüm dosyaları sıralar. }
  AramaSecenegi := TSearchOption.soAllDirectories;
  // LSearchOption := TSearchOption.soTopDirectoryOnly; //Ana klasör ve dosyaları listeler (Alt Klasörleri listelemez)
  ListView1.Items.Clear;
  for Konum in TDirectory.GetFiles(Konum, '*.mp3', AramaSecenegi) do
    With ListView1.Items.Add do
    begin
      Text := (ListView1.Items.Count).ToString + ' - ' + TPath.GetFileName(Konum);
      Detail := Konum;
    end;
end;
Merhaba;
GetArsHedef fonksiyonu yalnızca Dahili Hafıza Müzik Klasörünün altında yer alan mp3 dosyalarını listeler.
Bu klasörünüzde herhangi bir mp3 dosyası yoksa, listelememesi normaldir.
SDCard veya Telefonun kendi Storage'ı üzerindeki tüm mp3' leri listelemek isterseniz, Konum değişkenine doğrudan ana directory'yi atayarak arama yaptırın.

İyi çalışmalar...
Kullanıcı avatarı
dogan
Üye
Mesajlar: 173
Kayıt: 17 Eki 2014 10:11

Re: media player

Mesaj gönderen dogan »

Teşekkür ederim hocam...
Cevapla