Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 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);
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
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');
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Media player ile yotube ve pcdeki videoları oynatma ekank 3 601 28-03-2020, Saat: 00:40
Son Yorum: SimaWB
  [Çözüldü]Android .aab dosyası oluşmuyor. 41linea41 4 763 16-03-2020, Saat: 14:15
Son Yorum: Fesih ARSLAN
  KeyStore dosyası kayıp QepnS 8 1.889 26-06-2019, Saat: 10:15
Son Yorum: yhackup
  Delphi 10.3 - ipa Dosyası Oluşturma Sorunu darkslordd 2 1.205 27-03-2019, Saat: 19:27
Son Yorum: Fesih ARSLAN
  iphone yüklenen ipa dosyası ipad'lere yüklenemiyor. pro_imaj 3 1.584 29-06-2018, Saat: 11:41
Son Yorum: pro_imaj



Konuyu Okuyanlar: 1 Ziyaretçi