2012-04-09 18 views
8

Yaptığım bir HTML5 oyununda, işler çarpıştığında bir "thud" sesi çalıyorum. Ancak, bu biraz gerçekçi değil. Nesnelerin hızı ne olursa olsun, her zaman aynı, nispeten yüksek "thud" sesini yapacaklardır. Yapmak istediğim şey, o sesin sesinin hıza bağlı olmasını sağlamaktır, ama bunu nasıl yapacağım? Sadece bir sesin nasıl çalınacağını biliyorum.HTML5 sesinin ses yüksekliği nasıl ayarlanır?

playSound = function(id) 
{ 
    sounds[id].play(); 
} 

soundsnew Audio("url") 's dolu bir dizidir.

+0

Olası http://stackoverflow.com/questions/1933969/sound-effects-in-javascript-html5 – coder

+0

Ben, değil çoğaltmak inanıyoruz. – corazza

cevap

16

Ses elemanının birim özelliğini kullanın. W3 Gönderen:

The element's effective media volume is volume, interpreted relative to the range 0.0 to 1.0, with 0.0 being silent, and 1.0 being the loudest setting, values in between increasing in loudness. The range need not be linear. The loudest setting may be lower than the system's loudest possible setting; for example the user could have set a maximum volume.

Ex: sounds[id].volume=.5;

+0

'sesler [kimlik] .volume (hac)' "Yakalanmayan TypeError: Nesne # ait Property 'hacmini' değil bir fonksiyonu" verir – corazza

+1

Whoops, benim kod yazım yanlışı. Düzeltildi. – j08691

+0

Şey, garip görünüyordu. ;) Çalışır, teşekkürler! – corazza

4

Sen ayarlayarak ses düzeyini ayarlayabilirsiniz:

setVolume = function(id,vol) { 
    sounds[id].volume = vol; // vol between 0 and 1 
} 

Ancak kuruluyor hacmi arasındaki küçük bir gecikme vardır akılda ayı ve etkili oluyor. Sesin önceki ses seviyesinde çalmaya başladığını duyabilir, ardından yenisine atlayabilirsiniz.

+0

Cevabınız ve bahşiş için teşekkürler, +1! Duraklama genellikle ne kadar büyük? Sesim çoğunlukla <1 saniye uzunluğunda, bu sorunlara neden olacak mı? – corazza

3

Kazançla bile oynayabilir ve ses seviyesini% 100'den daha yüksek sesle oynatabilirsiniz. Eğer iki kat daha yüksek olması sesi gerekiyorsa Sonra

var amp = amplifyMedia(sounds[id], 1); 

:% 100 ilk amplifikasyon ayarlamak için

function amplifyMedia(mediaElem, multiplier) { 
    var context = new (window.AudioContext || window.webkitAudioContext), 
     result = { 
     context: context, 
     source: context.createMediaElementSource(mediaElem), 
     gain: context.createGain(), 
     media: mediaElem, 
     amplify: function(multiplier) { result.gain.gain.value = multiplier; }, 
     getAmpLevel: function() { return result.gain.gain.value; } 
     }; 
    result.source.connect(result.gain); 
    result.gain.connect(context.destination); 
    result.amplify(multiplier); 
    return result; 
} 

Böyle bir şey yapabileceğini: Sen ses yükseltmek için bu işlevi kullanabilirsiniz Eğer böyle bir şey yapabileceğini:

:

amp.amplify(2); 

ikiye istiyorsanız bunu yapabilirsiniz

fonksiyonunun tam yazma buraya bulunur: http://cwestblog.com/2017/08/17/html5-getting-more-volume-from-the-web-audio-api/

İlgili konular