39 extern "C" void *
fm_bells(
void * ptr);
41 extern "C" void *
phonemes(
void * ptr);
42 extern "C" void *
mixer(
void * ptr);
46 CSLService :: CSLService(
char * name,
unsigned short lport,
unsigned short eport,
char * which)
47 : Server(name, lport, eport) {
48 mLog.logMsg(
"[CSL Server created]");
49 mWhich = (
char *) malloc(strlen(which) + 1);
51 mAppStatus = CRAM_INIT;
52 if ( ! strcmp(
mWhich,
"bells")) {
53 mOptions.push_back(make_pair (
string(
"density"),
string(
"10")));
54 mOptions.push_back(make_pair (
string(
"reverb"),
string(
"0.97")));
55 }
else if ( ! strcmp(
mWhich,
"noise")) {
56 mOptions.push_back(make_pair (
string(
"lo_frequency"),
string(
"0.2")));
57 mOptions.push_back(make_pair (
string(
"hi_frequency"),
string(
"0.35")));
58 }
else if ( ! strcmp(
mWhich,
"voices")) {
59 mOptions.push_back(make_pair (
string(
"period"),
string(
"10")));
72 mLog.logMsg(
"[Starting CSL server %s]", mName);
76 if ( ! strcmp(
mWhich,
"bells")) {
78 }
else if ( ! strcmp(
mWhich,
"noise")) {
80 }
else if ( ! strcmp(
mWhich,
"voices")) {
82 }
else if ( ! strcmp(
mWhich,
"mixer")) {
83 err = pthread_create( &
mThread, NULL,
mixer, (
void *) & mLog);
89 mAppStatus = CRAM_FAILED;
96 mLog.logMsg(kLogImportant,
"[Stopping service %s]", mName);
100 mAppStatus = CRAM_OFF;
106 mLog.logMsg(
"[Suspend service %s]", mName);
107 mAppStatus = CRAM_SUSPENDED;
112 mLog.logMsg(
"[Resums service %s]", mName);
113 mAppStatus = CRAM_ON;
122 mLog.logMsg(
"[Configure %s = %s]", nam, val);
123 if ( ! strcmp(nam,
"period")) {
125 if (i_val < 10) i_val = 10;
126 if (i_val > 600) i_val = 600;
139 int main(
int argc,
char * argv[]) {
140 bool autoPlay =
false;
143 printf(
"Usage: %s service_name listener_port emergency_port program-selector\n", argv[0]);
146 int lport = atoi(argv[2]);
147 int eport = atoi(argv[3]);
148 char * which = argv[4];
151 for (
int i = 5; i < argc; i++) {
152 if ( ! strcmp(argv[i],
"-o")) {
153 int outPort = atoi(argv[++i]);
156 }
else if ( ! strcmp(argv[i],
"-i")) {
157 hosts.push_back(argv[++i]);
158 ports.push_back(atoi(argv[++i]));
159 }
else if ( ! strcmp(argv[i],
"-a")) {
175 if (
server->start_threads() != 0) {
176 printf(
"\t[%s: FATAL: Application start-up failed]\n", argv[1]);
178 printf(
"\t[%s: Server running]\n", argv[1]);
179 pthread_join(
server->mEThread, NULL);
180 printf(
"\t[%s: Server terminated]\n", argv[1]);
183 printf(
"\t[%s: Server exiting]\n", argv[1]);
191 Logger * mLog = (Logger *) ptr;
193 mLog->logMsg(
"\tplaying FM bells...");
195 ADSR a_env(1, 0.01, 0.1, 0.1, 0.6);
196 a_env.scale_values(0.25);
197 ADSR i_env(1, 0.001, 0.1, 0.5, 0.5);
200 MulOp i_mul(mod, var);
201 AddOp adder(i_mul, 220.0);
202 vox.set_frequency(adder);
203 MulOp a_mul(vox, a_env);
211 frq = 500 + (frandom() * 2000);
212 mod.set_frequency(frq * 1.414);
214 adder.set_operand(frq);
217 sleep_sec(1 + (frandom() * 1));
227 RandEnv center(0.2, 400.0, 600.0);
229 filt.set_bandwidth(150.0);
230 RandEnv ampl(0.15, 0.2, 0.2);
231 MulOp mult(filt, ampl);
235 RandEnv center2(0.35, 1500.0, 8000.0);
237 filt2.set_bandwidth(300.0);
238 RandEnv ampl2(0.2, 0.2, 0.2);
239 MulOp mult2(filt2, ampl2);
243 AddOp add(pan, pan2);
256 extern "C" void *
mixer(
void * ptr) {
257 Logger * mLog = (Logger *) ptr;
260 for (
unsigned i = 0; i <
hosts.size(); i++)
261 mix.add_input( * (
new RemoteFrameStream(
hosts[i],
ports[i],
262 CSL_DEFAULT_RESPONSE_PORT + (i * 4),
263 2, CSL_RFS_BUFFER_SIZE)));
264 mLog->logMsg(
"\tplaying CSL mixer...");
266 verb.set_wet_level(0.5);
267 verb.set_room_size(0.983);
277 #define LL_FILENAME "/usr/local/CSL/Data/SpeakerDB.txt"
278 #define SS_FILENAME "/usr/local/CSL/Data/SpeakerDB.aiff"
285 char c_name[32], line[128];
286 unsigned start, stop;
298 fgets(line, 128, inp);
299 sscanf(line,
"%s %u %u\n", c_name, &start, &stop);
314 MulOp mult( * voice, 0.1);
326 pan.set_input( * voice);
327 pos.set_value(frandom() * 2 - 1);
329 sleep_sec(10 + (frandom() * 15));
344 va_start(args, format);
345 server->mLog.vlogMsg(cLev, format, args);
351 va_start(args, format);