Wektorskop


Ten wektorskop online wykorzystuje jako wejście dźwięk stereofoniczny. Oba kanały są wykreślane względem siebie na osiach x i y, tworząc szereg interesujących wzorów.


pokaż/ukryj opis

Należy pamiętać, że obliczanie danych dotyczących krzywych Balerina i Delfin trwa kilka sekund. Równania krzywych zostały zaczerpnięte z Wolfram Alpha. Aby uzyskać najlepszą wydajność, użyj Google Chrome.

Wprowadzenie

Równania parametryczne to zbiory równań wyrażających wielkości w kategoriach zmiennych niezależnych zwanych "parametrami". Przykładem pary takich równań jest

\begin{align} x = \sin{t}\\ y = \cos{t} \end{align}

Sonifikacja

Sonifikacja równań parametrycznych jest kwestią tworzenia dwóch kanałów audio, jednego dla zmiennej \(x\) i jednego dla \(y\). Równania 1 i 2 można sonifikować za pomocą dwóch węzłów oscylatora Web Audio, o ile różnica faz między tymi dwoma oscylatorami wynosi \(\pi/2\). W czasie pisania, kontrola fazy węzłów oscylatora jest niedostępna w Web Audio, ale jest w fazie rozwoju. Jednakże nadal możemy utworzyć przesunięcie fazowe za pomocą delayNode z delayTime ustawionym na jedną czwartą okresu bieżącej częstotliwości.

W przypadku bardziej skomplikowanych równań parametrycznych alternatywnym podejściem jest utworzenie stereo AudioBufferSourceNode i wypełnienie lewego i prawego bufora danymi, które zostały obliczone programistycznie przy użyciu równania parametrycznego dla tego kanału. Odbywa się to w pewnym zakresie \(t\) (najlepiej takim, który zawiera całkowitą liczbę okresów, co pozwala uniknąć nieciągłości i artefaktów audio), a właściwość loop bufora jest ustawiona na true.

Wizualizacja

Wizualizację równań parametrycznych można przeprowadzić za pomocą HTML5 canvas drawing API. Przesunięcie w określonym czasie można uzyskać za pomocą getFloatTimeDomainData metody Web Audio analyserNode. Jednak, w chwili pisania, natywny Web Audio analyser node nie obsługuje wejścia stereo, więc używamy implementacji na licencji MIT. Dwa kanały audio są przekazywane do analizatora, który następnie wypełnia dwie tablice danymi o dziedzinie czasowej.

Przy odpowiednim skalowaniu, poziome przesunięcie na canvas jest określane przez dane o dziedzinie czasowej z jednego kanału, pionowe przesunięcie przez dane z drugiego kanału i dane są wykreślane jak na Figurze 1c. Proces ten powtarza się z około 60 kl./s przy użyciu metody requestAnimationFrame, umożliwiając wyświetlenie na ekranie dowolnej ewolucji wzoru.

Urządzenia, które pozwalają na kreślenie takich wykresów x-y sygnałów, znane są jako wektorskopy, specjalny typ oscyloskopu. Użytkownicy zaznajomieni ze standardowymi oscyloskopami mogą również odtworzyć tę funkcję, włączając tryb "x-y" w swoim konkretnym modelu.

Krzywe Lissajous

W swojej najbardziej ogólnej postaci figury Lissajous są opisane następującym układem równań parametrycznych:

\begin{align} x &= A \sin{(at + \delta)}\\ y &= B \sin{(bt)} \end{align}

Dla uproszczenia, nasze demo ma \(A = B = 1\). Tworzone są dwa prostopadłe drgania harmoniczne o regulowanych częstotliwościach określonych przez \(a\) i \(b\). Przesunięcie fazowe między nimi byłoby \(\delta\). Z powodu braku dokładnego sterowania fazą, jak wspomniano wcześniej, suwak \(\delta\) w demo nie reprezentuje dokładnego przesunięcia fazowego (jako, że zmienia się względna faza oscylatora, gdy zmienia się częstotliwość), ale mimo to nadal umożliwia przesunięcie fazy i dostosowanie wizualizacji.

Krzywe Lissajous mogą się wahać od bardzo prostych do bardzo skomplikowanych w zależności od stosunku \(a:b\). W przypadku dźwięku składamy dwa czyste tony.

Hipotrochoidy

Matematycznie hipotrochoidy opisywane są następującym układem równań parametrycznych:

\begin{align} x(t) = (R-r)\cos(t) + d \cos \left(\frac{R-r}{r} t\right)\\ y(t) = (R-r)\sin(t) - d \sin \left(\frac{R-r}{r} t\right) \end{align}

Hypotrochoidy składają się z 4 sinusoid, więc znowu można je tworzyć po prostu za pomocą oscylatorów web audio. Dźwiękowo brzmią bardzo podobnie do krzywych Lissajous, ponieważ składają się z dwóch czystych częstotliwości. Mimo prostego brzmienia mogą tworzyć bardzo skomplikowane wzory.

Róże polarne

Róże polarne są opisywane równaniami 7 and 8. Ponieważ te równania wymagają mnożenia sinusoid, jesteśmy w stanie odtworzyć je w Web Audio poprzez połączenie oscylatorów z gainNodes - wartość wzmocnienia jest tu modulowana przez osobny oscylator.

\begin{align} x(t) = \cos(kt)\cos(t)\\ y(t) = \cos(kt)\sin(t) \end{align}

Wstępnie obliczone krzywe

Wytwarzanie bardziej złożonych wykresów można wykonać, dodając razem dużą liczbę sinusoid. Chociaż powinno być możliwe odtworzenie ich poprzez utworzenie dużej liczby odpowiednich węzłów oscylatora, autor zdecydował się w takich przypadkach na utworzenie pustego bufora i programowego obliczania wymaganych próbek w ciągu pojedynczego okresu.

Aby wprowadzić ewolucję w czasie, proces ten można powtórzyć dla wielu okresów. Dla każdego okresu transformacja jest stosowana do próbek. Transformacja jest następnie nieznacznie dostosowywana do następnej iteracji. W ten sposób autor był w stanie stworzyć wirującą baletnicę i skaczącego delfina.


Autorzy