JS ile HTML text kutusuna girilen harf ile ses çıkarma

AuEnx

Hectopat
Katılım
25 Aralık 2018
Mesajlar
469
Çözümler
1
Daha fazla  
Cinsiyet
Erkek
Merhaba, resimde gördüğünüz üzere bir baterinin üstünde butonlar var ve bu butonlara mouse ile tıklayınca sesler çıkarıyor. Fakat bu sesleri aynı şekil HTML'de bir text kutusu yaratıp bu text kutusuna, belirlenen harfleri girip text kutuna bağlanacak butona tıkladığım zamanda çalmasını istiyorum fakat bunu bir türlü beceremedim. Bakmadığım yabancı kaynak kalmadı, belki de bulamadım ama bir türlü yapamadım. Nasıl bir text kutusu ve o text kutusunun değerini okuyan buton yaratıp ve JavaScript ile ses çıkarmasını sağlayabilirim?
 

Dosya Ekleri

  • Ekran Alıntısı.JPG
    Ekran Alıntısı.JPG
    98 KB · Görüntüleme: 58
Aşağıdaki şekilde çalışması gerek.
JavaScript:
function klavyesesYap()
{
  var girisK=document.getElementById('textt').value;
  const array = girisK.split(",");
  const sounds = [];
 
  for(j = 0; j < array.length; j++)
  {
    if ( array[j] == 'W' )
    {
      var tom1 = new Audio("ses/tom-1.mp3");
      sounds.push(tom1);
    }
    else if (array[j] == 'A')
    {
      var tom2 = new Audio("ses/tom-2.mp3");
      sounds.push(tom2);
    }
    else if (array[j] == 'S')
    {
      var crash = new Audio("ses/crash.mp3");
      sounds.push(crash);
    }
    else if (array[j] == 'D')
    {
      var tom4 = new Audio("ses/tom-4.mp3");
      sounds.push(tom4);
    }
    else if (array[j] == 'J')
    {
      var snare = new Audio("ses/snare.mp3");  
      sounds.push(snare);
    }
    else if (array[j] == 'K')
    {
      var crash = new Audio("ses/crash.mp3");
      sounds.push(crash);
    }
    else if (array[j] == 'L')
    {
      var kick = new Audio("ses/kick-bass.mp3");    
      sounds.push(kick);
    }
    else
    {
      var bip = new Audio('ses/bip.mp3');
      sounds.push(bip);
    }
  }
  if (sounds.length > 0) {
    sounds.forEach((sound, index) => {
      setTimeout(() => {
        sound.play();
      }, index * 2000);
    });
    sounds.length = 0;
  }
}
Çok çok teşekkür ederim, şu an tam işte çalıştı. Yardım ettiğiniz ve zaman ayırdığınız için ne kadar teşekkür etsem azdır. Şu an tam istediğim gibi çalışıyor.
 
Çok çok teşekkür ederim, şu an tam işte çalıştı. Yardım ettiğiniz ve zaman ayırdığınız için ne kadar teşekkür etsem azdır. Şu an tam istediğim gibi çalışıyor.
Kodu ilk paylaştığımda sonuna sounds.length = 0 eklemeyi unutmuşum. İlk halini aldıysan birden fazla denemede üst üste eklenerek çalmaya başlar sesler. Son halini deneyebilirsin.
 
Kodu ilk paylaştığımda sonuna sounds.length = 0 eklemeyi unutmuşum. İlk halini aldıysan birden fazla denemede üst üste eklenerek çalmaya başlar sesler. Son halini deneyebilirsin.
sounds.lenght = 0'i belirtilen yere ekledim ama şimdi fark ettim harfleri girip üst üste butona tıkladığım zaman her harften butona üst üste tıkladığım kadar çalıyor.
 
Sorunu anlayamadım tam olarak. Üst üste basınca aynı anda mı çalmaya başlıyor? Örnek olarak bir kez bastın ve sırada 'Q' ve 'E' sesleri var, 'E' harfi oynatılırken tekrar butona bastığında ilk 'E' ile ikinci 'Q' aynı anda mı çalıyor? Sorun bu yazdığımsa yapmak istediğin sesler çalarken tekrar ses eklenememesi mi yoksa butona basıldığında yeni seslerin, eski seslerin olduğu sıraya eklenmesi mi?
 
Son düzenleme:
Sorunu anlayamadım tam olarak. Üst üste basınca aynı anda mı çalmaya başlıyor? Örnek olarak bir kez bastın ve sırada 'Q' ve 'E' sesleri var, 'E' harfi oynatılırken tekrar butona bastığında ilk 'E' ile ikinci 'Q' aynı anda mı çalıyor? Sorun bu yazdığımsa yapmak istediğin sesler çalarken tekrar ses eklenememesi mi yoksa butona basıldığında yeni seslerin, eski seslerin olduğu sıraya eklenmesi mi?
Evet hocam, resimdeki gibi inputa değer girip tıkla butonuna üst üste 2 kere bastığım zaman aynı anda her harften 2 kere çalmaya başlıyor ve sesler karışıyor. Mesela fotoğraftaki harfleri yazıp bastıktan hemen sonra çalmaya başlar başlamaz başka bir harf daha ekleyip basayım en başa almıyor direk diğer harfler daha çalmaya başlarken yeniden girilen harfleri de aynı anda çalmaya başlıyor
 

