Pytanie:
Jak mogę usłyszeć, jak brzmi funkcja matematyczna?
Matt D
2016-03-31 06:02:23 UTC
view on stackexchange narkive permalink

Pracuję teraz nad zadaniem domowym z równań różniczkowych i właśnie znalazłem rozwiązanie problemu, które ma postać:

enter image description here

Narysowałem tę funkcję na moim komputerze i ma interesujący przebieg, który chcę usłyszeć. Czy istnieje sposób, w jaki mogę to zrobić?

[Częstotliwość jest zbyt niska, aby ją usłyszeć] (https://www.wolframalpha.com/input/?i=play+ (16% 2F15) cos (0,5t) - (1% 2F15) cos (2t)).
Możesz spróbować podwoić częstotliwość raz, dwa lub trzy razy, a następnie przeprowadzić analizę Fouriera, aby uzyskać jej widma, a następnie odtworzyć ją za pomocą syntezatora addytywnego. Czuję, że gdzieś tam musi być syntezator, który zaakceptuje równanie dla kształtu fali, ale nie wiem na pewno. Zastanawiam się, czy uzyskałbyś dobrą odpowiedź na wymianie stosów rekomendacji oprogramowania.
Nie musisz wykonywać analizy Fouriera - jest to liniowa kombinacja cosinusów. Współczynniki Fouriera to „16/15” i „-1 / 15”, dokładnie w tym równaniu, a wszystkie pozostałe współczynniki wynoszą zero. Możesz odtworzyć to w dowolnym syntezatorze addytywnym, np. ZynAddSubFX lub operator w Ableton. Będzie brzmiał jak fala sinusoidalna z cichą harmoniczną drugiej oktawy.
Możesz przesłać ** dowolny ** wektor wartości do różnych narzędzi podobnych do przetwornika cyfrowo-analogowego, które przekonwertują dane na wyjście audio. Ludzie robili to między innymi z cyframi pi.
@naught101 dziękuję za doskonały wgląd! Czy byłbyś tak łaskawy i rozwinąłbyś, skąd wiesz, że druga oktawa harmoniczna jest bardziej miękka? Czy to termin -1/15? czy ma to związek z .5t i 2t
@sova: Tak, liczby poza „cos” są w zasadzie współczynnikami skalującymi. Liczba w nawiasach określa częstotliwość. Spróbuj wstawić `* cos (b * x)` (zastąp `a` i` b` liczbami rzeczywistymi) do https://www.desmos.com/calculator i pomieszaj z wartościami a i b. Szybko zrozumiesz, jak te dwa współczynniki wpływają na fabułę. Następnie spróbuj czegoś takiego jak `cos (x) + cos (2 * x)`, aby zobaczyć, jak działa dodawanie.
Pięć odpowiedzi:
topo Reinstate Monica
2016-03-31 12:50:58 UTC
view on stackexchange narkive permalink

Jak mówi nic101, twój szczególny przypadek to fala sinusoidalna z cichą trzecią harmoniczną. Aby usłyszeć, jak to brzmi przy słyszalnej częstotliwości, przejdź do http://meettechniek.info/additional/additive-synthesis.html w przeglądarce obsługującej interfejs API Web Audio (np. Firefox lub Chrome) włącz dźwięk i ustaw go w ten sposób:

enter image description here

H1 reprezentuje twój (16/15) cos ( ½ t) , chociaż domyślna częstotliwość tego syntezatora online wynosi 440, skutecznie przeskalowaliśmy ją do cos (440 × 2π × t), a (16/15) właśnie znormalizowano do „1.000” . H3 reprezentuje bit - (1/15) cos (2t) , ponownie przeskalowany w częstotliwości - najlepiej byłoby, gdyby objętość wynosiła 0,0625, co stanowi 1/16 objętości podstawy (H1), ale 0,065 jest wystarczająco blisko.

Mimo wszystko może się wydawać, że nie brzmi tak interesująco! W rzeczywistości wszystkie przebiegi, które są ściśle okresowe i bez zmian, wydają się brzmieć dość nudno (przynajmniej dla mnie) - wszystkie będą po prostu statycznym szumem lub buczeniem. Zwykle zmiana kształtu przebiegu w czasie sprawia, że ​​brzmi interesująco.

Ze względu na naturę tego konkretnego równania łatwo jest odtworzyć jego wyjście w syntezatorze addytywnym. W bardziej ogólnym przypadku jednym ze sposobów usłyszenia równania jest próbkowanie jego wyjścia - wygenerowanie „y” dla pewnych wartości „t” (przy określonej częstotliwości próbkowania, takiej jak 44,1 kHz, co oznaczałoby generuje 44100 próbek na sekundę) - i odtwarza listę wartości y jako cyfrowe dane audio PCM.

Jako przykład, jednym z edytorów audio, których używam, jest (dość stary) Adobe Audition 1.5, który może załadować do pliku tekstowego, zinterpretować każdą linię jako wartość próbki i odtworzyć wynikowy przebieg z powrotem jak WAV lub inny plik audio. Aby to zrobić, chce, aby wartości y były przeskalowane, aby pasowały do ​​zakresu danych 8-bitowych lub 16-bitowych (np. Od -32 768 do 32767 dla 16-bitów) i zaokrąglone do najbliższej liczby całkowitej, aby plik tekstowy wyglądał (np.)

  391745875387464530241911791-632-1901
-2554-2124-1234  

Możesz zapytać na https://softwarerecs.stackexchange.com/, czy jest jakiś nowszy / darmowy edytor audio, który może importuj przykładowe dane tekstowe w ten sposób.

Jeśli w ogóle możesz kodować, powinno być dość łatwo znaleźć bibliotekę, która może zapisywać pliki audio (np. język Python ma moduł „wave”) raz wygenerowałeś listę przykładowych wartości, więc możesz łatwo napisać plik audio w popularnym formacie z twojego programu.

Ten rodzaj próbkowania jest prawdopodobnie tym, co znakomita sugestia wolframalfa Doma będzie robiła wewnętrznie, chociaż nie mogłem go uruchomić w mojej przeglądarce! Aby uzyskać równanie w słyszalnym zakresie, możesz je przeskalować - np. używając (16/15) cos (250 * 2π * t) - (1/15) cos (1000 × 2π × t) da falę o częstotliwości podstawowej 250 Hz (zakładając, że t jest w sekundach). Jedną rzeczą, na którą należy zwrócić uwagę podczas próbkowania jest aliasing - aby tego uniknąć, należy próbkować z częstotliwością co najmniej dwukrotnie większą niż wartość dowolnej składowej częstotliwości przebiegu generowanego przez funkcję.

leftaroundabout
2016-03-31 23:47:44 UTC
view on stackexchange narkive permalink

Nie potrzebujesz żadnego specjalnego oprogramowania audio do generowania słyszalnych przebiegów. Oto prosty program w C, który wygeneruje wymagane dane na standardowym wyjściu:

  #include <stdint.h> # include <stdio.h> # include <math.h>double y (16 * double t) {return (16 * double t) cos (t / 2) - cos (t * 2)) / 15;} podwójny skok = 440 * 2 * 3,14159; // więc podstawowa tonacja będzie standardowa A noteint main () {int16_t v; char * p = (char *) (&v); // "bufor" dla standardowego wyjścia double t = 0; while (t + = 1. / 44100) {v = (int16_t) (y (t * skok) * (2<<12)); putchar (p [0]); putchar (p [1]); // zastrzeżenie: to NIE jest dobre programowanie putchar (p [0]); putchar (p [1]); // styl, wystarczy szybki hack, aby wyprowadzić dane} return 0;}  

Zapisz signal.c i wykonaj

  gcc signal.c -lm && ./a.out | aplay -f cd  

To powinno działać od razu po wyjęciu z pudełka, w normalnej instalacji Linuksa (np. Ubuntu).

może `podwójny skok = 440; podwójny kąt Prędkość = skok * 2 * 3,14159`?
No tak ... ale jednostki fizyczne i tak są tutaj trochę pomieszane; naprawdę nie ma sensu rozważanie cos (2 really _t_), jeśli _t_ to czas.
„Nie potrzebujesz żadnego specjalnego oprogramowania audio”, kiedy piszesz własne oprogramowanie ...
José David
2016-04-08 15:02:53 UTC
view on stackexchange narkive permalink

Pytanie zakłada, że ​​dany przebieg jest bezpośrednio słyszalny przez człowieka. Gdyby tak było, alternatywnym podejściem do programistycznego byłoby użycie syntezatora addytywnego do syntezy przebiegu. Dla tych, którzy zajmują się muzyką komputerową / DAW, istnieje wiele darmowych syntezatorów VST, które wykonują syntezę addytywną, i pamiętam co najmniej jeden (musiałbym szukać go w moich archiwach kopii zapasowych), który bezpośrednio generuje przebieg z funkcji matematycznej wyrażenie.

Jednak prezentowana funkcja NIE jest słyszalna dla człowieka. Jest to kombinacja 2 fal sinusoidalnych o częstotliwości:

  • f1 = 0,5 / (2 * Pi) = ~ 0,32 Hz
  • f2 = 2 / (2 * Pi) = ~ 3,14 Hz

Ludzki słuch zaczyna się od około 20 Hz, więc prezentowana funkcja nie jest bezpośrednio słyszalna. Aby uzyskać dźwiękowe renderowanie funkcji, będziemy musieli zastosować jakiś rodzaj procesu „sonifikacji”, tj. Zastosować jakąś transformację funkcji, która umieszcza ją w zakresie słyszalnego przez człowieka dźwięku. W tym przypadku zwykłe pomnożenie częstotliwości, powiedzmy przez 100, załatwiłoby sprawę i pozwoliłoby na zastosowanie metod wskazanych w poprzednich odpowiedziach. Ale istnieje wiele bardzo różnorodnych i interesujących technik, których można użyć do „sonifikacji” dowolnego zestawu przykładowych danych.

Wiele informacji można znaleźć, wyszukując hasło „sonifikacja”, ale dla zainteresowanych, którzy nie mają jeszcze punktu wyjścia, sugeruję wypróbowanie bezpłatnego środowiska internetowego Earsketch z Uniwersytet Georgia Tech. Jest to kompletne, interaktywne środowisko programowania muzyki oparte na składni Pythona, więc jeśli znasz już Python, to bardzo pomaga, ale Python i tak jest łatwym do nauczenia językiem. Jest całkowicie online, nie musisz instalować żadnego oprogramowania.

konkretny rozdział samouczka online Earsketch mówi o sonifikacji.

Oto przykładowy projekt Earsketch do udostępnienia sonifikacji danych (w tym przypadku dane pogodowe). Po prostu zastąpienie własnych danych jest dość łatwe.

OP nie zawiera żadnych jednostek fizycznych. Równie dobrze może to być _f₁_ = (0,5 min⁻¹) / 2π ≈ 0,0013 Hz, co jest jeszcze głębsze w zakresie poddźwiękowym. Lub, bardziej sensownie, można to rozumieć jako odnoszące się do _arbitralnej skali czasu_, tj. Częstotliwość podstawowa jest ad libitum.
thrig
2016-03-31 19:29:57 UTC
view on stackexchange narkive permalink

Równania można wprowadzić np. SuperCollider. Inną opcją jest „wyznaczenie” równania i przekonwertowanie wartości równania w tych punktach na wysokość (i być może także czas trwania, być może w oparciu o nachylenie w tym punkcie lub cokolwiek innego), chociaż będzie to wymagało trochę zamieszania aby odpowiednio wyskalować słupki ogrodzenia (jakie są wartości x) i wyjście (wartości y) w celu dopasowania do odpowiedniego ambitusa:

 % perl -e 'for $ x (0..10) { printf "% d \ n", 60 + 10 * (16/15 * cos (.5 * $ x) - 1/15 * cos (2 *% x))} '7068656054504849525762% perl -e' dla $ x ( 0..100) {printf "% d \ n", 60 + 10 * (16/15 * cos (.5 * $ x) - 1/15 * cos (2 *% x))} '| atonal-util pitch2ly --mode = bezwzględny | ly-fu --instrument = orchestral \ harp --open --absolute -  

enter image description here

Illia Koshovyi
2020-04-09 05:20:11 UTC
view on stackexchange narkive permalink

Potrzebowaliśmy na to 4 lat, ZROBILIŚMY. tworzymy próbkę z 440 frq.
f (x) = 16/15 cos (1 / 2x) - 1/15 cos (2x) Miłego słuchania https://drive.google.com/file/d / 1BPtJyHHpR3jCnHHlDAtylO6IpPDHsPb7 / view? Usp = udostępnianie enter image description here



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...