Exemplo n.º 1
0
Arquivo: sound.c Projeto: bernds/UAE
void direct_stereo_sample8_handler(void)
{
    uae_u32 data0 = audio_channel[0].current_sample;
    uae_u32 data1 = audio_channel[1].current_sample;
    uae_u32 data2 = audio_channel[2].current_sample;
    uae_u32 data3 = audio_channel[3].current_sample;
    DO_CHANNEL_1 (data0, 0);
    DO_CHANNEL_1 (data1, 1);
    DO_CHANNEL_1 (data2, 2);
    DO_CHANNEL_1 (data3, 3);

    data0 &= audio_channel[0].adk_mask;
    data1 &= audio_channel[1].adk_mask;
    data2 &= audio_channel[2].adk_mask;
    data3 &= audio_channel[3].adk_mask;

    data0 += data3;
    {
	uae_u32 data = SBASEVAL8(1) + data0;
	FINISH_DATA (8, 1);
	_farnspokeb(direct_sndbufpt++, data);
    }
    data1 += data2;
    {
	uae_u32 data = SBASEVAL8(1) + data1;
	FINISH_DATA (8, 1);
	_farnspokeb(direct_sndbufpt++, data);
    }

    direct_check_sound_buffers();

    eventtab[ev_sample].evtime = cycles + sample_evtime;
    eventtab[ev_sample].oldcycles = cycles;
}
Exemplo n.º 2
0
static void sample16si_rh_handler (void)
{
  unsigned long delta, ratio;

  uae_u32 data0 = audio_channel[0].current_sample;
  uae_u32 data1 = audio_channel[1].current_sample;
  uae_u32 data2 = audio_channel[2].current_sample;
  uae_u32 data3 = audio_channel[3].current_sample;
  uae_u32 data0p = audio_channel[0].last_sample;
  uae_u32 data1p = audio_channel[1].last_sample;
  uae_u32 data2p = audio_channel[2].last_sample;
  uae_u32 data3p = audio_channel[3].last_sample;

  DO_CHANNEL_1 (data0, 0);
  DO_CHANNEL_1 (data1, 1);
  DO_CHANNEL_1 (data2, 2);
  DO_CHANNEL_1 (data3, 3);
  DO_CHANNEL_1 (data0p, 0);
  DO_CHANNEL_1 (data1p, 1);
  DO_CHANNEL_1 (data2p, 2);
  DO_CHANNEL_1 (data3p, 3);

  data0 &= audio_channel[0].adk_mask;
  data0p &= audio_channel[0].adk_mask;
  data1 &= audio_channel[1].adk_mask;
  data1p &= audio_channel[1].adk_mask;
  data2 &= audio_channel[2].adk_mask;
  data2p &= audio_channel[2].adk_mask;
  data3 &= audio_channel[3].adk_mask;
  data3p &= audio_channel[3].adk_mask;

  /* linear interpolation and summing up... */
  delta = audio_channel[0].per;
  ratio = ((audio_channel[0].evtime % delta) << 8) / delta;
  data0 = (data0 * (256 - ratio) + data0p * ratio) >> 8;
  delta = audio_channel[1].per;
  ratio = ((audio_channel[1].evtime % delta) << 8) / delta;
  data1 = (data1 * (256 - ratio) + data1p * ratio) >> 8;
  delta = audio_channel[2].per;
  ratio = ((audio_channel[2].evtime % delta) << 8) / delta;
  data1 += (data2 * (256 - ratio) + data2p * ratio) >> 8;
  delta = audio_channel[3].per;
  ratio = ((audio_channel[3].evtime % delta) << 8) / delta;
  data0 += (data3 * (256 - ratio) + data3p * ratio) >> 8;
  data0 = FINISH_DATA (data0);
  data1 = FINISH_DATA (data1);
  put_sound_word_stereo_func(data0, data1);
  check_sound_buffers ();
}
Exemplo n.º 3
0
static void sample16si_crux_handler (void)
{
  uae_u32 data0 = audio_channel[0].current_sample;
  uae_u32 data1 = audio_channel[1].current_sample;
  uae_u32 data2 = audio_channel[2].current_sample;
  uae_u32 data3 = audio_channel[3].current_sample;
  uae_u32 data0p = audio_channel[0].last_sample;
  uae_u32 data1p = audio_channel[1].last_sample;
  uae_u32 data2p = audio_channel[2].last_sample;
  uae_u32 data3p = audio_channel[3].last_sample;

  DO_CHANNEL_1 (data0, 0);
  DO_CHANNEL_1 (data1, 1);
  DO_CHANNEL_1 (data2, 2);
  DO_CHANNEL_1 (data3, 3);
  DO_CHANNEL_1 (data0p, 0);
  DO_CHANNEL_1 (data1p, 1);
  DO_CHANNEL_1 (data2p, 2);
  DO_CHANNEL_1 (data3p, 3);

  data0 &= audio_channel[0].adk_mask;
  data0p &= audio_channel[0].adk_mask;
  data1 &= audio_channel[1].adk_mask;
  data1p &= audio_channel[1].adk_mask;
  data2 &= audio_channel[2].adk_mask;
  data2p &= audio_channel[2].adk_mask;
  data3 &= audio_channel[3].adk_mask;
  data3p &= audio_channel[3].adk_mask;

  {    
    struct audio_channel_data *cdp;
    unsigned long ratio, ratio1;
#define INTERVAL (scaled_sample_evtime * 3)
    cdp = audio_channel + 0;
    ratio1 = cdp->per - cdp->evtime;
    ratio = (ratio1 << 12) / INTERVAL;
    if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL)
	    ratio = 4096;
      data0 = (data0 * ratio + data0p * (4096 - ratio)) >> 12;

    cdp = audio_channel + 1;
    ratio1 = cdp->per - cdp->evtime;
    ratio = (ratio1 << 12) / INTERVAL;
    if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL)
	    ratio = 4096;
    data1 = (data1 * ratio + data1p * (4096 - ratio)) >> 12;

    cdp = audio_channel + 2;
    ratio1 = cdp->per - cdp->evtime;
    ratio = (ratio1 << 12) / INTERVAL;
    if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL)
	    ratio = 4096;
    data2 = (data2 * ratio + data2p * (4096 - ratio)) >> 12;

    cdp = audio_channel + 3;
    ratio1 = cdp->per - cdp->evtime;
    ratio = (ratio1 << 12) / INTERVAL;
    if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL)
	    ratio = 4096;
    data3 = (data3 * ratio + data3p * (4096 - ratio)) >> 12;
  }
  data1 += data2;
  data0 += data3;
  data0 = FINISH_DATA (data0);
  data1 = FINISH_DATA (data1);
  put_sound_word_stereo_func(data0, data1);
  check_sound_buffers ();
}