#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define MAX_SUB_PROCESS 100 #define FIFO_SIZE 48000 #define pi 3.1415926535 char process_list[MAX_SUB_PROCESS][80]; unsigned int pid[200], audio_pid; int pid_ctr, sub_process, audio_mode, sample_param, pitch_param; char *audio_menu[] = { "audio_oscillator", "audio_granular" }; short buffer[FIFO_SIZE]; void sub_process_check(); void create_process(); void process_killer(); void self_kill(); void open_X_process(); void create_sound(); void sound_off(); void scaler_volume(); void scaler_sample(); void scaler_pitch(); void audio_oscillator(); void audio_granular(); void main(unsigned int argc, char** argv) { Widget toplevel, title, bigbox, sbox[10], pb1[MAX_SUB_PROCESS], pb2[5], pb3[3], volume, sample, pitch; XmString xmstr; Arg args[10]; char buf[80]; int i,n; /***** System Setting (Parameter File Check) *****/ sub_process_check(); open_X_process( "X/monitor", " Monitor[1] ", "5", "dummy_1_a", "dummy_1_b" ); open_X_process( "X/console", " Slider[1] ", "5", "dummy_1_a", "dummy_1_b" ); open_X_process( "X/monitor", " Data Monitor [2] ", "7", "dummy_2_a", "dummy_2_b" ); open_X_process( "X/console", " Controller [2] ", "7", "dummy_2_a", "dummy_2_b" ); /***** Motif Screen Define *****/ toplevel = XtInitialize( argv[0], "", NULL, 0, &argc, argv ); bigbox = XtCreateManagedWidget( "", boxWidgetClass, toplevel, NULL, 0 ); xmstr = XmStringCreateSimple(" (^_^) TEST by Yoichi Nagashima (^_^) "); XtSetArg( args[0], XmNlabelString, xmstr ); title = XtCreateManagedWidget( "", xmLabelWidgetClass, bigbox, args, 1 ); for(i=0;i<10;i++){ sbox[i] = XtCreateManagedWidget( "", boxWidgetClass, bigbox, NULL, 0 ); } for(i=0;i MAX_SUB_PROCESS-1 ) break; } sub_process--; for(i=0;i MAX_SUB_PROCESS-1 ) break; } sub_process--; for(i=ii;ivalue; parameter_buffer[3] = callback->value; ALsetparams( AL_DEFAULT_DEVICE, parameter_buffer, 4 ); } void scaler_sample(Widget w, caddr_t message, caddr_t para) { XmScaleCallbackStruct *callback = (XmScaleCallbackStruct *) para; sample_param = callback->value; } void scaler_pitch(Widget w, caddr_t message, caddr_t para) { int i, width; XmScaleCallbackStruct *callback = (XmScaleCallbackStruct *) para; pitch_param = callback->value; if( audio_mode == 3){ width = 64 + 4 * pitch_param; for(i=0;i 256 ){ for(i=0;i<256;i++){ buff[i] = buffer[read_pointer++]; if( read_pointer > sample_param * 256 ) read_pointer=0; } ALwritesamps( output_port, buff, 256 ); } } } void audio_granular() { ALconfig config; ALport output_port; short buff[256]; unsigned int read_pointer[20]; int i, j; config = ALnewconfig(); ALsetqueuesize( config, FIFO_SIZE ); output_port = ALopenport( "output", "w", config ); if ( output_port == NULL ) exit(-1); for(i=0;i<20;i++) read_pointer[i] = 0; for(i=0;i<128;i++) buffer[i] = (short)( 800.0 * ( 1.0 + sin( 2.0 * pi * (double)i / 128.0 + 2.0 * pi * 3.0 / 4.0 ))); for(i=128;i 256 ){ for(i=0;i<256;i++){ buff[i] = 0; for(j=0;j<20;j++){ buff[i] = buff[i] + buffer[read_pointer[j]++]; if( read_pointer[j] > ( sample_param + 10 ) * 10 * (j+5) ) read_pointer[j] = 0; } } ALwritesamps( output_port, buff, 256 ); } } }