char *notenames[] = {"C-", "C#", "D-", "D#", "E-", "F-", "F#", "G-", "G#", "A-", "A#", "H-"};
-char *validcmds = "0dfijlmtvw~+=";
+char *validcmds = "0dfijlmtvw~+=S";
/*char *keymap[2] = {
";oqejkixdbhmwnvsz",
exportseek = 0;
for(i = 0; i < 16 + maxtrack; i++) {
+ // if(exportfile) fprintf(exportfile, "songdata_resources%d:\n", i);
exportchunk(resources[i], 13);
}
resources[nres++] = alignbyte();
+ // if(exportfile) fprintf(exportfile, "songdata_song:\n");
for(i = 0; i < songlen; i++) {
for(j = 0; j < 4; j++) {
if(song[i].transp[j]) {
for(i = 1; i < 16; i++) {
resources[nres++] = alignbyte();
+ // if(exportfile) fprintf(exportfile, "songdata_instrument%d:\n", i);
if(instrument[i].length > 1) {
for(j = 0; j < instrument[i].length; j++) {
exportchunk(packcmd(instrument[i].line[j].cmd), 8);
for(i = 1; i <= maxtrack; i++) {
resources[nres++] = alignbyte();
+ // if(exportfile) fprintf(exportfile, "songdata_track%d:\n", i);
for(j = 0; j < tracklen; j++) {
u8 cmd = packcmd(track[i].line[j].cmd[0]);
}
}
-void export() {
- FILE *f = fopen("exported.s", "w");
- FILE *hf = fopen("exported.h", "w");
+void export(char *stem) {
+ int blen = strlen(stem) + 5;
+ char *buf = alloca(blen);
+ if(!buf) {
+ return;
+ }
+ snprintf(buf, blen, "%s.s", stem);
+ FILE *f = fopen(buf, "w");
+
+ snprintf(buf, blen, "%s.h", stem);
+ FILE *hf = fopen(buf, "w");
+
int i, j;
int maxtrack = 0;
int resources[256];
optimize();
break;
case '%':
- export();
+ export("export");
break;
case KEY_LEFT:
switch(currtab) {
}
int main(int argc, char **argv) {
- SDL_AudioSpec requested, obtained;
-
- if(argc != 2) {
- err(1, "usage: %s <filename>\n", argv[0]);
- }
-
- SDL_Init(SDL_INIT_AUDIO);
-
- atexit(SDL_Quit);
-
- requested.freq = 16000;
- requested.format = AUDIO_U8;
- requested.samples = 256;
- requested.callback = audiocb;
- requested.channels = 1;
- if(SDL_OpenAudio(&requested, &obtained) == -1) {
- err(1, "SDL_OpenAudio");
- }
-
- fprintf(stderr, "freq %d\n", obtained.freq);
- fprintf(stderr, "samples %d\n", obtained.samples);
-
initchip();
initgui();
- loadfile(argv[1]);
-
- SDL_PauseAudio(0);
-
- guiloop();
+ if(!strcmp("--audio", argv[1])) {
+ loadfile(argv[2]);
+
+ char *pcmname = (argc > 2) ? argv[3] : "audio" ;
+ FILE *f = fopen(pcmname, "w");
+
+ startplaysong(0);
+
+ while(playsong) {
+ u8 res = interrupthandler();
+ fwrite(&res, 1, 1, f);
+ }
+ fclose(f);
+ } else if(!strcmp("--export", argv[1])) {
+ loadfile(argv[2]);
+ char *exportname = (argc > 2) ? argv[3] : "export" ;
+ export(exportname);
+ } else {
+ if(argc != 2) {
+ err(1, "usage: %s <filename>\n", argv[0]);
+ }
+
+ SDL_AudioSpec requested, obtained;
+ SDL_Init(SDL_INIT_AUDIO);
+ atexit(SDL_Quit);
+
+ requested.freq = 16000;
+ requested.format = AUDIO_U8;
+ requested.samples = 256;
+ requested.callback = audiocb;
+ requested.channels = 1;
+ if(SDL_OpenAudio(&requested, &obtained) == -1) {
+ err(1, "SDL_OpenAudio");
+ }
+
+ fprintf(stderr, "freq %d\n", obtained.freq);
+ fprintf(stderr, "samples %d\n", obtained.samples);
+
+ loadfile(argv[1]);
+ SDL_PauseAudio(0);
+ guiloop();
+ }
return 0;
}