Ara 28

Bugünkü makalemizde daha önceden başka bir örneğini yaptığımız SeekBar nesnesine bir ses dosyasını entegre edelim ve SeekBar nesnesi aracılığıyla müziğin sesinin nasıl arttırılıp azaltılabileceğini gösterelim.

Öncelikle yeni bir android projesi açalım.

Hemen ardından res dosyası altına seslerimizin tutulacağı “raw” isimli bir klasör açalım. ( Burada klasör adı olarak ben “raw” adını verdim. Siz daha farklı isimlendirebilirsiniz. )

13.1

Ses dosyalarımızı bu klasör içerisine kopyalayalım.

Daha sonra projemizin tasarım sayfası olan activity_main.xml sayfasına gidelim. Bir adet Button ve bir adet SeekBar nesnesi ekleyelim.

13.2

Sayfamızı kaydettikten sonra sayfanın bağlı olduğu class yapısı içerisine giderek, eklediğimiz Button ve SeekBar nesnelerine erişimimizi sağlayacak değişken tanımlamalarını yapalım. Butonun Click’ ini oluşturalım.

public class MainActivity extends Activity {
	Button sesCal;
	MediaPlayer sesDosyam;
	SeekBar seekBarNesne;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		sesDosyam=MediaPlayer.create(MainActivity.this, R.raw.allowdance);
		seekBarNesne = (SeekBar)findViewById(R.id.seekBar1);

		sesCal=(Button)findViewById(R.id.button1);
		sesCal.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				sesDosyam.start();
			}
		});
	}
     }

Yukarıdaki kodda görüldüğü üzere SeekBar nesnesini ayarlamadan önce, projeye dahil ettiğimiz ses dosyasını çalmak için MediaPlayer türünde sesDosyam isimli bir değişken oluşturduk. Ardında onCreate() metodu içerisinde sesDosyam değişkenine projedeki ses doyasının yolunu ve adını göstererek, değişken ile ses dosyasını ilişkilendirdik. Ardından Müzik Başlat butonun click olayı içerisine;

sesDosyam.start();

yazarak ses dosyasının çalmasını sağladık.

Buraya kadar kafanızda bir soru işareti kaldıysa daha önceleri yazmış olduğum  Uygulamaya Ses Ekleme isimli makaleyi incelemenizi tavsiye ederim.

Yine seekBar nesnesini temsil eden seekBarNesne isimli değişkenimizi oluşturup onCreate() metodu içerisinde tanımlamasını yaptık.

Şimdi sıra SeekBar nesnesi ile ses dosyasını ilişkilendirmeye geldi. SeekBar nesnesini arttırdıkça çalan müziğin sesini arttıracağız, azalttıkça sesi kısacağız.

Bunun için öncelikle  AudioManager türünde bir  ses yöneticisi tanımlıyoruz.

AudioManager sesYonetici;

Hemen ardından onCreate() metodu içinde bu değişkene bir ses servisi olduğunu belirten atamamızı yapıyoruz.

sesYonetici=(AudioManager)getSystemService (Context.AUDIO_SERVICE);

Şimdi yeni bir metod oluşturalım. Bu metod içerisine SeekBar nesnesini ve AudioManager’in Stream_Music özelliğini yani müzik akış özelliğini alsın.
Metod içerisinde, SeekBar nesnesinin setOnSeekBarChangeListener() metodundan faydalanarak SeekBar nesnesini değiştirdikçe bu metodun tetiklenmesini sağlayalım. Ve içerisinde sesYonetici nesnesi aracılığıyla müziğin ses değişimini kontrol edelim.

private void initBar(SeekBar bar, final int stream) 
	{
		bar.setMax(sesYonetici.getStreamMaxVolume(stream));
		bar.setProgress(sesYonetici.getStreamVolume(stream));

		bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {	
			@Override
			public void onStopTrackingTouch(SeekBar seekBar) {
				// TODO Auto-generated method stub
					}	
			@Override
			public void onStartTrackingTouch(SeekBar seekBar) {
				// TODO Auto-generated method stub	
			}	
			@Override
			public void onProgressChanged(SeekBar seekBar, int progress,
					boolean fromUser) {
				// TODO Auto-generated method stub
				sesYonetici.setStreamVolume(stream,progress, R.raw.allowdance);

			}
		});

