Soru & Cevap

Tekrarlanan müzikleri aynı anda başlatmak

22.12.2014 - 11:11

Merhaba arkadaşlar sorum biraz karışık olduğu için başlığa ne yazacağıma karar veremedim. Bunun için özür dilerim.

Yapacağım proğramda 2 adet ToggleButton olacak ve bunun içerisinde 2 adet ses olacak sesler yaklaşık 3sn sürüyor.Yapmak istediğim Kullanıcı 1. Müziği çalıştırınca (-ki bu müzik .setlooping(True); yani sürekli tekrar edecek togglebutton aktif olduğu sürece) Normal olarak başlması. Ancak bununla beraber 2. müziği çalıştırdığında 1. müziğin başlangıç anıyla aynı anda başlaması lazım. Yani 2. müzik başlatılmak istendiğinde 1. müzik turunu bitirmemişse 2.müzik 1. müziğin bitişini bekleyecek ve bittikten sonra ikisi birden aynı anda aktif olacak.

Soru çok karışık oldu biliyorum umarım Bir çözüm yolu , kütüphane  ya da kaynak önerebilirsiniz.Şunuda belirtmeliyim amatör olarak bu işi yapıyorum kodlama ile ilgili pek bilgim yok :(  Şimdiden çok teşekkür ederim. 

Basit olarak Java kod'larını yazıyorum

 

 

[code]btna.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            public void onCheckedChanged(CompoundButton buttonView,
                    boolean isChecked) {
                if (isChecked) {
                    mp1 = MediaPlayer.create(MainActivity.this, R.raw.back1);
                    mp1.setLooping(true);
                    

                    mp1.start();

                } else {
                    stopPlaying1();
                }
            }
        });

        btnb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            public void onCheckedChanged(CompoundButton buttonView,
                    boolean isChecked) {
                if (isChecked) {
                    mp2 = MediaPlayer.create(MainActivity.this, R.raw.back2);
                    mp2.setLooping(true);
                    mp2.start();

                } else {
                    stopPlaying2();
                }
            }
        });


    private void stopPlaying1() {
        if (mp1 != null) {
            mp1.stop();
            mp1.release();
            mp1 = null;

        }
    }

    private void stopPlaying2() {
        if (mp2 != null) {
            mp2.stop();
            mp2.release();
            mp2 = null;

        }
    [/code]

 

 

4 Görüntülenme

1 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-3606-1408610132.jpg
cgural
22.12.2014 - 11:29

MediaPlayer belgesinin dediğine göre OnCompletionListener isimli static interface sayesinde, sesin çalınması bitince/sesin sonuna gelindiğinde onCompletion() metodu tetikleniyor. Ancak bu metot MediaPlayer'ı setLooping(true) olarak ayarladığınızda kullanılamıyor. (yanılıyorsam düzeltin)

Bunu çözüm için nasıl kullanırsınız? Toggle'lar içinde o toggle'ın checked durumuna göre MediaPlayer'ı sürekli başa sararsınız. Bu sırada her bir MediaPlayer'ın çalma durumunu true/false şeklinde ikisinin de ulaşabildiği bir alanda/değişkende saklarsınız. Daha sonra diğer toggle, eğer bu diğerinin durum değişkeninde gerekli şart sağlanmadıysa kendisiyle ilgili sesi çalmaya başlamaz.

Sözün kısası, toggle'larınızın, ilgili OnCheckedChangeListener'ları içerisinde, aynı zamanda MediaPlayer'ların playback durumlarını da gözleyebilecekleri (observing) ikili bir yapı kurmalısınız. Bunun için de yeter şart playback'lerinin durumu ve o da ancak setLooping(false) modunda çalışan (playback'i izlenebilen) bir MediaPlayer ile mümkün.

hüseyin
22.12.2014 - 11:36
Yorumunuz için teşekkür ederim. Dediklerinizi uyğulamaya çalışacam.