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');
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
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ı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.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.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla
#5
(14-09-2018, Saat: 10:20)masteryoda Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.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ı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(14-09-2018, Saat: 09:38)nehirnnn Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.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ı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(14-09-2018, Saat: 09:38)nehirnnn Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.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ı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.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.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla
#10
(16-09-2018, Saat: 15:46)nehirnnn Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.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ı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.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
  KeyStore dosyası kayıp QepnS 8 431 26-06-2019, Saat: 10:15
Son Yorum: yhackup
  Delphi 10.3 - ipa Dosyası Oluşturma Sorunu darkslordd 2 390 27-03-2019, Saat: 19:27
Son Yorum: Fesih ARSLAN
  iphone yüklenen ipa dosyası ipad'lere yüklenemiyor. pro_imaj 3 759 29-06-2018, Saat: 11:41
Son Yorum: pro_imaj
  AndroidManifest Dosyasi Karakter Sorunu codder71 5 913 30-05-2018, Saat: 10:04
Son Yorum: Fesih ARSLAN
  ios ini dosyası okuma yazma doya yolu rahim@kirazyazilim.com 1 736 27-11-2017, Saat: 18:33
Son Yorum: Fesih ARSLAN



Konuyu Okuyanlar: 1 Ziyaretçi