Yukarıdaki metod içerisinde ilk başta SeekBar nesnesinin setMax() özelliği aracılığıyla, SeekBar’ın maksimum seviyesi olarak SesYonetici’nin maksimum seviye değerini atıyoruz.
Ardından SeekBar’ın setProcess() özelliği ile sayfa çalıştırıldığında SeekBar nesnesinin otomatik olarak nasıl bir değer ile ekrana geleceğini belirtiyoruz.
Burada sesYonetici nesnesinin getStramValue değeri default olarak %’de kaçlık bir değer ile çalıyorsa o değer SeekBar’da görülecektir.

Bir başka ifade ile eğer biz buraya setProgress değeri olarak 70 yazsaydık mesela,

seekbar.setProgress(70);

deseydik;
Projeyi çalıştırdığımızda SeekBar nesnesinin %70 ‘i dolu olarak ekranımıza gelirdi.

13.3
Bu tanımlamaların ardından SeekBar değişkeninin setOnSeekBarChangeListener() metodunu tanımlıyoruz. İçerisinde gelen metodlardan onProgressChanged() metodu içerisine giriyoruz ve aşağıdaki kodu yazıyoruz.

sesYonetici.setStreamVolume(stream,progress, R.raw.allowdance);

Bu sayede her progress işlemi ardından, yani SeekBar nesnesi her değiştirildiğinde R.raw altında allowdance isimli ses dosyamızın StramVolume’i set edilecektir. Yani değer, seekBar nesnesini arttırdıkça artacak, azalttıkça azalacaktır.

Son olarak onCreate() metodu altında oluşturduğumuz initBar() isimli metodu çağırarak projemizi çalıştırıyoruz.

initBar(seekBarNesne,AudioManager.STREAM_MUSIC);

En son olarak kodları bir bütün halinde tekrar verelim ve konumuzu bitirelim.

package com.proje.sesveseekbar;

import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;

public class MainActivity extends Activity {
	Button sesCal;
	MediaPlayer sesDosyam;
	SeekBar seekBarNesne;
	AudioManager sesYonetici;
	@SuppressLint("ServiceCast")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		sesDosyam=MediaPlayer.create(MainActivity.this, R.raw.allowdance);
		seekBarNesne = (SeekBar)findViewById(R.id.seekBar1);
		sesYonetici=(AudioManager)getSystemService (Context.AUDIO_SERVICE);
		initBar(seekBarNesne,AudioManager.STREAM_MUSIC);

		sesCal=(Button)findViewById(R.id.button1);
		sesCal.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				sesDosyam.start();
			}
		});
	}

	private void initBar(SeekBar bar, final int stream) 
	{
		bar.setMax(sesYonetici.getStreamMaxVolume(stream));
		bar.setProgress(sesYonetici.getStreamVolume(stream));

		bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {	
			@Override
			public void onStopTrackingTouch(SeekBar seekBar) {
				// TODO Auto-generated method stub
					}
			@Override
			public void onStartTrackingTouch(SeekBar seekBar) {
				// TODO Auto-generated method stub	
			}	
			@Override
			public void onProgressChanged(SeekBar seekBar, int progress,
					boolean fromUser) {
				// TODO Auto-generated method stub
				sesYonetici.setStreamVolume(stream,progress, R.raw.allowdance);	
			}
		});		
	}	
}

13.4

