Dźwięk tamtej pamięci został uwieczniony w piosence The Beach Boys Good Vibrations . Wiele osób kojarzy też jego brzmienie z tematem oryginalnej serii Star Trek , choć najwyraźniej była to emulacja sopranu .
To wyzwanie wymaga wdrożenia Theremin .
Wejście
- Weź dwuwymiarowe wejście z myszy lub innego urządzenia wejściowego (np. Możesz użyć joysticka), który wytworzy dźwięk z urządzenia wyjściowego audio w następujący sposób:
- zwiększenie x zwiększy częstotliwość tonu. Zauważ, że częstotliwość rośnie wykładniczo wraz z nutą muzyczną, dlatego musisz zaimplementować liniową zależność między pozycją myszy x i nutą, a
- zwiększenie y zwiększy głośność tonu.
- Wydaje się, że istnieje zamieszanie dotyczące kształtu fali wytwarzanej przez prawdziwą tamminę , więc dla uproszczenia należy zastosować falę sinusoidalną (lub jej przybliżenie).
Zasady
- Wytworzony ton musi mieć zakres co najmniej 2 oktaw. Dopuszczalny jest większy zasięg. A-440 musi znajdować się w zasięgu.
- Aby stworzyć słyszalny wygląd bezstopniowej częstotliwości i amplitudy, zakres wartości branych pod uwagę w obu wymiarach z urządzenia wejściowego musi wynosić co najmniej 500 Implementacje mogą otworzyć okno (co najmniej 500 x 500 pikseli) w celu odczytania danych wejściowych z pozycji kursora myszy. Lub bez otwierania okna współrzędne można odczytać bezpośrednio z myszy lub innego urządzenia wejściowego.
- Musi istnieć prosty sposób zatrzymania programu - kombinacja klawiszy, kliknięcie myszą lub inne popularne urządzenie wejściowe. CTRL-c jest wystarczające.
- Można używać dowolnych standardowych bibliotek, o ile nie wdrażają one całkowicie rozwiązania bez konieczności wykonywania innych czynności.
- Standardowe zasady dla Code Golf i I / O
- Możesz przerwać, gdy mysz lub urządzenie wejściowe przestaną być aktywne w polu wprowadzania.
Uwagi
- Ponieważ ton wyjściowy jest generowany dynamicznie, należy zachować ostrożność, aby zapewnić ciągły przebieg fali; oznacza to, że nie ma słyszalnych kliknięć ani trzasków spowodowanych nagłymi zmianami fazy lub amplitudy.
- Możesz ograniczyć strefę rozmiaru wejściowego do 500 na 500, ale może być większa.
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w dowolnym języku.
Szczególne podziękowania
Specjalne podziękowania dla Digital Trauma za podjęcie tego wyzwania i opublikowanie go w Piaskownicy Sekretnego Mikołaja. Wprowadziłem kilka zmian i oto oryginalny post.
o.type='sine'
jest niepotrzebny, ponieważ jest domyślny. Możesz uprościćdocument.onmousemove
po prostuonmousemove
.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)