เขียนองค์ประกอบ bytebeat ที่สวยที่สุด


24

Bytebeatเป็นรูปแบบของเพลงหนึ่งสามารถเขียนโดยการเขียนโปรแกรม C ง่าย ๆ ว่าการส่งออกจะประปาหรือaplay/dev/dsp

main(t){for(;;t++)putchar(((t<<1)^((t<<1)+(t>>7)&t>>12))|t>>(4-(1^7&(t>>19)))|t>>7);}

มีข้อมูลจำนวนมากเกี่ยวกับไซต์ bytebeatการใช้งานจาวาสคริปต์และการสาธิตและการเรียบเรียงตัวอย่างเพิ่มเติมในชุดข้อความนี้

กฎง่าย ๆ : พยายามเขียนเรียงความที่น่าฟัง คะแนนโหวตส่วนใหญ่ชนะเพราะเห็นได้ชัดว่าเป็นอัตนัยแม้ว่าจะไม่เป็นเช่นนั้นก็ตาม



คุณถือมันเพื่อ bytebeat ที่เข้มงวด (เช่นไม่มีบัฟเฟอร์)?
ปีเตอร์เทย์เลอร์

4
ทำไมถึงถูก จำกัด อยู่ที่ C?
ผู้ใช้ที่ไม่รู้จัก

ไม่มีเหตุผลที่แท้จริงใด ๆ ในการ จำกัด การใช้บัฟเฟอร์หรือภาษาอื่น ๆ แต่โดยทั่วไปแล้ว bytebeat หมายความว่า C วงเฉพาะกับผลลัพธ์ที่กำหนดโดยสูตร ฉันโหวตให้คำตอบของ Joey Adams แม้จะคิดrand()ว่าไม่ได้มาตรฐานก็ตาม
Jeff Burdges

ในขณะที่ฉันชอบความคิดนี้คำถามที่พบบ่อยเรียกร้องให้มีเกณฑ์การชนะอย่างมีเป้าหมาย (มันง่ายเกินไปที่จะติดกับการคำนวณหรือศิลปะ ASCII) เราสามารถมองหาสิ่งที่นิยามได้ดีกว่า "สวย" หรือไม่?
dmckee

คำตอบ:


16

(endian เล็ก ๆ น้อย ๆ 16 บิต, 8000Hz mono ( --format=S16_LE))

เพลง

มากดีกว่าก่อน! (แม้ว่าจะค่อนข้างยาว)

main(t){for(;;t++)putchar(((7&(((t>>17)+1)>>2)+((t>>10)&1+2*(t>>18&1))*(("23468643"[7&t>>12]-48)+(3&t>>11))+((3&t>>17)>0)*(3&t>>9)*!(1&t>>10)*(((2+t>>10&3)^(2+t>>11&3))))*t*"@06+"[3&t>>15]/32));}

(คุณสามารถฟังได้ที่นี่ )

ที่ผมเขียนนี้ แต่แม้ผมไม่ทราบว่าวิธีการทำงานบางส่วนเหมือน>0และ (โดยเฉพาะ) 7&คนแรก

เปลี่ยนเป็นวนซ้ำเป็นfor(;!(t>>22);t++)... เพื่อฟัง 'หนึ่งครั้ง' ฉันไม่ทราบว่ามัน "ลูป" ในลักษณะเดียวกันทั้งหมด

Melody (ฐานของเพลงด้านบน)

ฉันชอบทำนองเพลงนี้ที่ฉันทำ (CGAF ftw) แต่มันก็ 'ธรรมดา' เกินไป ...

main(t){for(;;t++)putchar(((t>>10)&1)*(t*("23468643"[7&t>>12]-48)+t*(3&t>>11))*"@06+"[3&t>>15]/32);}

เพลงง่าย ๆ (ที่ฉันทำไว้ก่อนหน้านี้)

main(t){for(;;t++)putchar(t*(3&t>>11)+(t&t>>11)*4*!((t>>11)%3));}


หากคุณคลิกที่ลิงค์ bytebeat ด้านบนคุณจะเห็นบรรทัดคำสั่ง sox เพื่อแปลงเป็นไฟล์. wav และบรรทัดคำสั่งคอมเพรสเซอร์แบบคี่
Jeff Burdges

3
+1 น่าทึ่ง! สองสามบิต (เช่น 1:30 - 1:40) ชนิดของเสียง "พูดติดอ่าง" แต่แล้วอีกครั้งเสน่ห์ของ bytebeat ส่วนใหญ่อยู่ในจังหวะและท่วงทำนองแปลก ๆ และไม่เป็นทางการและผลโดยรวมนั้นยอดเยี่ยม (ปล. ฉันเล่นโดยบังเอิญที่ 8 บิตต่อตัวอย่างและฉันก็ฟังดูดีอย่างน่าประหลาดใจเช่นกันการเล่นไวนิล 45 รอบต่อนาทีที่ 33.3 รอบต่อนาที)
Ilmari Karonen

