Eyl
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

Yorum yapabilirsiniz..

En son haber ve ücretsiz eğitimlere ulaşmak için üye olabilirsiniz