Son Forum Aktiviteleri

2
Tümünü Gör

Tekrarlanan müzikleri aynı anda başlatmak

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]

 

 

picture-33431-1417720371.jpg
9 yıl 4 ay önce yanıtladın

soundpool ile anlık Rate ve balance değiştirmek

Uyğulamamda Seekbar yardımıyla kullandığım müzigin rate,speed veya balance ayarlarını değiştirmeyi hedefliyorum. Bunun için soundpool ile gerekli işlemleri yaptığımda "anlık" değişim yerine müzik yeniden başladığında değişim sağlanıyor. Hedefim Seekbar'da değişiklik olduğu zaman "anlık" değişimin olması.Bu konuda yardım edebilecek veya çalışmam için kaynak gösterebilecek var mı?

SoundManager.java

[code]

public class SoundManager 
{
    private Context pContext;
    private SoundPool sndPool;
    private float rate = 1.0f;
    private float masterVolume = 1.0f;
    private float leftVolume = 1.0f;
    private float rightVolume = 1.0f;
    private float balance = 0.5f;
    
    // Constructor, setup the audio manager and store the app context
    public SoundManager(Context appContext)
    {
      sndPool = new SoundPool(16, AudioManager.STREAM_MUSIC, 100);
       pContext = appContext;
    }
    
    // Load up a sound and return the id
    public int load(int sound_id)
    {
        return sndPool.load(pContext, sound_id, 1);
    }
    
    // Play a sound
    public void play(int sound_id)
    {
        sndPool.play(sound_id, leftVolume, rightVolume, 1, 0, rate);     
    }    
    
    // Set volume values based on existing balance value
    public void setVolume(float vol)
    {
        masterVolume = vol;
        
        if(balance < 1.0f)
        {
            leftVolume = masterVolume;
            rightVolume = masterVolume * balance;
        }
        else
        {
            rightVolume = masterVolume;
            leftVolume = masterVolume * ( 2.0f - balance );
        }

    }
    
    public void setSpeed(float speed)
    {
        rate = speed;
        
        // Speed of zero is invalid 
        if(rate < 0.01f)
            rate = 0.01f;
        
        // Speed has a maximum of 2.0
        if(rate > 2.0f)
            rate = 2.0f;
    }
    
    public void setBalance(float balVal)
    {
        balance = balVal;
        
        // Recalculate volume levels
        setVolume(masterVolume);
    }
    

    
    // Free ALL the things!
    public void unloadAll()
    {
        sndPool.release();        
    }
    public void setStop(int sound_id)
    {
        sndPool.stop(sound_id);
    }

[/code]

 

MainActivity.java

[code]

 

snd = new SoundManager(getApplicationContext());

bses3 = snd.load(raw.scratch_1);

barChange = new OnSeekBarChangeListener() {
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress,
                    boolean fromUser) {
                switch (seekBar.getId()) {
                case R.id.VolBar1:
                    snd.setVolume((float) progress / 100.0f);
                    break;

                case R.id.BalBar:
                    snd.setBalance((float) progress / 100.0f);
                    break;

                case R.id.SpeedBar:
                    snd.setSpeed((float) progress / 100.0f);
                    break;

                }
            }
        };

[/code]

 

 

Kod kısmı uzun olduğu için gerekli yerleri yapıştırdım. Eksik veya gözden kaçmış birşey varsa söylerseniz ekleyebilirim.

picture-33431-1417720371.jpg
9 yıl 5 ay önce yanıtladın