Автор NightRadio
Музыкальный трек написанный на Pixilang
Внимание, ест много памяти
TICK_SIZE = 4096 BUFFER_SIZE = TICK_SIZE * 64 FREQ = 44100 buf = new_array( BUFFER_SIZE * 2 ) sound_volume( 128 ) per = new_array( 60 ) p = 0 per[ p ] = 1712 p + 1 per[ p ] = 1616 p + 1 per[ p ] = 1524 p + 1 per[ p ] = 1440 p + 1 per[ p ] = 1356 p + 1 per[ p ] = 1280 p + 1 per[ p ] = 1208 p + 1 per[ p ] = 1140 p + 1 per[ p ] = 1076 p + 1 per[ p ] = 1016 p + 1 per[ p ] = 960 p + 1 per[ p ] = 906 p + 1 per[ p ] = 856 p + 1 per[ p ] = 808 p + 1 per[ p ] = 762 p + 1 per[ p ] = 720 p + 1 per[ p ] = 678 p + 1 per[ p ] = 640 p + 1 per[ p ] = 604 p + 1 per[ p ] = 570 p + 1 per[ p ] = 538 p + 1 per[ p ] = 508 p + 1 per[ p ] = 480 p + 1 per[ p ] = 453 p + 1 per[ p ] = 428 p + 1 per[ p ] = 404 p + 1 per[ p ] = 381 p + 1 per[ p ] = 360 p + 1 per[ p ] = 339 p + 1 per[ p ] = 320 p + 1 per[ p ] = 302 p + 1 per[ p ] = 285 p + 1 per[ p ] = 269 p + 1 per[ p ] = 254 p + 1 per[ p ] = 240 p + 1 per[ p ] = 226 p + 1 per[ p ] = 214 p+1 per[ p ] = 202 p+1 per[ p ] = 190 p+1 per[ p ] = 180 p+1 per[ p ] = 170 p+1 per[ p ] = 160 p+1 per[ p ] = 151 p+1 per[ p ] = 143 p+1 per[ p ] = 135 p+1 per[ p ] = 127 p+1 per[ p ] = 120 p+1 per[ p ] = 113 p+1 per[ p ] = 107 p+1 per[ p ] = 101 p+1 per[ p ] = 95 p+1 per[ p ] = 90 p+1 per[ p ] = 85 p+1 per[ p ] = 80 p+1 per[ p ] = 75 p+1 per[ p ] = 71 p+1 per[ p ] = 67 p+1 per[ p ] = 63 p+1 per[ p ] = 60 p+1 per[ p ] = 56 p+1 off = TICK_SIZE * 0 note = 50-24 vol = 2000 * 64 ADD_STRING off = TICK_SIZE * 0 note = 50 vol = 2000 * 64 ADD_STRING off = TICK_SIZE * 3 note = 50+12 vol = 2000 * 64 ADD_STRING off = TICK_SIZE * 6 note = 50-12 vol = 2000 * 64 ADD_STRING off = TICK_SIZE * 9 note = 53 vol = 2000 * 64 ADD_STRING off = TICK_SIZE * (32+0) note = 45-24 vol = 2000 * 64 ADD_STRING off = TICK_SIZE * (32+0) note = 50 vol = 2000 * 64 ADD_STRING off = TICK_SIZE * (32+3) note = 52 vol = 2000 * 64 ADD_STRING off = TICK_SIZE * (32+6) note = 48 vol = 2000 * 64 ADD_STRING off = TICK_SIZE * (32+9) note = 50 vol = 2000 * 64 ADD_STRING off = TICK_SIZE * (32+9) note = 48 vol = 800 * 64 ADD_STRING off = TICK_SIZE * (32+9) note = 45 vol = 800 * 64 ADD_STRING MAKE_REVERSE a = 0 while( a < 0 ) { off = TICK_SIZE * (a+0) vol = 3000 ADD_BIT off = TICK_SIZE * (a+1) vol = 200 ADD_BIT off = TICK_SIZE * (a+2) vol = 3000 ADD_BIT off = TICK_SIZE * (a+3) vol = 100 ADD_BIT off = TICK_SIZE * (a+4) vol = 1000 ADD_BIT off = TICK_SIZE * (a+5) vol = 300 ADD_BIT off = TICK_SIZE * (a+6) vol = 1500 ADD_BIT off = TICK_SIZE * (a+7) vol = 100 ADD_BIT a + 8 } MAKE_BLUR MAKE_BLUR send_sound( buf, FREQ, 2, 1 ) halt ADD_STRING: coff = rand&127 p = off sp = 0 new_d = ( ( ( 3546894 / FREQ ) * 1024 ) / per[ note ] + (rand&3) ) * 1024 d = prev_d pp = 0 while( vol > 0 ) { l = ( ( sp / 1024 ) & 127 ) - 64 r = ( (( sp / 1024 )+coff) & 127 ) - 64 vol2 = ( (csin( pp / 20 )/4+200) * vol ) / 256 l * (vol2/32) l = l / 64 r * (vol2/32) r = r / 64 buf[ p * 2 + 0 ] = buf[ p * 2 + 0 ] + l buf[ p * 2 + 1 ] = buf[ p * 2 + 1 ] + r sp + d / 1024 if d < new_d { d + 128 if d > new_d { d = new_d } } if d > new_d { d - 128 if d < new_d { d = new_d } } vol - 1 p + 1 if p >= BUFFER_SIZE { p = 0 } pp + 1 } prev_d = d ret ADD_BIT: p = off pp = 0 ps = 32768 while( vol > 0 ) { l = (rand&127)-64 r = (rand&127)-64 l * (vol/32) r * (vol/32) buf[ p * 2 + 0 ] = buf[ p * 2 + 0 ] + l buf[ p * 2 + 1 ] = buf[ p * 2 + 1 ] + r vol - 2 p + 1 ps - 256 if ps < 0 { ps = 0 } pp + (ps / 256) if p >= BUFFER_SIZE { p = 0 } } ret MAKE_ECHO: i = 0 while( i < 4 ) { p = 0 while( p < BUFFER_SIZE*2 ) { p2 = p - TICK_SIZE*2*8 if p2 < 0 { p2 + BUFFER_SIZE*2 } buf[ p ] = buf[ p ] + buf[ p2 ] / 4 p + 1 } i + 1 } ret MAKE_BLUR: p = 0 while( p < BUFFER_SIZE ) { p2 = p + 1 if p2 >= BUFFER_SIZE { p2 = 0 } p3 = p - 1 if p3 < 0 { p2 = BUFFER_SIZE - 1 } l = ( buf[ p2 * 2 + 0 ] + buf[ p3 * 2 + 0 ] ) / 2 r = ( buf[ p2 * 2 + 1 ] + buf[ p3 * 2 + 1 ] ) / 2 buf[ p * 2 + 0 ] = l buf[ p * 2 + 1 ] = r p + 1 } ret MAKE_REVERSE: p = 0 while( p < BUFFER_SIZE ) { p2 = ( BUFFER_SIZE - p ) - 1 buf[ p * 2 + 0 ] = buf[ p * 2 + 0 ] + ( buf[ p2 * 2 + 1 ] * csin( p / 32 ) ) / 256 buf[ p * 2 + 1 ] = buf[ p * 2 + 1 ] + ( buf[ p2 * 2 + 0 ] * csin( p / 32 ) ) / 256 p + 1 } ret