Team Ai
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes847downloads
GodSong.txt173 linesDownload Raw Back to God
1 2#help_index "God"3 4DefineLstLoad("ST_RHYTHM_COMPLEXITY","Simple\0Normal\0Complex\0");5 6class CMakeSongSettings7{8  I64  complexity               format "$LS,D=\"ST_RHYTHM_COMPLEXITY\"$\n";9  Bool rests                    format "$CB,\"Rests\"$\n";10  Bool six_eight                format "$CB,\"Six Eight\"$\n";11  I64  octave                   format "$DA-TRM,A=\"Octave:%d\"$\n";12  I64  octave_state;13};14 15U0 InsNote(CMakeSongSettings *mss,U8 *buf,I64 k,I64 *j)16{//k is a random note nibble17  if (!k && mss->rests) {18    buf[*j]='R';19    *j+=1;20  } else {21    k/=2;22    if (k<3) {23      if (mss->octave_state!=mss->octave) {24        mss->octave_state=mss->octave;25        buf[*j]=mss->octave_state+'0';26        *j+=1;27      }28      if (!k)29        buf[*j]='G';30      else31        buf[*j]=k-1+'A';32      *j+=1;33    } else {34      if (mss->octave_state!=mss->octave+1) {35        mss->octave_state=mss->octave+1;36        buf[*j]=mss->octave_state+'0';37        *j+=1;38      }39      buf[*j]=k-1+'A';40      *j+=1;41    }42  }43}44 45#define DUR_4           046#define DUR_8_8         147#define DUR_3_3_3       248#define DUR_16_16_16_16 349#define DUR_8DOT_16     450#define DUR_8_16_16     551#define DUR_16_16_8     652 53U8 god_simple_songs [5]={DUR_4,DUR_4,DUR_4,DUR_4,DUR_8_8};54U8 god_normal_songs [5]={DUR_4,DUR_4,DUR_8_8,DUR_3_3_3,DUR_16_16_16_16};55U8 god_complex_songs[9]={DUR_4,DUR_4,DUR_8_8,DUR_8_8,DUR_8DOT_16,DUR_3_3_3,56DUR_8_16_16,DUR_16_16_8,DUR_16_16_16_16};57 58public U8 *GodSongStr()59{//Make God generate 2 measures of a song. Holy Spirit Instructions60  CMakeSongSettings mss;61  U8 *buf;62  I64 i,j=0,k,n,k2,duration,last_duration=-1,len;63 64  MemSet(&mss,0,sizeof(mss));65  mss.complexity=1;66  mss.rests=FALSE;67  mss.octave=music.octave;68 69  if (!PopUpForm(&mss))70    return NULL;71 72  buf=CAlloc(256);73  music.octave=mss.octave=ClampI64(mss.octave,1,7);74  progress4=0;75  if (mss.six_eight)76    progress4_max=6;77  else78    progress4_max=8;79 80  mss.octave_state=mss.octave+1;81  buf[j++]='0'+mss.octave_state;82  if (mss.six_eight) {83    len=6;84    buf[j++]='M';85    buf[j++]='6';86    buf[j++]='/';87    buf[j++]='8';88  } else89    len=8;90  FifoU8Flush(god.fifo);91  for (i=0;i<len;i++) {92    n=GodBits(8);93    if (mss.complexity==2)94      duration=god_complex_songs[n%9];95    else if (mss.complexity==1)96      duration=god_normal_songs[n%5];97    else98      duration=god_simple_songs[n%5];99 100    switch (duration) {101      case DUR_8_8:102        if (last_duration!=DUR_8_8)103          buf[j++]='e';104        InsNote(&mss,buf,GodBits(4),&j);105        InsNote(&mss,buf,GodBits(4),&j);106        break;107      case DUR_8DOT_16:108        buf[j++]='e';109        buf[j++]='.';110        InsNote(&mss,buf,GodBits(4),&j);111        buf[j++]='s';112        InsNote(&mss,buf,GodBits(4),&j);113        duration=DUR_16_16_16_16;114        break;115      case DUR_3_3_3:116        if (last_duration!=DUR_3_3_3) {117          buf[j++]='e';118          buf[j++]='t';119        }120        InsNote(&mss,buf,GodBits(4),&j);121        InsNote(&mss,buf,GodBits(4),&j);122        InsNote(&mss,buf,GodBits(4),&j);123        break;124      case DUR_8_16_16:125        if (last_duration!=DUR_8_8)126          buf[j++]='e';127        InsNote(&mss,buf,GodBits(4),&j);128        buf[j++]='s';129        InsNote(&mss,buf,GodBits(4),&j);130        InsNote(&mss,buf,GodBits(4),&j);131        duration=DUR_16_16_16_16;132        break;133      case DUR_16_16_8:134        if (last_duration!=DUR_16_16_16_16)135          buf[j++]='s';136        InsNote(&mss,buf,GodBits(4),&j);137        InsNote(&mss,buf,GodBits(4),&j);138        buf[j++]='e';139        InsNote(&mss,buf,GodBits(4),&j);140        duration=DUR_8_8;141        break;142      case DUR_16_16_16_16:143        if (last_duration!=DUR_16_16_16_16)144          buf[j++]='s';145        k =GodBits(4);146        k2=GodBits(4);147        InsNote(&mss,buf,k,&j);148        InsNote(&mss,buf,k2,&j);149        InsNote(&mss,buf,k,&j);150        InsNote(&mss,buf,k2,&j);151        break;152      default:153        if (last_duration!=DUR_4)154          buf[j++]='q';155        InsNote(&mss,buf,GodBits(4),&j);156    }157    last_duration=duration;158    progress4++;159  }160  buf[j++]=0;161  progress4=progress4_max=0;162  return buf;163}164 165public U0 GodSong()166{//Make God generate 2measuresx2+2measuresx2. Holy Spirit Instructions167  U8 *st1=GodSongStr,*st2=GodSongStr;168  if (st1 && st2)169    DocPrint(DocPut,"$SO,\"<Song>\",A=\"%s%s%s%s\"$",st1,st1,st2,st2);170  Free(st1);171  Free(st2);172}173