3 Ann Hell Ex Machina - Music Software
4 Copyright (C) 2003/2005 Angel Ortega <angel@triptico.com>
6 main.c - Miscellaneous functions and startup
8 This program is free software; you can redistribute it and/or
9 modify it under the terms of the GNU General Public License
10 as published by the Free Software Foundation; either version 2
11 of the License, or (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 http://www.triptico.com
38 /* output information */
40 static char * devfile
=NULL
;
41 static char * driver
="default";
44 static int skip_secs
=0;
50 static void read_config(void)
55 static int main_usage(void)
57 printf("Ann Hell Ex Machina %s - Music Writing Software\n", VERSION
);
58 printf("Copyright (C) 2003-2005 Angel Ortega <angel@triptico.com>\n");
59 printf("This software is covered by the GPL license. NO WARRANTY.\n\n");
60 printf("Usage: annhell [options] {script.ahs}\n\n");
61 printf("Options:\n\n");
62 printf("-o {output file or device} Set output file [default: driver dependent].\n");
63 printf("-d {driver} Output driver [default: 'default'].\n");
64 printf("-L {path} Add path to script / data library search path.\n");
65 printf("-r {sampling rate} Set sampling rate [default: 44100]\n");
66 printf("-c {# of channels} Set number of channels [default: 2]\n");
67 printf("-v {master volume} Set master volume [default: 0.5]\n");
68 printf("-s {seconds to skip} Seconds to skip from the start of the song.\n");
69 printf(" [default: 0, start from the beginning]\n");
70 printf("-i {interpolation} Set interpolation algorithm\n");
71 printf(" (0, none; 1, linear; 2, cubic spline,\n");
72 printf(" 3, Lagrange) [default: 3]\n");
73 printf("-M Output song to MIDI device instead of softsynth.\n");
74 printf("-I Interactive; read from MIDI device and\n");
75 printf(" use {script} as instrument.\n");
77 printf("Internal sample size: %d bits (floating point)\n", sizeof(sample_t
) * 8);
83 static int main_interactive(char * script_or_ins
)
85 printf("UNIMPLEMENTED; use the 'midiin' program instead.\n");
90 static int main_midi(char * script
)
92 if(compile_ahs(script
))
95 if(midi_device_open(devfile
) < 0)
97 printf("Error: can't open MIDI device\n");
101 midi_song_play(skip_secs
);
109 static int main_ss(char * script
)
111 if(ss_output_open(driver
, devfile
) < 0)
113 printf("Error: can't init driver\n");
117 if(compile_ahs(script
))
120 ss_song_render(skip_secs
);
124 printf("clipped: %d optimal volume: %f\n",
125 ss_output_clipped
, ss_optimal_volume
);
131 static int annhell_main(int argc
, char * argv
[])
141 return(main_usage());
146 add_to_library_path("~/annhell", 0);
152 if(strcmp(opt
, "-o") == 0)
154 /* set output device or file */
158 if(strcmp(opt
, "-d") == 0)
164 if(strcmp(opt
, "-L") == 0)
166 /* add path to library */
167 add_to_library_path(argv
[n
++], 0);
170 if(strcmp(opt
, "-r") == 0)
172 /* set sampling rate */
173 ss_frequency
=atoi(argv
[n
++]);
176 if(strcmp(opt
, "-c") == 0)
178 /* set number of channels */
179 ss_nchannels
=atoi(argv
[n
++]);
182 if(strcmp(opt
, "-v") == 0)
184 /* set master volume */
185 ss_master_volume
=(double) atof(argv
[n
++]);
188 if(strcmp(opt
, "-i") == 0)
190 /* set interpolation type */
191 ss_interpolation
=atoi(argv
[n
++]);
194 if(strcmp(opt
, "-s") == 0)
196 /* seconds to skip */
197 skip_secs
=atoi(argv
[n
++]);
200 if(strcmp(opt
, "-I") == 0)
202 /* activate interactive mode */
206 if(strcmp(opt
, "-M") == 0)
208 /* activate MIDI mode */
212 return(main_usage());
215 script
=argv
[argc
- 1];
218 return(main_usage());
221 ret
=main_interactive(script
);
224 ret
=main_midi(script
);
232 int main(int argc
, char * argv
[])
234 return(annhell_main(argc
, argv
));