Konuyu Oyla:
  • Derecelendirme: 5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
FMX Projelerinizde Ses Dosyası Oynatma
#1
Star 
Merhaba,

Yaptığımız uygulamaların kişiliklerini kazanmaları açısından bazen temel fonksiyonların ve ihtiyaçların yerine getirilmesi dışında, uygulamanın yapısını ve özelliklerini arttırmak tüm uygulamanın kalite ve değerini arttırıyor. FMX projelerimizin Android ve iOS tabanlarda yer edinmeye başladığı günden itibaren Delphi FireMonkey platformu üzerinde yapabileceğimiz sayısız güzelliklerin nasıl çok basit hamlelerle mümkün olduğunu hatırlatmak ve kullanımını göstermek, FMX ile yeni tanışan geliştiriciler için faydalı olacaktır.

Bir ses dosyasını FMX projemizde nasıl oynatırız?

FMX.Media kütüphanesinde yer alan TMediaPlayer sınıfı ile .mp3 ve .wav gibi cihazların desteklediği ses dosya formatlarını kolaylıkla oynatma imkanına erişiyoruz. Tek yapmanız gereken Tool Palette üzerinden TMediaPlayer nesnesini arayüze bırakarak oluşturmak (veya benim en çok başvurduğum şekliyle kod üzerinden oluşturmak).

Oluşturulan MediaPlayer1 nesnesinin FileName alanına ses dosyasının adını belirtiyoruz. Daha sonra Play fonksiyonunu tetikleyerek dosyayı oynatabiliyoruz. Ses dosyasını duraklatmak istersek Stop fonksiyonunu kullanıyoruz.

Android platformunda APK dosyasının dizinini TPath.GetDocumentsPath fonksiyonu ile alıyoruz. PathDelim seperatörü ve ardından çaldırmak istediğimiz ses dosyasını (veya dizini ile dosyanın adını ekliyoruz).

procedure Play(fileName: string);
begin
  AMediaPlayer.fileName := TPath.GetDocumentsPath + PathDelim + fileName;
  AMediaPlayer.Play;
end;



Örnek Kullanım

MediaPlayer1.Play('sound.mp3');
Cevapla
#2
Deployment Manager den dosyayı ekledim.

Ancak "java.io.IOException: setDataSource failed" hatasını alıyorum.

Bilgisayarda bakıyorum, Android assets klasörü içinde mp3 dosyası görünüyor.

procedure TfMain.playSound(fileName:string);
begin
mpSound.FileName :=  TPath.GetDocumentsPath + PathDelim + 'assets/deklansor.mp3';
end;
Cevapla
#3
Ses kaydını denediniz mi? ben denediğimde dosya boyutu çok büyük oluyordu marketen indirdiğim diğer ses kayıt uygulamalarında yaptığım kayıtlar çok daha az alan kaplıyordu.

“Do. Or do not. There is no try.”
Cevapla
#4
(14-09-2018, Saat: 09:38)nehirnnn Adlı Kullanıcıdan Alıntı: Deployment Manager den dosyayı ekledim.

Ancak "java.io.IOException: setDataSource failed" hatasını alıyorum.

Bilgisayarda bakıyorum, Android assets klasörü içinde mp3 dosyası görünüyor.

procedure TfMain.playSound(fileName:string);
begin
mpSound.FileName :=  TPath.GetDocumentsPath + PathDelim + 'assets/deklansor.mp3';
end;

Deployment bölümünde Remote Path için .\assets\internal\ olarak belirleyip deneyebilir misiniz? Eğer çalışırsa dosya okuma-yazma yetkileri ile ilgili bir problem olabilir.
Cevapla
#5
(14-09-2018, Saat: 10:20)masteryoda Adlı Kullanıcıdan Alıntı: Ses kaydını denediniz mi? ben denediğimde dosya boyutu çok büyük oluyordu marketen indirdiğim diğer ses kayıt uygulamalarında yaptığım kayıtlar çok daha az alan kaplıyordu.

Hayır, sadece lokaldeki dosyayı oynatmaya çalıştım.
Özelliklerle ilgili olabilir, bitsample ve sıkıştırma codecleri ile boyut düşürülebilir.

(14-09-2018, Saat: 14:24)Abdullah ILGAZ Adlı Kullanıcıdan Alıntı:
(14-09-2018, Saat: 09:38)nehirnnn Adlı Kullanıcıdan Alıntı: Deployment Manager den dosyayı ekledim.

Ancak "java.io.IOException: setDataSource failed" hatasını alıyorum.

Bilgisayarda bakıyorum, Android assets klasörü içinde mp3 dosyası görünüyor.

procedure TfMain.playSound(fileName:string);
begin
mpSound.FileName :=  TPath.GetDocumentsPath + PathDelim + 'assets/deklansor.mp3';
end;

