İyi titreşimler


20

Theremin sesi The Beach Boys şarkısı Good Vibrations'da ölümsüzleştirildi . Birçoğu sesini Star Trek'in orijinal serisinin temasıyla da ilişkilendiriyor , ancak görünüşe göre bir soprano öykünmesi idi .

Bu meydan okuma bir theremin uygulamanızı gerektirir .

Giriş

  • Aşağıdaki gibi bir ses çıkış aygıtından ton üretecek şekilde bir fareden veya başka bir giriş aygıtından (örneğin bir joystick kullanabilirsiniz) 2 boyutlu giriş alın:
    • x arttıkça ton sıklığı artar. Frekansın nota ile katlanarak arttığını unutmayın, bu nedenle fare x konumu ile nota arasında doğrusal bir ilişki uygulamalısınız ve
    • y'nin arttırılması tonun hacmini artıracaktır.
  • Gerçek bir peremin ürettiği dalga formu ile ilgili karışıklık var gibi görünüyor , bu nedenle basitlik için bir sinüs dalgası (veya yakın yaklaşımı) kullanılmalıdır.

kurallar

  • Üretilen ton en az 2 oktavlık bir menzile sahip olmalıdır. Daha fazla aralık kabul edilebilir. A-440 aralık dahilinde olmalıdır.
  • Sürekli değişken frekans ve genliğin duyulabilir görünümünü oluşturmak için, giriş cihazından her iki boyutta dikkate alınan değer aralığı en az 500 olmalıdır Uygulama, fare imleci konumundan girişi okumak için bir pencere açabilir (en az 500x500 piksel). Veya bir pencere açılmadan, koordinatlar doğrudan fare veya başka bir giriş cihazından okunabilir.
  • Programı durdurmak için basit bir yol olmalıdır - tuş kombinasyonu, fare tıklaması veya diğer ortak giriş aygıtı. CTRL-c yeterlidir.
  • Çözümü, başka bir iş gerektirmeden tamamen uygulamadığı sürece herhangi bir standart kütüphane kullanılabilir.
  • Code Golf ve I / O için standart kurallar
  • Farenin veya giriş cihazının giriş kutusuna odağını kaybetmesini durdurabilirsiniz.

notlar

  • Çıkış tonu dinamik olarak oluşturulduğundan, tonun sürekli bir dalga formu olduğundan emin olunmalıdır; yani faz veya genlikteki ani değişikliklerin neden olduğu sesli tıklamalar veya patlamalar yoktur.
  • Giriş boyutu bölgesini 500 x 500 ile sınırlandırabilirsiniz, ancak daha büyük olabilir.

Bu , bu yüzden herhangi bir dilde en kısa cevap kazanır.

Özel teşekkür

Bu mücadeleyi gerçekleştirdiği ve Gizli Noel Baba'nın Sandbox'ına gönderdiği için Dijital Travma'ya özel teşekkürler. Birkaç düzenleme yaptım ve işte orijinal gönderi.

Yanıtlar:


10

JavaScript ES6, 215 188 bayt

Bu, Chrome ve Edge'de iyi çalışıyor gibi görünüyor. Firefox ve Safari çok fazla değil.

with(new AudioContext)o=createOscillator(onmousemove=e=>{o.frequency.value=9/innerWidth*e.x**2,v.gain.value=1-e.y/innerHeight}),v=createGain(),v.connect(destination),o.start(),o.connect(v)

@Darrylyeo sayesinde 27 bayt kaydedildi

Çevrimiçi deneyin!

with(new AudioContext)o=createOscillator(onmousemove=e=>{o.frequency.value=9/innerWidth*e.x**2,v.gain.value=1-e.y/innerHeight}),v=createGain(),v.connect(destination),o.start(),o.connect(v)
<button onClick="o.stop()">Stop</button>


1
Bu çok iyi! Çok eğlendim
Christopher

2
Teşekkürler. Ben kare dalga
0

1
Denemek ve hakkında bir kulak zarı kaybetti
Christopher

o.type='sine'varsayılan olduğundan gereksizdir. Sen kolaylaştırabilirsiniz document.onmousemovelazım onmousemove.
darrylyeo

with(new AudioContext)o=createOscillator(onmousemove=e=>{o.frequency.value=9/innerWidth*e.x**2,v.gain.value=1-e.y/innerHeight}),v=createGain(),v.connect(destination),o.start(),o.connect(v)
215-188
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.