Example #1
0
void
setfreq_and_q (goomf_synth_t * s, AnalogFilter * filter, float frequency,
	       float q_)
{
  filter->q = q_;
  setfreq (s, filter, frequency);
};
Example #2
0
/*********************************************************************
  Pass a note, in half steps relative to 400 Hz.  The 12 step scale
is an exponential thing.  The speaker control is at port 0x61.
Setting the lowest two bits enables timer 2 of the 8253/8254 timer
and turns on the speaker.
*********************************************************************/
void playnote(NOTE note)
{
	_outp(0x61, _inp(0x61) | 0x03);			// start speaker going
	setfreq((int)(400 * pow(2, note.pitch / 12.0)));
	Sleep(note.duration);
	_outp(0x61, _inp(0x61) & ~0x03);		// stop that racket!
}
Example #3
0
/* open all available CatWeasel devices */
int catweaselmkiii_open(void)
{
    static int atexitinitialized = 0;
    int i, z = 0;

    /* close any open handles */
    for (i = 0; i < MAXCARDS; i++) {
        if (sidhandle[i] != INVALID_HANDLE_VALUE) {
            CloseHandle(sidhandle[i]), sidhandle[i] = INVALID_HANDLE_VALUE;
        }
    }

    /* find up to four CatWeasel cards */
    for (i = 0; i < MAXCARDS; i++) {
        char buf[32];

        sprintf(buf, "\\\\.\\SID6581_%u", i + 1);
        sidhandle[z] = CreateFile(buf, GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, 0L, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0L);
        if (sidhandle[z] != INVALID_HANDLE_VALUE) {
            log_message(LOG_DEFAULT, "Found CatWeasel MK3 PCI #%i", z + 1);
            z++;
        }
    }

    /* if cards were found */
    if (z > 0) {
        log_message(LOG_DEFAULT, "Found and opened a CatWeasel MK3 PCI SID");

        /* silent all found cards */
        mutethem();

        /* set frequeny of found cards */
        setfreq(ntsc);

        /* install exit handler, so devices are closed properly */
        if (!atexitinitialized) {
            atexitinitialized = 1;
            atexit((voidfunc_t)catweaselmkiii_close);
        }

        cwmkiii_is_open = 1;
        return 0;
    }

    /* no CatWeasels were found */
    return -1;
}
Example #4
0
/* open unix device */
int cw_device_open(void)
{
    int i;

    if (!sids_found) {
        return -1;
    }

    if (sids_found > 0) {
        return 0;
    }

    sids_found = 0;

    log_message(LOG_DEFAULT, "Detecting driver based CatWeasel boards.");

    /* if no device is currently opened */
    if (sidfh < 0) {
        sidfh = open("/dev/sid", O_RDWR);

        if (sidfh < 0) {
            sidfh = open("/dev/misc/sid", O_RDWR);
        }

        /* could not open at standard locations: error */
        if (sidfh < 0) {
            log_error(LOG_DEFAULT, "Could not open SID device /dev/sid or /dev/misc/sid");
            return -1;
        }
    }

    /* mute all sids */
    lseek(sidfh, 0, SEEK_SET);
    for (i = 0; i < 32; ++i) {
        write(sidfh, 0, 1);
    }

    setfreq();

    log_message(LOG_DEFAULT, "PCI CatWeasel driver SID: opened.");

    sids_found = 1;

    return 0;
}
Example #5
0
void
setfreq_and_q (ZEq10ban_t * s, AnalogFilter *filter,float frequency, float q_)
{
  filter->q = q_;
  setfreq (s,filter,frequency);
};
Example #6
0
void SVFilter::setfreq_and_q(float frequency, float q_)
{
    q = q_;
    setfreq(frequency);
}
Example #7
0
/* set current main clock frequency, which gives us the possibilty to
   choose between pal and ntsc frequencies */
void cw_device_set_machine_parameter(long cycles_per_sec)
{
    setfreq();
}
void AnalogFilter::setfreq_and_q(REALTYPE frequency,REALTYPE q_){
    q=q_;
    setfreq(frequency);
};
Example #9
0
/* set current main clock frequency, which gives us the possibilty to
   choose between pal and ntsc frequencies */
