Neler yeni
Türkiye'nin En Güncel Forum Sitesi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı yada giriş yapmalısınız. Forum üye olmak tamamen ücretsizdir.

Ses dosyaları çalma. -java

ByOnur58

Kayıtlı Üye
MFC Üyesi
  • Üyelik Tarihi
    7 Ocak 2015
  • Mesajlar
    2,113
  • MFC Puanı
    10
  • MFC Seviyesi

Googlede kaynak aradığımızda basitce karşımıza çıkacak birçok kaynak var.
En basitinden başlarsak,dosya okuma yazma ile ilgili javanın zengin olduğunu söylememe lüzum yok.
Basit olarak InputStream üzerinden bir ses dosyası yolunu alarak ses dosyasını çalıştırmaya hazırlaması için
AudioStream sınıfına constructur olarak yollamak.
Yani: AudioStream stream = new AudioStream(soundimp);/*Inputstream =soundimp ;*/
Daha sonra,AudioPlayer sınıfı altında bulunan static yapıya sahip playerin Start fonksiyonununa streamı vererek işi bitirebiliriz.
Yani: AudioPlayer.player.start(stream); şeklinde.
Bunları geçelim biraz derine dalalım,ancak öncesinde bu sınıfları kullanabilmek için
import sun.audio.*; paketini dahil etmemiz gerekir.
Bu paket idenizde yok ise idenizin "Window->preferences" menüsünü mütakiben kurduğunuz
java standardı sekmesinden ilgili paketi kullanıma dahil edebilirsiniz.
Evet derinler diyorduk...
Şöyle bir AudioStream sınıfına bir göz atalım.
Belirteyim ki AudioStream sınıfı AudioPlayer ve AudioData sınıflarıyla çalışır.
AudioStream sınıfı ise FilterInputStream sınıfından extends edilmiştir.
Hemen sınıfın üst kısmına baktığmızda:
protected AudioInputStream,AudioFormat ve InputStream adında tanımlanmış sınıfları görebiliriz.
Fazlası olabilir ancak temel olarak bu sınıflar kullanılır.
Örnek olarak bir dosya okuma yazma işleminde ne tür sınıfları ne amaçla kullandığımızı biliyoruz,ses dosyalarıda normal bir dosya
gibi düşünülürse ve gerek performans ve gerek veri işleme adına çeşitli sınıfların olması muhtemel.
Yukarıda ne dedik ?
Inputstream referansını AudioStream sınıfına constructur olarak gönderiyoruz demiştik..
public AudioStream(InputStream inputstream)throws IOException{}
üst satırdaki constructur kodu ise bunu doğruluyor.
Buarada AudioStream sınıfını kulanırken try catch blokları kullanımı zorunlu hale getirilmiş.
Java kendini sağlama almış bir bakıma,çünkü dosya gelmeyebilir veya farklı şeyler.Dolayısıyla Excpetion blogu açmanız gerekiyor.
hemen constructur altında ilk satır super() anahtar kelimesi yer alıyor,bu anahtar kelimeyi bildiğinizi varsayarak yola devam ediyorum.
super(inputstream); şeklinde ,ınputstream referansını üst sınıfa yolluyor. DOTNET ciler için ise bu "base()" anlamına gelir.
Daha sonra InputStream’a BufferedInputStream aracıyla 1024 boyutlu bir alan ayrılır.
Ayrıca aklmıa gelmişken,BufferedInputStream sınıfı bol özellik dolusu bir sınıf olduğunu belirteyim.
Neyse yüzeysel inceleme adına AudioStream constructurundan kurtulalım.
Sınıfı incelemeye devam ettiğimizde getData() adında geridönüş değer tipi AudioData tipinde olan bir metod var.
İsminden ne olduğu anlaşılıyor zaten,ancak burda AudioData sınıfına verilerimiz byte olarak yazılıyor.
AudioInputStream sınıfı demiştik,bu sınıfın read metodunu kullanarak byte bir diziye tüm veriler yazılarak AudioData ya gönderiliyor.
AudioData sınıfına baktığımızda format ayarları-işlemleri ile ilgili bir çalışma yaptığını görüyoruz.
Ancak bizi asıl ilgilendiren sınıf,AudioPlayer sınıfıdır.
Bu sınıf Thread sınıfından extends edilmiş ve hemen akabinde AudioDevice adında bir sınıf kullandığını görüyoruz.
Tabi tüm bu kullanılan sınıfları incelemeye zamanımız yetmez ancak göze çarpan yerleri belirtmeye çalışacağım.
Demin ses dosyası çalmak için kullandığmız; AudioPlayer.player.start(x); ortasındaki player aslında getAudioPlayer adında başka bir metod ile çalışıyor.
getAudioPlayer metodu ilse start metodunu çağırıyor kendi içinde,tabi hepsi bir thread ve tabiki synchronized ile kilitlenmiş vaziyette.
Threadların bolca koştuğu ortamlarda synchronized ile fonksiyonu işaretlemek en güvenli yöntemdir.
Bunu yaparak;"sıranı bekle thread kertenkelesi" dedirtiyorsunuz fonksiyona.
Start ve stop fonksiyonları içinde Channel sınıflarıyla bir çeşit stream olayı yapıldığını belirtirim.
Buarada javada Channel sınıflarını bildiğinizi varsayıyorum.
Kendimize,ihtiyacımıza göre bir ses dosyası çalma sınıfı tasarlarsak threadlarları uyutarak pause,ve AudioPlayerin diğer fonksiyonlarını kullanarak sesi ileri geri sarma işlevlerini katabiliriz.
Son olarak:
InputStream stream = new FileInputStream("sesdosyası.wav");
AudioStream sound = new AudioStream(stream);
AudioPlayer.player.start(sound);
diyerek ses dosyanızı çaldırabilirsiniz.
tabi Trycatch e dikkat...
İyi çalışmalar.
 
Üst Alt