3

ฟังก์ชั่นผู้ปกครองในมาตรฐาน:

#include <math.h>
#include <stdio.h>

#define PI 3.14159265358979323846

#define step(freq, n) ((freq) * pow(2, (n) / 12.0))
#define note(n)       step(440, n)
#define MIDDLE_C      note(-9)

int count_zeros(unsigned int n)
{
    int count = 0;
    for (; (n & 1) == 0; n >>= 1)
        count++;
    return count;
}

int minor_note(int note)
{
    int octave = note / 7;
    int scale[] = {0, 2, 3, 5, 7, 8, 10};

    note %= 7;
    if (note < 0) {
        note += 7;
        octave--;
    }

    return scale[note] + octave*12;
}

int main(void) {
    double t = 0.0;
    double freq = MIDDLE_C * 2;
    double step = PI * 2 / 8192;
    int n = 0;
    int i = 0;

    for (i = 1;; t += step, i++) {
        if (i == 1024) {
            i = 0;
            n++;
            freq = step(MIDDLE_C, minor_note(count_zeros(n)));
        }

        putchar(sin(t * freq) * 50.0 + 128.0);
    }

    return 0;
}

นีซทำนอง แต่จะเป็น "องค์ประกอบ" นี้ IMO ต้องการบางสิ่งบางอย่างมากขึ้น ...
Ilmari Karonen

3
main(t){for(;;t+=(t%6)?1:2)putchar((((t<<t^(t>>8))|(t<<7))*((t<<t&(t>>12))|(t<<10))));}

bytebeat คลาสสิกมาก ๆ ถ้าไม่ใช่แบบอแมนม่า +1 จากฉัน
Ilmari Karonen

3

เน้น "ชนะ" มากกว่า "ไบต์":

#include<math.h>

double s(double,double);double r(double,double);double d(double);double f(double);

char bytebeat(int t){return (d(f(t/4000.)/3) + 1) * 63;}
double f(double t){
  double sn=s(1./2,t-1); sn*=(sn*sn);
  return 3*s(1./4,1/s(1,t))+3*s(4,1/sn)/2+s(4,1/(sn*sn*sn*sn*sn))/4
       +2*s(55+18.3*r(1./2,t),t)+s(110+s(5,t)/4000,t)*s(1,t)+s(220+110*r(1,t)+55*r(3,t),t)/5
       +s(880+440*r(1./2,t)-220*r(1,t)+110*r(2,t)+s(5,t)/4000,t)
       *(2+s(1760+438*r(3./2,t)-1234*r(2,t)+423*r(5,t),t))/9
       +s(s(1,t)+s(1./2,t)+s(1./4,t)+s(1./8,t),t)*s(s(1,t)+s(1./2,t)+s(1./4,t)+s(1./8,t)+1,t)
       +r(264+11*r(1./20,t),t)*s(1./20,t);
}
double s(double f,double t){return d(sin(f*3.14159265*(t+999)));}
double r(double f,double t){return s(f,t)<0;}
double d(double a){return tanh(a+a*a/4);}

main(t){for(;;++t)putchar(bytebeat(t));}

เพื่อใช้ที่ 8 kHz, uint8 mono ให้เสียงที่ดีที่สุดผ่านลำโพงที่มีความสามารถเสียงเบส


2
main(){for(;;)putchar(rand());}

เสียงเหมือนมหาสมุทร ;-)


1
เหมือนรถไฟที่ยุ่งมากข้ามมาหาฉัน :)
Ilmari Karonen

5
Protip: หากดูเหมือนว่าเสียงต่อเนื่อง RNG ของคุณจะพัง
นาย Llama

3
วิธีที่ง่ายกว่า:$ cat /dev/urandom | aplay
Braden Best

2
@ B1KMusic ง่ายขึ้นมาก:aplay /dev/urandom
minmaxavg

0

ทำนองและความสามัคคี:

r=3,
r=3,
m=(t*(t>>12|t>>13|t>>14|t>>15|t>>16|t>>17|t>>18))&63,

h= ((t&t>>7&t>>6)|t*5&t>>8-c^t*6&t>>9-c|t*7&t>>12-c^t*9&t>>11-c^t*11&t>>22^t*19&t>>20^t*14&t>>20|t*23&t>>15-c|t*12&t>>9|t*30&t>>30|t>>5|t>>4)-31, m|h
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.