void playOsc(Osc *o, int note) { float f = mtof(note); float u = 1000000.f/f; o->uPeriod = u; o->halfPeriod = o->uPeriod/2; o->note = note; }
void line_play::update(){ if(f.size() > 0){ tstart += speed; push_output(0,mtof(f[mod((int) (tstart),f.size())])); } }
void playDirStepOsc(DirStepOsc *o, int note, int vel) { float f = mtof(note)*2; float u = 1000000.f/f; o->uPeriod = u; o->halfPeriod = o->uPeriod/2; o->out = 0; shiftPin(o->enableShiftPin, 1); }
//----------------------------------------------------------------------------- // name: mtof() // desc: midi to freq //----------------------------------------------------------------------------- double mtof( double f ) { if( f <= -1500 ) return (0); else if( f > 1499 ) return (mtof(1499)); // else return (8.17579891564 * exp(.0577622650 * f)); // TODO: optimize else return ( pow(2,(f-69)/12.0) * 440.0 ); }
void playVelOsc(VelOsc *o, int note, int vel) { float f = mtof(note); float u = 1000000.f/f; o->uPeriod = u; o->pwmValue = 127-vel; applyVel(o); }
void playRandOsc(RandOsc *o, int note, int vel) { float f = mtof(note); float u = 1000000.f/f; o->uPeriod = u; o->halfPeriod = u/2; scaleRandVal(o); }
void playControlStepOsc(ControlStepOsc *o, int note, int vel) { shiftPin(o->enableShiftPin, 1); float f = mtof(note); float u = 1000000.f/f; o->uPeriod = u; o->halfPeriod = o->uPeriod/2; o->out = 0; }
void ccOsc(Osc *o, int ctrlId, int val) { //if(ctrlId==-1) { float f = mtof(o->note); float power = val - 63; power /= 63; f *= pow(2, power); float u = 1000000.f/f; o->uPeriod = u; o->halfPeriod = o->uPeriod/2; //} }
void playLimitStepOsc(LimitStepOsc *o, int note, int vel) { shiftPin(o->enableShiftPin, 1); float f = mtof(note); float u = 1000000.f/f; o->uPeriod = u; o->halfPeriod = o->uPeriod/2; o->out = 0; o->checked = 0; o->disabledTime = 0; }
void playDrawerOsc(DrawerOsc *o, int note, int vel) { shiftPin(o->enableShiftPin, 1); // optimum note for driving drawers is C3? float f = mtof(note); float u = 1000000.f/f; o->uPeriod = u; o->halfPeriod = o->uPeriod/2; o->out = 0; o->dir = DRAWER_START_DIR; digitalWrite(o->dirPin, o->dir); o->checked = 0; o->counter = DRAWER_STEPS; }
//-------------------------------------------------------------- void testApp::mousePressed(int x, int y, int button){ float t, beatoffset; // some timing shit... t = ofGetElapsedTimef(); float tempo = 0.125; beatoffset = tempo-fmod(t,tempo); // use for accurate ahead-of-time quantization for rhythmic triggering double bpattern[] = {1,0,0.25,0.5,0.75,0,1,0,0.75,0.5,0.2,0,1,0,0,0.5,1,0.2,0,0.2,0,0.3,0,0,0.5,0,0,0,0,0,0.6,1}; switch (quadrant) { case 0: // fast attack waves WAVETABLE(0., 0.1, 0.2, mtof(scale(int((1.0-sy)*36.)+28., 2)), sy, "thewave", "theamp"); break; case 1: // plucks //STRUM(0., 1.0, 0.3, mtof(scale(int((1.0-sy)*36.)+50., 5)), 1.0, 1., sx); //STRUM(0.125, 1.0, 0.2, mtof(scale(int((1.0-sy)*36.)+50.+4., 5)), ofMap(delta, 0., 1., 5., 0.1), 1., sx); //STRUM(0.25, 1.0, 0.2, mtof(scale(int((1.0-sy)*36.)+50.+7., 5)), ofMap(delta, 0., 1., 5., 0.1), 1., sx); break; case 2: // beats for(int i = 0;i<32;i++) { if(bpattern[i]>0.) { //MMODALBAR(i*tempo+beatoffset, 1., 0.2*bpattern[i], mtof(scale(int((1.0-sy)*36.)+40., 2)), ofMap(i,0,31,0.1,0.9), sy, int(ofRandom(8))); } } if(DEBUG) cout << sx << " " << sy << " " << delta << endl; break; case 3: // only in mouseDragged(), sorry break; default: break; } }
//-------------------------------------------------------------- void testApp::mouseDragged(int x, int y, int button){ float t, beatoffset; // some timing shit... t = ofGetElapsedTimef(); float tempo = 0.1; float del1, del2; beatoffset = tempo-fmod(t,tempo); // use for accurate ahead-of-time quantization for rhythmic triggering switch (quadrant) { case 0: // pretty waves WAVETABLE(0., 3., 0.05, mtof(scale(int((1.0-sy)*36.)+40., 2)), sy, "themellowwave", "themellowamp"); break; case 1: // plucky //STRUM(0., 1.0, 0.2, mtof(scale(int((1.0-sy)*36.)+50., 5)), ofMap(delta, 0., 1., 5., 0.1), 1., sx); break; case 2: // only in mousePressed(), sorry break; case 3: // steve jobs in a beat del1 = tempo*4./(float(round(sx*8.0+1.0))/8.0); del2 = tempo*4./(float(round((1.0-sx)*8.0+1.0))/8.0); //SCHEDULEBANG(beatoffset); if(allownote==1) { //PANECHO(0+beatoffset, sy, ofMap(delta, 0., 1., 0.0, tempo), 0.7, del1, del2, 0.4, 10.); allownote=0; } if(DEBUG) cout << beatoffset << " " << del1 << " " << del2 << endl; break; default: break; } }
double mtof(double f) { if (f <= -1500) return(0); else if (f > 1499) return(mtof(1499)); else return (float)(8.17579891564 * exp(.0577622650 * (double)f)); }
int main(int argc, char* argv[]) { (void)argc; (void)argv; unsigned int bpm = 120; std::array<int, 10> notes = { { 40, 41, 28, 28, 28, 28, 27, 25, 35, 78 } }; std::array<int, 10> sweepRate = { { 1, 6, 6, 2, 1, 2, 4, 8, 3, 3 } }; std::array<int, 16> kickSequence = { { 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0 } }; unsigned int sweepPos = 0; unsigned int kickPos = 0; Oscillator<WaveformType::Saw<float>> sawA(0.0); Oscillator<WaveformType::Saw<float>> sawB(0.0); Oscillator<WaveformType::Triangle<float>> sweep(0.0); Oscillator<WaveformType::Sine<float>> kick(0.0); WhiteNoise<> noise; Decay snareDecayA(0.4); Decay snareDecayB(0.97); Decay kickDecay(0.85); Impulse trigger(bpm / 120.0f); Impulse snareTrigger(bpm / 50.0f, 44100.0f, 0.5); Impulse kickTrigger(bpm / 480.0f); random_selector<> randomSelect; float targetFrequency = 0.0f; float bassFrequency = 0.0f; Audio audio([&](Audio::sample_iterator aInBegin, Audio::sample_iterator aInEnd, Audio::sample_iterator aOutBegin, Audio::sample_iterator aOutEnd) { for (Audio::sample_iterator it = aOutBegin; it != aOutEnd; it += 2) { if (trigger()) { targetFrequency = mtof(randomSelect(notes)); sweep.setFrequency(sweepRate[sweepPos++]); if (sweepPos >= sweepRate.size()) sweepPos = 0; } bassFrequency = targetFrequency * 0.0008 + bassFrequency * 0.9992; sawA.setFrequency(bassFrequency * 1.01); sawB.setFrequency(bassFrequency * 0.99); int kickTrig = kickTrigger(); if (kickTrig) { kickTrig &= kickSequence[kickPos++]; if (kickPos >= kickSequence.size()) kickPos = 0; } float kickDec = kickDecay(kickTrig); kick.setFrequency(40.0 + (kickDec * kickDec * kickDec * 200)); int snareTrig = snareTrigger(); float snareEnvelope = snareDecayA(snareTrig) * 2 + snareDecayB(snareTrig) * 0.05; float snareLeft = noise() * snareEnvelope; float snareRight = noise() * snareEnvelope; float kickSample = kick() * kickDec * 7; float sample = sawA() + sawB() + kickSample; *it = sample + snareLeft; *(it + 1) = sample + snareRight; } }); audio.play(); std::cout << "Stream opened with a buffer size of " << audio.bufferSize() << " samples, and a stream latency of " << audio.streamLatency() << " samples (" << (audio.streamLatency() / audio.samplerateControl().getSamplerate()) * 1000. << " ms.)" << std::endl; std::cin.get(); }
void pitch_tick_G4(t_pitch *x) { t_int halfFFTSize = x->FFTSize/2; t_float FsOverFFTSize = x->x_Fs/((t_float)x->FFTSize); t_pitchhist *ph; t_int i; // Zero padding for (i=x->BufSize; i<x->FFTSize; i++) x->BufFFT[i] = 0.0f; // Window the samples if (x->x_window != Recta) for (i=0; i<x->BufSize; ++i) x->BufFFT[i] *= x->WindFFT[i]; // Look at the real signal as an interleaved complex vector by casting it. // Then call the transformation function ctoz to get a split complex vector, // which for a real signal, divides into an even-odd configuration. ctoz ((COMPLEX *) x->BufFFT, 2, &x->x_A, 1, x->x_FFTSizeOver2); // Carry out a Forward FFT transform fft_zrip(x->x_setup, &x->x_A, 1, x->x_log2n, FFT_FORWARD); // Fast rescaling required // vsmul( x->x_A.realp, 1, &x->x_scaleFactor, x->x_A.realp, 1, x->x_FFTSizeOver2); // vsmul( x->x_A.imagp, 1, &x->x_scaleFactor, x->x_A.imagp, 1, x->x_FFTSizeOver2); // The output signal is now in a split real form. Use the function // ztoc to get a split real vector. ztoc ( &x->x_A, 1, (COMPLEX *) x->BufFFT, 2, x->x_FFTSizeOver2); // Squared Absolute for (i=0; i<x->FFTSize; i+=2) x->BufPower[i/2] = (x->BufFFT[i] * x->BufFFT[i]) + (x->BufFFT[i+1] * x->BufFFT[i+1]); // Go into fiddle~ code pitch_getit(x); // Output results if (x->x_npeakout) { // Output peaks t_peakout *po; for (i=0, po=x->peakBuf; i<x->x_npeakout; i++, po++) { t_atom at[3]; atom_setlong(at, i+1); atom_setfloat(at+1, po->po_freq); atom_setfloat(at+2, po->po_amp); outlet_list(x->x_peakout, 0, 3, at); } } // Output amplitude outlet_float(x->x_envout, x->x_dbs[x->x_histphase]); // Output fundamental frequencies + amplitudes if (x->x_npitch > 1) { for (i=0, ph=x->x_hist; i<x->x_npitch; i++, ph++) { t_atom at[3]; atom_setlong(at, i+1); atom_setfloat(at+1, ph->h_pitches[x->x_histphase]); atom_setfloat(at+2, ph->h_amps[x->x_histphase]); outlet_list(x->x_pitchout, 0, 3, at); } } else { for (i=0, ph=x->x_hist; i<x->x_npitch; i++, ph++) { t_atom at[2]; atom_setfloat(at, ph->h_pitches[x->x_histphase]); atom_setfloat(at+1, ph->h_amps[x->x_histphase]); outlet_list(x->x_pitchout, 0, 2, at); } } // Output cooked MIDI/Frequency pitch if (x->x_npitch > 1) { for (i=0, ph=x->x_hist; i<x->x_npitch; i++, ph++) if (ph->h_pitch) { t_atom at[3]; atom_setlong(at, i+1); atom_setfloat(at+1, ph->h_pitch); atom_setfloat(at+2, mtof(ph->h_pitch)); outlet_list(x->x_noteout, 0, 3, at); } } else { ph = x->x_hist; if (ph->h_pitch) { t_atom at[2]; atom_setfloat(at, ph->h_pitch); atom_setfloat(at+1, mtof(ph->h_pitch)); outlet_list(x->x_noteout, 0, 2, at); } } // Output attack bang if (x->x_attackvalue) outlet_bang(x->x_attackout); }
void pitch_tick(t_pitch *x) { t_int halfFFTSize = x->FFTSize/2; t_float FsOverFFTSize = x->x_Fs/((t_float)x->FFTSize); t_pitchhist *ph; t_int i; // Zero padding for (i=x->BufSize; i<x->FFTSize; i++) x->BufFFT[i] = 0.0f; // Window the samples if (x->x_window != Recta) for (i=0; i<x->BufSize; ++i) x->BufFFT[i] *= x->WindFFT[i]; // FFT fftRealfast(x->FFTSize, x->BufFFT, x->memFFT); // Squared Absolute for (i=0; i<x->FFTSize; i+=2) x->BufPower[i/2] = (x->BufFFT[i] * x->BufFFT[i]) + (x->BufFFT[i+1] * x->BufFFT[i+1]); // Go into fiddle~ code pitch_getit(x); // Output results if (x->x_npeakout) { // Output peaks t_peakout *po; for (i=0, po=x->peakBuf; i<x->x_npeakout; i++, po++) { t_atom at[3]; atom_setlong(at, i+1); atom_setfloat(at+1, po->po_freq); atom_setfloat(at+2, po->po_amp); outlet_list(x->x_peakout, 0, 3, at); } } // Output amplitude outlet_float(x->x_envout, x->x_dbs[x->x_histphase]); // Output fundamental frequencies + amplitudes if (x->x_npitch > 1) { for (i=0, ph=x->x_hist; i<x->x_npitch; i++, ph++) { t_atom at[3]; atom_setlong(at, i+1); atom_setfloat(at+1, ph->h_pitches[x->x_histphase]); atom_setfloat(at+2, ph->h_amps[x->x_histphase]); outlet_list(x->x_pitchout, 0, 3, at); } } else { for (i=0, ph=x->x_hist; i<x->x_npitch; i++, ph++) { t_atom at[2]; atom_setfloat(at, ph->h_pitches[x->x_histphase]); atom_setfloat(at+1, ph->h_amps[x->x_histphase]); outlet_list(x->x_pitchout, 0, 2, at); } } // Output cooked MIDI/Frequency pitch if (x->x_npitch > 1) { for (i=0, ph=x->x_hist; i<x->x_npitch; i++, ph++) if (ph->h_pitch) { t_atom at[3]; atom_setlong(at, i+1); atom_setfloat(at+1, ph->h_pitch); atom_setfloat(at+2, mtof(ph->h_pitch)); outlet_list(x->x_noteout, 0, 3, at); } } else { ph = x->x_hist; if (ph->h_pitch) { t_atom at[2]; atom_setfloat(at, ph->h_pitch); atom_setfloat(at+1, mtof(ph->h_pitch)); outlet_list(x->x_noteout, 0, 2, at); } } // Output attack bang if (x->x_attackvalue) outlet_bang(x->x_attackout); }
/* NP */ short ww_type(short *wwtype, short *dcp) /********************************************************************/ /* Watch type guidance */ /* A decision tree to help with ww issuance */ /* */ /* Rich Thompson SPC OUN */ /********************************************************************/ { float ix1, ix2, ix3, ix4, lr75, shr6, t500, fzlh, mumixr, lowrh, midrh, low_mid_rh; float mucn, mlcn, mlcp, sbcp, mucp, lr1, lr3, shr6_dir, sr46_dir, sr46_spd, shr6_sr46_diff, mmp; float sig_tor, sig_tor_winter, sighail, wind_dmg, rm_scp, cbsig, dncp, srh1, sblcl, mllcl; float oldlplpres, pres, pbot, ptop, shr8, bot, top, esrh, lm_scp; short oldlplchoice, ww_choice; short pIndex, tIndex, zIndex, tdIndex; short x1, y1, x2, y2, tlx, tly, wid; struct _parcel pcl; char st[40]; tlx = hov.tlx + 409; tly = hov.bry; wid = 119; setcliprgn( tlx+2, tly+2, tlx+wid+24, tly+wid+1); setcolor(0); setlinestyle( 1, 1 ); rectangle( 1,tlx, tly, tlx+wid+27, tly+wid+1); setcolor(1); rectangle( 0, tlx, tly, tlx+wid+27, tly+wid+1); setlinestyle( 1, 1 ); moveto( tlx + 2, tly + 18); lineto(tlx + wid + 27, tly + 18); /* ----- Plot Label ----- */ set_font(6); setcolor(1); outgtext( "Psbl Watch Type", tlx + 20, tly + 3 ); *wwtype = 0; *dcp = 0; oldlplchoice = lplvals.flag; tIndex = getParmIndex("TEMP"); pIndex = getParmIndex("PRES"); zIndex = getParmIndex("HGHT"); tdIndex = getParmIndex("DWPT"); /* 24 Mar 2008 */ /* effective_inflow_layer(100, -250, &pbot, &ptop);*/ /* sb parcel */ define_parcel(1,0); ix1 = parcel(-1, -1, lplvals.pres, lplvals.temp, lplvals.dwpt, &pcl); sbcp = pcl.bplus; sblcl = agl(i_hght(pcl.lclpres, I_PRES)); sig_tor_winter = sigtorn_fixed(st_dir, st_spd); /* ml parcel */ define_parcel(4,100); ix1 = parcel(-1, -1, lplvals.pres, lplvals.temp, lplvals.dwpt, &pcl); mlcn = pcl.bminus; mlcp = pcl.bplus; mllcl = agl(i_hght(pcl.lclpres, I_PRES)); sig_tor = sigtorn_cin(st_dir, st_spd); /* mu parcel */ define_parcel(3,400); mucp = parcel(-1, -1, lplvals.pres, lplvals.temp, lplvals.dwpt, &pcl); mucn = pcl.bminus; dncp = dcape(&ix1, &ix2); /* sighail ingredients */ lr75 = lapse_rate(&ix1, 700, 500); wind_shear(sndg[sfc()][pIndex], i_pres(msl(6000)), &ix1, &ix2, &ix3, &ix4); shr6 = ix4; shr6_dir = ix3; wind_shear(sndg[sfc()][pIndex], i_pres(msl(8000)), &ix1, &ix2, &ix3, &ix4); shr8 = ix4; mumixr = mixratio(lplvals.pres, lplvals.dwpt); t500 = i_temp(500, I_PRES); fzlh = mtof(agl(i_hght(temp_lvl(0, &ix1), I_PRES))); sighail = sig_hail(pcl.bplus, mumixr, lr75, t500, kt_to_mps(shr6), fzlh, pcl.bminus, 0, 0, 25, mlcp); rm_scp = scp(st_dir, st_spd); wind_dmg = damaging_wind(); sr_wind( i_pres(msl(4000)), i_pres(msl(6000)), st_dir, st_spd, &ix1, &ix2, &ix3, &ix4); sr46_dir = ix3; sr46_spd = ix4; shr6_sr46_diff = (shr6_dir - sr46_dir); srh1 = helicity(0, 1000, st_dir, st_spd, &ix1, &ix2); bot = agl(i_hght(p_bot, I_PRES)); top = agl(i_hght(p_top, I_PRES)); esrh = helicity(bot, top, st_dir, st_spd, &ix1, &ix2); lapse_rate(&ix2, sndg[sfc()][pIndex], i_pres(sndg[sfc()][zIndex]+1000)); lr1 = ix2; lapse_rate(&ix2, sndg[sfc()][pIndex], i_pres(sndg[sfc()][zIndex]+3000)); lr3 = ix2; mean_relhum(&ix1, sndg[sfc()][pIndex]-150, sndg[sfc()][pIndex]-350); midrh = ix1; mean_relhum(&ix1, sndg[sfc()][pIndex], sndg[sfc()][pIndex]-150); lowrh = ix1; low_mid_rh = ((lowrh + midrh)/2); mmp = coniglio1(); cbsig = (mlcp * kt_to_mps(shr6)); /* 24 Mar 2008 */ /* all "p_bot" below were changed from "pbot" */ /* Decision tree below is identical to the operational "ww_type" flow chart documentation 9/23/09 RLT */ if ((sig_tor >= 3.0) && (sig_tor_winter >= 3.0) && (srh1 >= 150) && (esrh >= 150) && (sr46_spd >= 15.0) && (shr8 >= 40.0) && (sblcl < 1000) && (mllcl < 1100) && (lr1 >= 5.0) && (bot == 0.0)) { *dcp = 1; *wwtype = 5; ww_choice = 5; /*printf("\n dcp (in PDS) = %d", *dcp);*/ set_font(6); setcolor(7); outgtext( "PDS TOR", tlx + 45, tly + 60 ); } /* else if ((sig_tor_winter >= 4.0) && (sr46_spd >= 15.0) && (shr8 >= 40.0) && (sblcl < 1000) && (lr1 >= 5.0) && (bot == 0.0)) { *dcp = 2; *wwtype = 5; ww_choice = 5; set_font(6); setcolor(7); outgtext( "PDS TOR", tlx + 45, tly + 60 ); } */ else if (((sig_tor >= 3.0) || (sig_tor_winter >= 4.0)) && (bot == 0.0)) { *dcp = 3; *wwtype = 4; ww_choice = 4; /*printf("\n dcp (in TOR) = %d", *dcp);*/ set_font(6); setcolor(2); outgtext( "TOR", tlx + 45, tly + 60 ); } else if (((sig_tor >= 1.0) || (sig_tor_winter >= 1.0)) && ((sr46_spd >= 15.0) || (shr8 >= 40.0)) && (bot == 0.0)) { *dcp = 4; *wwtype = 4; ww_choice = 4; /*printf("\n dcp (in TOR) = %d", *dcp);*/ set_font(6); setcolor(2); outgtext( "TOR", tlx + 45, tly + 60 ); } else if (((sig_tor >= 1.0) || (sig_tor_winter >= 1.0)) && (low_mid_rh >= 60) && (lr1 >= 5.0) && (bot == 0.0)) { *dcp = 5; *wwtype = 4; ww_choice = 4; /*printf("\n dcp (in TOR) = %d", *dcp);*/ set_font(6); setcolor(2); outgtext( "TOR", tlx + 45, tly + 60 ); } else if ((( sig_tor >= 1.0) || (sig_tor_winter >= 1.0)) && (bot == 0.0)) { *dcp = 6; *wwtype = 3; ww_choice = 3; /*printf("\n dcp (in mrgl TOR) = %d", *dcp);*/ set_font(6); setcolor(2); outgtext( "mrgl TOR", tlx + 40, tly + 60 ); } else if (((( sig_tor >= 0.5) && (esrh >= 150)) || ((sig_tor_winter >= 0.5) && (srh1 >= 150))) && (bot == 0.0)) { *dcp = 7; *wwtype = 3; ww_choice = 3; /*printf("\n dcp (in mrgl TOR) = %d", *dcp);*/ set_font(6); setcolor(2); outgtext( "mrgl TOR", tlx + 40, tly + 60 ); } else if ((( sig_tor_winter >= 1.0) || (rm_scp >= 4.0) || (sig_tor >= 1.0)) && (mucn >= -50.0)) { *dcp = 8; *wwtype = 2; ww_choice = 2; /*printf("\n dcp (in SVR) = %d", *dcp);*/ set_font(6); setcolor(6); outgtext( "SVR", tlx + 60, tly + 60 ); } else if ((rm_scp >= 2.0) && ((sighail >= 1.0) || (dncp >= 750)) && (mucn >= -50.0)) { *dcp = 9; *wwtype = 2; ww_choice = 2; /*printf("\n dcp (in SVR) = %d", *dcp);*/ set_font(6); setcolor(6); outgtext( "SVR", tlx + 60, tly + 60 ); } else if ((cbsig >= 30000) && (mmp >= 0.6) && (mucn >= -50.0)) { *dcp = 10; *wwtype = 2; ww_choice = 2; /*printf("\n dcp (in SVR) = %d", *dcp);*/ set_font(6); setcolor(6); outgtext( "SVR", tlx + 60, tly + 60 ); } else if ((mucn >= -75.0) && ((wind_dmg >= 0.5) || (sighail >= 0.5) || (rm_scp >= 0.5))) { *dcp = 11; *wwtype = 1; ww_choice = 1; /*printf("\n dcp (in mrgl SVR) = %d", *dcp);*/ set_font(6); setcolor(26); outgtext( "MRGL SVR", tlx + 40, tly + 60 ); } else { *dcp = 0; /*printf("\n dcp (after logic checks) = %d", *dcp);*/ *wwtype = 0; ww_choice = 0; } if (*wwtype == 0) { set_font(6); setcolor(19); outgtext( "NONE", tlx + 50, tly + 60 ); } //printf("sig_tor=%f sig_tor_winter=%f srh1=%f esrh=%f sr46_spd=%f shr8=%f sblcl=%f\n mllcl=%f lr1=%f bot=%f low_mid_rh=%f rm_scp=%f\n mucn=%f dncp=%f sighail=%f cbsig=%f wind_dmg=%f", // sig_tor,sig_tor_winter,srh1,esrh,sr46_spd,shr8, sblcl, mllcl, lr1, bot, low_mid_rh, rm_scp,mucn, dncp, sighail, cbsig, wind_dmg); /* define_parcel(oldlplchoice, oldlplpres); */ /* set parcel back to user selection */ if (oldlplchoice == 1) pres = 0; else if (oldlplchoice == 2) pres = 0; else if (oldlplchoice == 3) pres = mu_layer; else if (oldlplchoice == 4) pres = mml_layer; else if (oldlplchoice == 5) pres = user_level; else if (oldlplchoice == 6) pres = mu_layer; define_parcel(oldlplchoice, pres); return ww_choice; }