İş Tecrubesi
Eğitim Geçmişi
Sertifikalar & Başarılar
Kullanıcıya ait test sonucu bulunmamaktadır.
Dil Becerileri
Son Forum Aktiviteleri
2Tekrarlanan 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]
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.