Dosya Ekleri

  • Ekran Alıntısı.JPG
    Ekran Alıntısı.JPG
    85,3 KB · Görüntüleme: 10
Sen nasıl çalışmasını istiyorsun? Butona tekrar bastığında eskisinin silinmesini ve yenisinin çalmasını mı, mevcut çalan ses varsa yeni ses eklenememesini mi yoksa yeni eklenen seslerin eskileri bittikten sonra çalması mı?
 
Sen nasıl çalışmasını istiyorsun? Butona tekrar bastığında eskisinin silinmesini ve yenisinin çalmasını mı, mevcut çalan ses varsa yeni ses eklenememesini mi yoksa yeni eklenen seslerin eskileri bittikten sonra çalması mı?
Butona tekrar bastığım zaman eskisinin devam etmemesini ve yeni girilen harflerin ya da mevcut harflerin başa dönüp tekrar çalmasını istiyorum hocam
 
Aşağıdaki şekilde dener misin? Sıkıntı çıkarabilecek tek şey ended eventi. Birkaç denemeden sonra herhangi bir sorun olursa yazarsın. removeEventListener() eklemek gerekebilir ama denemem gerekiyor onun için.
JavaScript:
const sounds = [];
function klavyesesYap()
{
  var girisK=document.getElementById('textt').value;
  const array = girisK.split(",");

  if (sounds.length > 0) {
    sounds.forEach((sound) => {
      sound.pause();
      sound.currentTime = 0;
    })
    sounds.length = 0;
  }

  for(j = 0; j < array.length; j++)
  {
    if ( array[j] == 'W' )
    {
      var tom1 = new Audio("ses/tom-1.mp3");
      sounds.push(tom1);
    }
    else if (array[j] == 'A')
    {
      var tom2 = new Audio("ses/tom-2.mp3");
      sounds.push(tom2);
    }
    else if (array[j] == 'S')
    {
      var crash = new Audio("ses/crash.mp3");
      sounds.push(crash);
    }
    else if (array[j] == 'D')
    {
      var tom4 = new Audio("ses/tom-4.mp3");
      sounds.push(tom4);
    }
    else if (array[j] == 'J')
    {
      var snare = new Audio("ses/snare.mp3");
      sounds.push(snare);
    }
    else if (array[j] == 'K')
    {
      var crash = new Audio("ses/crash.mp3");
      sounds.push(crash);
    }
    else if (array[j] == 'L')
    {
      var kick = new Audio("ses/kick-bass.mp3");  
      sounds.push(kick);
    }
    else
    {
      var bip = new Audio('ses/bip.mp3');
      sounds.push(bip);
    }
  }
  if (sounds.length > 0) {
    sounds.forEach((sound, index) => {
      setTimeout(() => {
        sound.play();
        if (index === sounds.length - 1) {
          sound.addEventListener('ended', () => {
            sounds.length = 0;
          }, {once: true});
        }
      }, index * 2000);
    });
  }
}
 
Aşağıdaki şekilde dener misin? Sıkıntı çıkarabilecek tek şey ended eventi. Birkaç denemeden sonra herhangi bir sorun olursa yazarsın. removeEventListener() eklemek gerekebilir ama denemem gerekiyor onun için.
JavaScript:
const sounds = [];
function klavyesesYap()
{
  var girisK=document.getElementById('textt').value;
  const array = girisK.split(",");

  if (sounds.length > 0) {
    sounds.forEach((sound) => {
      sound.pause();
      sound.currentTime = 0;
    })
    sounds.length = 0;
  }

  for(j = 0; j < array.length; j++)
  {
    if ( array[j] == 'W' )
    {
      var tom1 = new Audio("ses/tom-1.mp3");
      sounds.push(tom1);
    }
    else if (array[j] == 'A')
    {
      var tom2 = new Audio("ses/tom-2.mp3");
      sounds.push(tom2);
    }
    else if (array[j] == 'S')
    {
      var crash = new Audio("ses/crash.mp3");
      sounds.push(crash);
    }
    else if (array[j] == 'D')
    {
      var tom4 = new Audio("ses/tom-4.mp3");
      sounds.push(tom4);
    }
    else if (array[j] == 'J')
    {
      var snare = new Audio("ses/snare.mp3");
      sounds.push(snare);
    }
    else if (array[j] == 'K')
    {
      var crash = new Audio("ses/crash.mp3");
      sounds.push(crash);
    }
    else if (array[j] == 'L')
    {
      var kick = new Audio("ses/kick-bass.mp3"); 
      sounds.push(kick);
    }
    else
    {
      var bip = new Audio('ses/bip.mp3');
      sounds.push(bip);
    }
  }
  if (sounds.length > 0) {
    sounds.forEach((sound, index) => {
      setTimeout(() => {
        sound.play();
        if (index === sounds.length - 1) {
          sound.addEventListener('ended', () => {
            sounds.length = 0;
          }, {once: true});
        }
      }, index * 2000);
    });
  }
}
Yok hocam, olmadı sesler yine karışıyor. Butona basıp çalarken yeniden butona basılırsa o çalan kısım direk durup inputtakine en baştan çalmaya başlayıp bitirmesi lazım. Sanırım removelistener ile olacak galiba çözemedim tam.
 

Geri
Yukarı