Suara theremin telah diabadikan dalam lagu The Beach Boys Good Vibrations . Banyak juga yang mengaitkan suaranya dengan tema untuk seri asli Star Trek , meskipun tampaknya itu adalah emulasi sopran .
Tantangan ini mengharuskan Anda untuk mengimplementasikan theremin .
Memasukkan
- Ambil input 2 dimensi dari mouse atau perangkat input lainnya (mis. Anda bisa menggunakan joystick), yang akan menghasilkan nada dari perangkat output audio sebagai berikut:
- meningkatkan x akan meningkatkan frekuensi nada. Perhatikan bahwa frekuensi meningkat secara eksponensial dengan not musik, jadi Anda harus menerapkan hubungan linier antara posisi x mouse dan not musik, dan
- meningkatkan y akan meningkatkan volume nada.
- Tampaknya ada kebingungan mengenai bentuk gelombang yang dihasilkan oleh theremin nyata , jadi untuk kesederhanaan, gelombang sinus (atau perkiraan dekatnya) harus digunakan.
Aturan
- Nada yang dihasilkan harus memiliki setidaknya rentang 2-oktaf. Kisaran lebih dapat diterima. A-440 harus berada dalam jangkauan.
- Untuk membuat tampilan frekuensi dan amplitudo variabel yang dapat didengar secara terus-menerus, kisaran nilai yang dipertimbangkan dalam kedua dimensi dari perangkat input harus minimal 500 Implementasi dapat membuka jendela (setidaknya 500x500 piksel) untuk membaca input dari posisi kursor mouse. Atau tanpa membuka jendela, koordinat dapat dibaca langsung dari mouse atau perangkat input lainnya.
- Harus ada cara sederhana untuk menghentikan program - kombinasi tombol, klik mouse atau perangkat input umum lainnya. CTRL-c sudah cukup.
- Setiap perpustakaan standar dapat digunakan, selama mereka tidak sepenuhnya mengimplementasikan solusi tanpa pekerjaan lain yang diperlukan.
- Aturan standar untuk Code Golf dan I / O
- Anda dapat berhenti dengan tetikus atau perangkat input kehilangan fokus pada kotak input.
Catatan
- Karena nada keluaran dihasilkan secara dinamis, kehati-hatian harus dilakukan untuk memastikan nada tersebut berupa gelombang berkelanjutan; yaitu tidak ada klik atau muncul suara yang disebabkan oleh perubahan fase atau amplitudo yang tiba-tiba.
- Anda dapat membatasi zona ukuran input hingga 500 oleh 500 tetapi mungkin lebih besar.
Ini kode-golf , jadi jawaban terpendek dalam bahasa apa pun menang.
Terima kasih khusus
Terima kasih khusus kepada Digital Trauma untuk membuat tantangan ini dan mempostingnya di Sandbox Secret Santa. Saya telah melakukan beberapa pengeditan dan inilah pos aslinya.
o.type='sine'
tidak perlu karena itu default. Anda dapat menyederhanakandocument.onmousemove
menjadi adilonmousemove
.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)