void catweaselmkiii_set_machine_parameter(long cycles_per_sec)
{
    ntsc = (BYTE)((cycles_per_sec <= 1000000) ? 0 : 1);
    setfreq(ntsc);
}
Example #10
0
File: hsc.cpp Project: OPLx/adplug
bool ChscPlayer::update()
{
  // general vars
  unsigned char		chan,pattnr,note,effect,eff_op,inst,vol,Okt,db;
  unsigned short	Fnr;
  unsigned long		pattoff;

  del--;                      // player speed handling
  if(del)
    return !songend;		// nothing done

  if(fadein)					// fade-in handling
    fadein--;

  pattnr = song[songpos];
  // 0xff indicates song end, but this prevents a crash for some songs that
  // use other weird values, like 0xbf
  if(pattnr >= 0xb2) {			// arrangement handling
    songend = 1;				// set end-flag
    songpos = 0;
    pattnr = song[songpos];
  } else
    if ((pattnr & 128) && (pattnr <= 0xb1)) { // goto pattern "nr"
      songpos = song[songpos] & 127;
      pattpos = 0;
      pattnr = song[songpos];
      songend = 1;
    }

  pattoff = pattpos*9;
  for (chan=0;chan<9;chan++) {			// handle all channels
    note = patterns[pattnr][pattoff].note;
    effect = patterns[pattnr][pattoff].effect;
    pattoff++;

    if(note & 128) {                    // set instrument
      setinstr(chan,effect);
      continue;
    }
    eff_op = effect & 0x0f;
    inst = channel[chan].inst;
    if(note)
      channel[chan].slide = 0;

    switch (effect & 0xf0) {			// effect handling
    case 0:								// global effect
      /* The following fx are unimplemented on purpose:
       * 02 - Slide Mainvolume up
       * 03 - Slide Mainvolume down (here: fade in)
       * 04 - Set Mainvolume to 0
       *
       * This is because i've never seen any HSC modules using the fx this way.
       * All modules use the fx the way, i've implemented it.
       */
      switch(eff_op) {
      case 1: pattbreak++; break;	// jump to next pattern
      case 3: fadein = 31; break;	// fade in (divided by 2)
      case 5: mode6 = 1; break;	// 6 voice mode on
      case 6: mode6 = 0; break;	// 6 voice mode off
      }
      break;
    case 0x20:
    case 0x10:		                    // manual slides
      if (effect & 0x10) {
	channel[chan].freq += eff_op;
	channel[chan].slide += eff_op;
      } else {
	channel[chan].freq -= eff_op;
	channel[chan].slide -= eff_op;
      }
      if(!note)
	setfreq(chan,channel[chan].freq);
      break;
    case 0x50:							// set percussion instrument (unimplemented)
      break;
    case 0x60:							// set feedback
      opl->write(0xc0 + chan, (instr[channel[chan].inst][8] & 1) + (eff_op << 1));
      break;
    case 0xa0:		                    // set carrier volume
      vol = eff_op << 2;
      opl->write(0x43 + op_table[chan], vol | (instr[channel[chan].inst][2] & ~63));
      break;
    case 0xb0:		                    // set modulator volume
      vol = eff_op << 2;
      if (instr[inst][8] & 1)
	opl->write(0x40 + op_table[chan], vol | (instr[channel[chan].inst][3] & ~63));
      else
	opl->write(0x40 + op_table[chan],vol | (instr[inst][3] & ~63));
      break;
    case 0xc0:		                    // set instrument volume
      db = eff_op << 2;
      opl->write(0x43 + op_table[chan], db | (instr[channel[chan].inst][2] & ~63));
      if (instr[inst][8] & 1)
	opl->write(0x40 + op_table[chan], db | (instr[channel[chan].inst][3] & ~63));
      break;
    case 0xd0: pattbreak++; songpos = eff_op; songend = 1; break;	// position jump
    case 0xf0:							// set speed
      speed = eff_op;
      del = ++speed;
      break;
    }

    if(fadein)						// fade-in volume setting
      setvolume(chan,fadein*2,fadein*2);

    if(!note)						// note handling
      continue;
    note--;

    if ((note == 0x7f-1) || ((note/12) & ~7)) {    // pause (7fh)
      adl_freq[chan] &= ~32;
      opl->write(0xb0 + chan,adl_freq[chan]);
      continue;
    }

    // play the note
    if(mtkmode)		// imitate MPU-401 Trakker bug
      note--;
    Okt = ((note/12) & 7) << 2;
    Fnr = note_table[(note % 12)] + instr[inst][11] + channel[chan].slide;
    channel[chan].freq = Fnr;
    if(!mode6 || chan < 6)
      adl_freq[chan] = Okt | 32;
    else
      adl_freq[chan] = Okt;		// never set key for drums
    opl->write(0xb0 + chan, 0);
    setfreq(chan,Fnr);
    if(mode6) {
      switch(chan) {		// play drums
      case 6: opl->write(0xbd,bd & ~16); bd |= 48; break;	// bass drum
      case 7: opl->write(0xbd,bd & ~1); bd |= 33; break;	// hihat
      case 8: opl->write(0xbd,bd & ~2); bd |= 34; break;	// cymbal
      }
      opl->write(0xbd,bd);
    }
  }

  del = speed;		// player speed-timing
  if(pattbreak) {		// do post-effect handling
    pattpos=0;			// pattern break!
    pattbreak=0;
    songpos++;
    songpos %= 50;
    if(!songpos)
      songend = 1;
  } else {
    pattpos++;
    pattpos &= 63;		// advance in pattern data
    if (!pattpos) {
      songpos++;
      songpos %= 50;
      if(!songpos)
	songend = 1;
    }
  }
  return !songend;		// still playing
}
Example #11
0
static void
runexciter (LADSPA_Handle instance, unsigned long sample_count,
	    snd_seq_event_t * events, unsigned long event_count)
{

  exciter_t *exc = (exciter_t *) instance;

  LADSPA_Data *const pinputl = exc->inputl;
  LADSPA_Data *const pinputr = exc->inputr;
//  LADSPA_Data dry = *(exc->dry);
  LADSPA_Data vol = *(exc->outvolume);
  LADSPA_Data pan = *(exc->panning);
  LADSPA_Data mag_1 = *(exc->mag_1);
  LADSPA_Data mag_2 = *(exc->mag_2);
  LADSPA_Data mag_3 = *(exc->mag_3);
  LADSPA_Data mag_4 = *(exc->mag_4);
  LADSPA_Data mag_5 = *(exc->mag_5);
  LADSPA_Data mag_6 = *(exc->mag_6);
  LADSPA_Data mag_7 = *(exc->mag_7);
  LADSPA_Data mag_8 = *(exc->mag_8);
  LADSPA_Data mag_9 = *(exc->mag_9);
  LADSPA_Data mag_10 = *(exc->mag_10);
  LADSPA_Data ffreq = *(exc->ffreq);

  unsigned long event_pos = 0;
  unsigned long pos;
  unsigned long count;

  int i;

//  memset (exc->efxoutl, 0, sizeof (LADSPA_Data) * sample_count);
//  memset (exc->efxoutr, 0, sizeof (LADSPA_Data) * sample_count);

  for (pos = 0, event_pos = 0; pos < sample_count; pos += STEP_SIZE)
    {

      while (event_pos < event_count)
	{

	  switch (events[event_pos].type)
	    {

	    case SND_SEQ_EVENT_NOTEON:

	      for (i = 0; i < POLY; i++)
		{
		  if (events[event_pos].data.note.velocity != 0)
		    {
		      if (exc->rc.note_active[i] == 0)
			{
			  exc->rc.note_active[i] = 1;
			  exc->rc.rnote[i] = events[event_pos].data.note.note;
			  exc->rc.gate[i] = 1;
			  MiraChord (exc);
			  calcula_mag (exc);
			  if (exc->rc.cc)
			    {
			      lo_send (exc->m_host,
				       exc->osc_configure_path, "ss",
				       "schord", exc->rc.NombreAcorde);
			      exc->rc.cc = 0;
			    }
			  break;
			}

		    }
		  if (events[event_pos].data.note.velocity == 0)
		    {
		      if ((exc->rc.note_active[i])
			  && (exc->rc.rnote[i] ==
			      events[event_pos].data.note.note))
			{
			  exc->rc.note_active[i] = 0;
			  exc->rc.gate[i] = 0;
			  break;
			}

		    }
		}


	      break;
	    case SND_SEQ_EVENT_NOTEOFF:

	      for (i = 0; i < POLY; i++)
		{
		  if ((exc->rc.note_active[i])
		      && (exc->rc.rnote[i] ==
			  events[event_pos].data.note.note))
		    {
		      exc->rc.note_active[i] = 0;
		      exc->rc.gate[i] = 0;
		      break;
		    }

		}

	      break;
	    case SND_SEQ_EVENT_CONTROLLER:

	      if (events[event_pos].data.control.param == 10)
		{
		  pan = (float) events[event_pos].data.control.value / 128.0;
		  break;
		}

	      if (events[event_pos].data.control.param == 7)
		{
		  vol = (float) events[event_pos].data.control.value / 128.0;
		  break;
		}

	      if (events[event_pos].data.control.param == 48)
		{
		  mag_1 =
		    (float) ((events[event_pos].data.control.value -
			      64.0) / 64.0);
		  break;
		}
	      if (events[event_pos].data.control.param == 49)
		{
		  mag_2 =
		    (float) ((events[event_pos].data.control.value -
			      64.0) / 64.0);
		  break;
		}
	      if (events[event_pos].data.control.param == 50)
		{
		  mag_3 =
		    (float) ((events[event_pos].data.control.value -
			      64.0) / 64.0);
		  break;
		}
	      if (events[event_pos].data.control.param == 51)
		{
		  mag_4 =
		    (float) ((events[event_pos].data.control.value -
			      64.0) / 64.0);
		  break;
		}
	      if (events[event_pos].data.control.param == 52)
		{
		  mag_5 =
		    (float) ((events[event_pos].data.control.value -
			      64.0) / 64.0);
		  break;
		}
	      if (events[event_pos].data.control.param == 53)
		{
		  mag_6 =
		    (float) ((events[event_pos].data.control.value -
			      64.0) / 64.0);
		  break;
		}
	      if (events[event_pos].data.control.param == 54)
		{
		  mag_7 =
		    (float) ((events[event_pos].data.control.value -
			      64.0) / 64.0);
		  break;
		}
	      if (events[event_pos].data.control.param == 55)
		{
		  mag_8 =
		    (float) ((events[event_pos].data.control.value -
			      64.0) / 64.0);
		  break;
		}
	      if (events[event_pos].data.control.param == 56)
		{
		  mag_9 =
		    (float) ((events[event_pos].data.control.value -
			      64.0) / 64.0);
		  break;
		}
	      if (events[event_pos].data.control.param == 57)
		{
		  mag_10 =
		    (float) ((events[event_pos].data.control.value -
			      64.0) / 64.0);
		  break;
		}
	      if (events[event_pos].data.control.param == 58)
		{
		  ffreq =
		    (float) 21.0 +
		    (float) (events[event_pos].data.control.value * 10000.0 /
			     127.0);
		  break;
		}

	    }

	  event_pos++;
	}


      count =
	(sample_count - pos) > STEP_SIZE ? STEP_SIZE : sample_count - pos;

      if (exc->rmag_1 != mag_1)
	{
	  exc->rmag_1 = mag_1;
	  calcula_mag (exc);
	}

      if (exc->rmag_2 != mag_2)
	{
	  exc->rmag_2 = mag_2;
	  calcula_mag (exc);
	}

      if (exc->rmag_3 != mag_3)
	{
	  exc->rmag_3 = mag_3;
	  calcula_mag (exc);
	}

      if (exc->rmag_4 != mag_4)
	{
	  exc->rmag_4 = mag_4;
	  calcula_mag (exc);
	}

      if (exc->rmag_5 != mag_5)
	{
	  exc->rmag_5 = mag_5;
	  calcula_mag (exc);
	}

      if (exc->rmag_6 != mag_6)
	{
	  exc->rmag_6 = mag_6;
	  calcula_mag (exc);
	}

      if (exc->rmag_7 != mag_7)
	{
	  exc->rmag_7 = mag_7;
	  calcula_mag (exc);
	}

      if (exc->rmag_8 != mag_8)
	{
	  exc->rmag_8 = mag_8;
	  calcula_mag (exc);
	}

      if (exc->rmag_9 != mag_9)
	{
	  exc->rmag_9 = mag_9;
	  calcula_mag (exc);
	}

      if (exc->rmag_10 != mag_10)
	{
	  exc->rmag_10 = mag_10;
	  calcula_mag (exc);
	}


      if (exc->rfreq != ffreq)
	{
	  exc->rfreq = ffreq;
	  setfreq (exc, &exc->lhpf, exc->rfreq);
	  setfreq (exc, &exc->rhpf, exc->rfreq);
	}

      out_exciter (exc, pinputl, pinputr, count);

    }

}
void action_cpuperflevel4(void) {
	disableucg();
	setfreq(CPUFREQ_LEVEL_FOUR);
}
void action_cpuperflevel3(void) {
	disableucg();
	setfreq(CPUFREQ_LEVEL_THREE);
}
void action_cpuperflevel2(void) {
	disableucg();
	setfreq(CPUFREQ_LEVEL_TWO);
}
/* set's cpu at full and enables the use case governor
 * to scale as needed */
void action_cpuperflevel1(void) {
	setfreq(CPUFREQ_LEVEL_ONE);
	enableucg();
}