niedziela, 17 kwietnia 2016

Jednolinijkowe generatory melodii

Na blogu countercomplex znalazłem ciekawy artykuł jak generować 8-bitowe oldskulowe (podobne do tych z gier z lat 80-tych) melodie za pomocą jednej linijki kodu w języku C. Poniżej dwa przykładowe programy:

main(t){for(t=0;;t++)putchar((t*5&t>>7)|(t*3&t>>10));}

main(t){for(t=0;;t++)putchar((t>>6|t|t>>(t>>16))*10+((t>>11)&7));}

Powyższe programy kompilujemy następująco:

gcc sound.c -o sound

Aby odtworzyć dźwięk z naszego generatora o nazwie sound, należy przekierować jego standardowe wyjście na standardowe wejście odtwarzacza audio np. aplay (Linux) za pomocą potoku |:

./sound | aplay

W komentarzach do artykułu na blogu countercomplex jest dużo innych przykładów - można poeksperymentować modyfikując funkcję putchar().

Źródła
http://countercomplex.blogspot.com/2011/10/algorithmic-symphonies-from-one-line-of.html 
http://countercomplex.blogspot.com/2011/10/some-deep-analysis-of-one-line-music.html