Deployment bölümünde Remote Path için .\assets\internal\ olarak belirleyip deneyebilir misiniz? Eğer çalışırsa dosya okuma-yazma yetkileri ile ilgili bir problem olabilir.
Gece deneyim. Ama gündüz baktığımda şöyle bir durum vardı. 
mpSound. FileName olarak görünen yolla, benim telefonda görünen yol aynı değil. Büyük ihtimalle sorun bundan kaynaklanıyor. Detayını önerinizi denedikten sonra yazarım.
Cevapla
#6
(14-09-2018, Saat: 14:24)Abdullah ILGAZ Adlı Kullanıcıdan Alıntı:
(14-09-2018, Saat: 09:38)nehirnnn Adlı Kullanıcıdan Alıntı: Deployment Manager den dosyayı ekledim.

Ancak "java.io.IOException: setDataSource failed" hatasını alıyorum.

Bilgisayarda bakıyorum, Android assets klasörü içinde mp3 dosyası görünüyor.

procedure TfMain.playSound(fileName:string);
begin
mpSound.FileName :=  TPath.GetDocumentsPath + PathDelim + 'assets/deklansor.mp3';
end;

Deployment bölümünde Remote Path için .\assets\internal\ olarak belirleyip deneyebilir misiniz? Eğer çalışırsa dosya okuma-yazma yetkileri ile ilgili bir problem olabilir.
Çalışmadı maalesef.

Komut satırı şu şekilde:
mpSound.FileName := TPath.GetDocumentsPath + PathDelim + 'assets' + PathDelim + fileName;

Yazdığım komut sonrasında oluşan dosya yolu şu şekilde görünüyor:
'/data/user/0/com.xxxx.yyyy/files/assets/deklansor.mp3'

Dosya yöneticisi ile telefonuma baktığımda dosya yolu şu şekilde görünüyor:
storage/emulated/0/Android/data/com.xxxx.yyyy/files/deklansor.mp3

Telefonda görünen dosya yolunu nasıl elde edebilirim?
Cevapla
#7
Merhaba,
Deployment Manager penceresinde @Abdullah ILGAZ ın belirttiği tanımlamayı doğru yaptıysanız, bu dosyaya aşağıdaki şekilde ulaşabilirsiniz.
mpSound.FileName := TPath.Combine(TPath.GetDocumentsPath, fileName);
Cevapla
#8
Herşeyi harfi harfine denedim. Olmadı.
Sorun yukarıda verdiğim örnekle alakalı gibi. GetDocumentsPath, benim cihazımda olmayan bir yolu işaret ediyor.
Cevapla
#9
(16-09-2018, Saat: 15:46)nehirnnn Adlı Kullanıcıdan Alıntı: Herşeyi harfi harfine denedim. Olmadı.
Sorun yukarıda verdiğim örnekle alakalı gibi. GetDocumentsPath, benim cihazımda olmayan  bir yolu işaret ediyor.

Kod üzerinden Assets klasörüne erişmenize gerek yok. Orası apk'nın hedef gösterildiği ana dizin anlamına geliyor. Siz sadece projenin dproj dosyasının olduğu klasöre mp3 dosyasını koyun ve daha sonra Deployment kısmından daha önce söylediğim şekli ile RemotePath alanını belirleyin. Daha sonra kodunuzu derlediğinizde çalışacaktır.
Cevapla
#10
(16-09-2018, Saat: 15:46)nehirnnn Adlı Kullanıcıdan Alıntı: Herşeyi harfi harfine denedim. Olmadı.
Sorun yukarıda verdiğim örnekle alakalı gibi. GetDocumentsPath, benim cihazımda olmayan  bir yolu işaret ediyor.

(14-09-2018, Saat: 09:38)nehirnnn Adlı Kullanıcıdan Alıntı: Deployment Manager den dosyayı ekledim. 

Ancak "java.io.IOException: setDataSource failed" hatasını alıyorum. 

Bilgisayarda bakıyorum, Android assets klasörü içinde mp3 dosyası görünüyor.

procedure TfMain.playSound(fileName:string);
begin
mpSound.FileName :=  TPath.GetDocumentsPath + PathDelim + 'assets/deklansor.mp3';
end;

GetDocumentPath, Android platformunda zaten assets altındaki documents dizinini ifade etmektedir. 
Bu nedenle dizin tanımında  'assets/deklansor.mp3' yerine, aşağıdaki tanım yeterli olacaktır. 
mpSound.FileName := TPath.Combine(TPath.GetDocumentsPath, 'deklansor.mp3');
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Cihaza ipa dosyası yükleme emrahozten 13 1.995 27-10-2023, Saat: 17:13
Son Yorum: emrahozten
  Android 32-Bit Library Eklenen Jar Dosyası yilmazalp 4 624 10-09-2023, Saat: 01:01
Son Yorum: yilmazalp
  Android *.gif Dosya Oynatma. hayalyilmaz43 15 3.468 05-05-2023, Saat: 10:11
Son Yorum: RAD Coder
  Simülatör İle .ipa Dosyası Oluşturulabilir Mi? glagher 12 2.916 08-04-2022, Saat: 20:36
Son Yorum: ahmet6513
  PAserver klasöründe tar.gz dosyası yok ve deployment de linux 64 bit görünmüyor. diseqc 4 1.067 09-03-2022, Saat: 08:09
Son Yorum: diseqc



Konuyu Okuyanlar: 1 Ziyaretçi