25 Yorum “SeekBar Nesnesi İle Ses Kontrolü”

  1. avatar Mahsum diyor ki:

    Selam Hocam Elimde Asagıdakı Kod Var Bu Seekbar ı Buna Nasıl Eklerım… Sımdıden Yardımınız Icın Tskler..

    private Button buttonPlay;
    private Button buttonStopPlay;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.i(“onCreate”, “onCreate”);
    initializeUIElements();
    }

    private void initializeUIElements() {
    Log.i(“initUI”, “initUI”);
    buttonPlay = (Button) findViewById(R.id.button1);
    buttonPlay.setOnClickListener(this);

    buttonStopPlay = (Button) findViewById(R.id.button2);
    buttonStopPlay.setEnabled(false);
    buttonStopPlay.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {

    Intent serviceIntent = new Intent(this,RadioService.class);

    if (v == buttonPlay) {
    Log.i(“butonPlay”, “butonPlay”);
    startService(serviceIntent);
    buttonStopPlay.setEnabled(true);
    buttonPlay.setEnabled(false);

    } else if (v == buttonStopPlay) {
    Log.i(“butonStop”, “butonStop”);
    stopService(serviceIntent);
    buttonPlay.setEnabled(true);
    buttonStopPlay.setEnabled(false);
    }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
    }

    }

  2. avatar Mahsum diyor ki:

    volume seekbar eklemek

  3. avatar Mahsum diyor ki:

    Hazırda Bir Radyo Uygulaması var Play Basınca Radyo Acılıyor ama ben buna bırde sesı + – tusları yada seekbar eklemek ıstıyorum..

    • avatar Hüseyin Bodur diyor ki:

      Bence bunun için RadioService.class’ı içerisine girmelisin ve SeekBar nesnesini orada eklemelisin.Çünkü burada sayece Intent ile o sınıfa geçiş yapıyorsun.

  4. avatar Mahsum diyor ki:

    RadioService Kodu Seekbar Nesnesını nereye Eklemem gerek ?

    public class RadioService extends Service {

    private MediaPlayer player;

    @Override
    public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
    }

    @Override
    public void onDestroy() {
    Log.i(“onDestroy”, “onDestroy”);
    stopPlaying();
    }

    @Override
    public void onStart(Intent intent, int startId){
    Log.i(“onStart”, “Service onStart”);
    initializeMediaPlayer();
    startPlaying();
    }

    private void initializeMediaPlayer() {
    Log.i(“initPlayer”, “initPlayer”);
    player = new MediaPlayer();
    try {
    player.setDataSource(“http://23.92.92.102:9968/;stream.mp3″);
    } catch (IllegalArgumentException e) {
    e.printStackTrace();
    } catch (IllegalStateException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }

    player.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {

    public void onBufferingUpdate(MediaPlayer mp, int percent) {
    Log.i(“Buffering”, “” + percent);
    }
    });
    }

    private void startPlaying() {
    Log.i(“startPlaying”, “startPlaying”);
    player.prepareAsync();
    player.setOnPreparedListener(new OnPreparedListener() {

    public void onPrepared(MediaPlayer mp) {
    player.start();
    }
    });
    }

    private void stopPlaying() {
    Log.i(“stopPlaying”, “stopPlaying”);
    if (player.isPlaying()) {
    player.stop();
    player.release();
    initializeMediaPlayer();
    }

    }

    }

  5. avatar Mahsum diyor ki:

    Tskler Hocam Yaptım Demek Yanlıs Yerde Dolanıyormusum RadioService Hal Oldu Sorun

  6. avatar Mahsum diyor ki:

    yok boyle bırsey ya iki dakıka once calısıyordu sımdı yıne calısmıyor delı olacam

    • avatar Hüseyin Bodur diyor ki:

      SeekBar metodunun onProgressChanged() içerisine sesYonetici.setStreamVolume(stream,progress, player); kodu şeklinde yazmayı denedin mi?

  7. avatar Mahsum diyor ki:

    o kadar anlamıyorum Hocam Sıze Çalısmayı gondereyım mı ?

  8. avatar Hüseyin Bodur diyor ki:

    Peki gönder, bir bakarım.

  9. avatar Mahsum diyor ki:

    Buyrun Hocam Uygulamamanın Tam Halı Linkte https://www.dropbox.com/s/5ialibelnil776x/radyo.rar

  10. avatar Mahsum diyor ki:

    Baktınızmı Hocam

  11. avatar Hüseyin Bodur diyor ki:

    Baktım şimdi şu an sorunsuz çalışıyor sende bi kontrol et.

    http://huseyinbodur.net/?p=242

  12. avatar Mahsum diyor ki:

    evet Ellerıne Saglık Hocam Ses Kontrolu evet ama Bu Seferde Radyo Ya baglanmıyor..

  13. avatar Hüseyin Bodur diyor ki:

    Hatayı tam olarak yazarmısın?

  14. avatar Mahsum diyor ki:

    Hocam Hakkınızı Helal Edın Sızı Cok Yordum Galıba Ama Suan Hal ettım Verdigim Kodlar Sorunsuz Calıstı Belkı Baskasına Lazım Olur Suan Tek Sorunum Play a Basınca Baglanırken Baglanıyor Ekranı Yapmak Kullanıcı Boş Ekrana Bakmasın Bununla Ilgılı Bılgı Verırsenız Sevınırım…

    @SuppressWarnings(“unused”)
    public class MainActivity extends Activity implements OnClickListener {

    private Button buttonPlay;
    private Button buttonStopPlay;
    SeekBar seekBarNesne;
    AudioManager sesYonetici;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    seekBarNesne = (SeekBar)findViewById(R.id.seekBar1);
    sesYonetici=(AudioManager)getSystemService (Context.AUDIO_SERVICE);
    initBar(seekBarNesne,AudioManager.STREAM_MUSIC);
    Log.i(“onCreate”, “onCreate”);
    initializeUIElements();
    }

    private void initBar(SeekBar bar, final int stream)
    {
    bar.setMax(sesYonetici.getStreamMaxVolume(stream));
    bar.setProgress(sesYonetici.getStreamVolume(stream));
    bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {

    }
    @Override

    public void onStartTrackingTouch(SeekBar seekBar) {
    }

    @Override

    public void onProgressChanged(SeekBar seekBar, int progress,

    boolean fromUser) {
    sesYonetici.setStreamVolume(stream,progress, player.getAudioSessionId());
    }

    });

    }

    private void initializeUIElements() {
    Log.i(“initUI”, “initUI”);
    buttonPlay = (Button) findViewById(R.id.button1);
    buttonPlay.setOnClickListener(this);

    buttonStopPlay = (Button) findViewById(R.id.button2);
    buttonStopPlay.setEnabled(false);
    buttonStopPlay.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {

    Intent serviceIntent = new Intent(this,RadioService.class);

    if (v == buttonPlay) {
    Log.i(“butonPlay”, “butonPlay”);
    startService(serviceIntent);
    buttonStopPlay.setEnabled(true);
    buttonPlay.setEnabled(false);

    } else if (v == buttonStopPlay) {
    Log.i(“butonStop”, “butonStop”);
    stopService(serviceIntent);
    buttonPlay.setEnabled(true);
    buttonStopPlay.setEnabled(false);
    }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
    }

    }

    • avatar Hüseyin Bodur diyor ki:

      Estağfurullah. Bazen geç dönebiliyorum kusura bakma. Aradığın şey ProgressDialog. Hafta içinde bununla ilgili bir örnek yapıp sitede paylaşacağım..

  15. avatar Hüseyin Bodur diyor ki:

    Slm.onunla ilgili örneğim var evet. O örneği sana uyarlarsak progressDialog nesnesini startPlaying() içerisinde bitirmeyi dene. progressDalogNesnesi.dismiss(); demen yeterli olacaktır.

  16. avatar Nida diyor ki:

    Merhaba hocam..Ses dosyalarıyla ilgili bir şey soracaktım.Bir gridview’da,gridview’daki tüm elemanlara ses eklemek istiyorum,nasıl yapabilirim?Mesela gridview’da ekli olan bir resme tıklayınca ses gelmesini nasıl sağlarım?

    • avatar Hüseyin Bodur diyor ki:

      GridView içindeki nesnelere tıklandığında, o nesnenin id bilgisini yada text bilgisini alabiliyorsun.
      Örneğin;

      GridView grid = (GridView) findViewById(R.id.gridView1);
      grid.setAdapter(new ImageAdapter(getApplicationContext()));

      grid.setOnItemClickListener(new OnItemClickListener() {

      public void onItemClick(AdapterView parent, View v, int position,
      long id) {
      // TODO Auto-generated method stub
      If(position==1)
      Toast.makeText(getBaseContext(),”Müzik Idsi” + position + ” olan müzik çalıyor.”,Toast.LENGTH_SHORT).show();
      }
      });

      Ben burada basit haliyle position yani id bilgisini Toast ile ekrana mesaj verdim. Burada position bilgisini kullanarak en basitinden bir If döngüsü yazıp istediğin müziği çaldırabilirsin.

Yorum Yaz