22
2011
Android ve ses dosyaları
Android Üzeriden Ses ve Medya
Android ortamında ses dosyalarını çalıştırmak için SoundPool ve MediaPlayer isimli iki tane API kullanılabilir. Tekrarlamalı ve/veya birden çok sesi aynı anda çalabilen SoundPlayer küçük ses sliplerini çalmak kullanılır. SoundPool ile çalınan ses dosyalarının ise 1MB’ı aşmamaları gerekmektedir.
SoundPool vasıtası ile istenilen herhangi bir zamanda müzik dosyaları yüklenebilmektedir ve bu yüklemenin tamamlanıp tamamlanmadığının kontrolü, Android API 8 versiyonu içerisindeki OnLoadCompleteListener aracı mümkün olmaktadır.
Android tarafından desteklenen farklı ses katarlarını kontrol etmek için telefona ait ses düğmesi ayarlanabilir. Örneğin arama sırasında, arama sesi ses kontrol düğmesi tarafından artırılıp azaltılabilir. Uygulamanız içerisinde ses tipini ayarlayarak medya içerisindeki ses katarının kontrol edebilirsiniz.
context.setVolumeControlStream(AudioManager.STREAM_MUSIC);
Daha uzun müzikleri çalmak için Mediaplayer API’sini kullanmak çok daha uygun çözüm olarak görülmektedir.
SoundPool Örneği
Bu örnekte telefonun ekranına dokununca bir müzik çalan uygulama gerçekleştirilecektir.
Aşağıdaki özelliklerde bir Android projesi oluşturunuz.
Main.xml :
<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:orientation=”vertical”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”>
<TextView
android:text=”Click on the screen to start playing”
android:id=”@+id/textView1″
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”>
</TextView>
</LinearLayout>
Yukarıdaki kod sayesinde android uygulaması çalıştırıldığında ekrana bir TextView eklenerek üzerinde “Click on the screen to start playing” yazısı gelecektir.
PlaySound.java:
1 package ornek.soundpool;
2
3 import android.app.Activity;
4 import android.media.AudioManager;
5 import android.media.SoundPool;
6 import android.media.SoundPool.OnLoadCompleteListener;
7 import android.os.Bundle;
8 import android.util.Log;
9 import android.view.MotionEvent;
10 import android.view.View;
11 import android.view.View.OnTouchListener;
12
13 public class PlaySound extends Activity implements OnTouchListener {
14 private SoundPool soundPool;
15 private int soundID;
16 boolean loaded = false;
17
18 /** Activity ilk oluştuğunda çağrılır */
19 @Override
20 public void onCreate(Bundle savedInstanceState) {
21 super.onCreate(savedInstanceState);
22 setContentView(R.layout.main);
23 View view = findViewById(R.id.textView1);
24 view.setOnTouchListener(this);
25 // Donanımsal düğme kontrolü set olsun
26 this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
27 // Ses yükleniyor
28 soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
29 soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
30 @Override
31 public void onLoadComplete(SoundPool soundPool, int sampleId,
32 int status) {
33 loaded = true;
34 }
35 });
36 soundID = soundPool.load(this, R.raw.sound1, 1);
37
38 }
39
40 @Override
41 public boolean onTouch(View v, MotionEvent event) {
42 if (event.getAction() == MotionEvent.ACTION_DOWN) {
43 // Ses katarına ait ayarlar alınıyor
44 AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
45 float actualVolume = (float) audioManager
46 .getStreamVolume(AudioManager.STREAM_MUSIC);
47 float maxVolume = (float) audioManager
48 .getStreamMaxVolume(AudioManager.STREAM_MUSIC);
49 float volume = actualVolume / maxVolume;
50 // Ses eklendi mi, hazır mı?
51 if (loaded) {
52 soundPool.play(soundID, volume, volume, 1, 0, 1f);
53 Log.e(“Test”, “Played sound”);
54 }
55 }
56 return false;
57 }
58}
26. satırdaki “setVolumeControlStream” fonksiyonu ile donanımsal ses kontrol düğmesi ile ses katarının kontrol edilmesi imkânı verilmektedir. Bu kontrol işlemi yürürlükte olan pencereye ait Activity işlemine bağlıdır ve Activity yürürlükte olduğu sürece ses katarı kontrol edilir. Bu fonksiyon “AudioManager” sınıfına ait “STREAM_MUSIC” metodunu parametre olarak alarak müzik çalmaktadır.
28. satırdaki SoundPool sınıfı üç tane parametre almaktadır ve eğer çalışırsa SoundPool nesnesini döner aksi takdirde “null” dönmektedir.
public SoundPool (int maxStreams, int streamType, int srcQuality)
maxStreams: Bu nesne için eşzamanlı çalınabilecek ses katarı sayısı
streamType: AudioManager içerisindeki ses katarı tipi Örneğin, oyunlarda STREAM_MUSIC kullanılır.
srcQuality: Dönüştürücünün örnekleme oranı
29. satırdaki “setOnLoadCompleteListener” arayüzü ses yüklendikten sonra çalıştırmak için kullanılır. Bu arayüze ait “onLoadComplete” metodu ses katarı tamamen yüklendiğinde çağrılır ve aşağıdaki parametreleri alır.
public abstract void onLoadComplete (SoundPool soundPool, int sampleId, int status)
soundPool: sample ID’ya sahip ses yüklenir
status: yükleme durumuna ait bilgi (0 = başarılı)
36. satırdaki soundPool.load fonskisyonu ile parametre olarak alınan adresten ses yüklenmektedir. Bu fonksiyon 3 tane parameter almaktadır.
context: uygulama içeriği
resId: kaynak ID
priority: Ses katarına ait efek önceliği varsayılan olarak 1 değerindedir.
40. ile 58. Satırlar arasında kullanıcının ekrana dokunup dokunmadığı algılanarak ses çalınması gerçekleştirilmiştir.
42. satıda eğer ekrana dokunulmuşsa çalınacak ses katarının ses seviyesi ayarlanıyor.
51. satırda, eğer ses katarı soundPool.load fonskisyonu ile yüklenmiş ise load parametresi true değerinde olduğu için soundPool.play fonksiyonunu çalıştırmaktadır. Bu fonksiyon aşağıdaki parametreleri almaktadır.
soundID: soundPool.load fonskisyonundan dönen ID
leftVolume: sol ses değeri (0.0 ile 1.0 aralığında)
rightVolume: sağ ses değeri (0.0 ile 1.0 aralığında)
priority: ses katarı önceliği (0 = lowest priority)
loop: se katarı kaç kez çalınacak (0 = düngü yok, -1 = sonsuz döngü)
rate: çalma frekans oranı (playback rate) (1.0 = normal playback, 0.5 ile 2.0 arasında)
Son olarak 53. Satıda log çıktısı almak için bir fonksiyon kullanılmıştır.
Kaynak : http://www.vogella.de
Benzer Yazılar
Kariyer
- Yazılım Geliştirme Uzmanları
MobilMutfak - Java Yazılım Uzmanı
Yapı Kredi Emeklilik - Java Yazılım Uzmanı
Universal Bilgi Teknolojileri - Yazılım Geliştirmeci ve Proje Mühendisi
Yapı ve Kredi Bankası - Java Yazılım Uzmanı
Abaküs Finansal Yaz. A.Ş








