Beispiel #1
0
void
sound_frame( void )
{
  long count;

  if( !sound_enabled )
    return;

  /* overlay AY sound */
  sound_ay_overlay();

  blip_buffer_end_frame( left_buf, machine_current->timings.tstates_per_frame );

  if( sound_stereo_ay != SOUND_STEREO_AY_NONE ) {
    blip_buffer_end_frame( right_buf, machine_current->timings.tstates_per_frame );

    /* Read left channel into even samples, right channel into odd samples:
       LRLRLRLRLR... */
    count = blip_buffer_read_samples( left_buf, samples, sound_framesiz, 1 );
    blip_buffer_read_samples( right_buf, samples + 1, count, 1 );
    count <<= 1;
  } else {
    count = blip_buffer_read_samples( left_buf, samples, sound_framesiz, BLIP_BUFFER_DEF_STEREO );
  }

  if( settings_current.sound ) 
    sound_lowlevel_frame( samples, count );

  if( movie_recording )
      movie_add_sound( samples, count );
  ay_change_count = 0;
}
Beispiel #2
0
void sound_frame(void)
{
        unsigned char *ptr;
        int f;

        if(!sound_enabled) return;

        //if(zx81.vsyncsound)
        {
                ptr=sound_buf+(sound_stereo?sound_fillpos*2:sound_fillpos);
                for(f=sound_fillpos;f<sound_framesiz;f++)
                {
                        BEEPER_OLDVAL_ADJUST;
                        *ptr++=sound_oldval;
                        if(sound_stereo)
                                *ptr++=sound_oldval;
                }
        }
        //else
                /* must be AY then, so `zero' buffer ready for it */
        //        memset(sound_buf,128,sound_framesiz*(sound_stereo+1));

        if(zx81.aysound )
                sound_ay_overlay();

        sound_lowlevel_frame(sound_buf,sound_framesiz*(sound_stereo+1));
        SoundOP_Update(sound_buf,sound_framesiz*(sound_stereo+1));
        sound_oldpos=-1;
        sound_fillpos=0;
        sound_ptr=sound_buf;

        ay_change_count=0;
}
Beispiel #3
0
/* no need to call this initially, but should be called
 * on reset otherwise.
 */
void sound_ay_reset(void)
{
        int f;

        for(f=0;f<16;f++)
                sound_ay_write(f,0);

        sound_ay_overlay();
}
Beispiel #4
0
//long curFrame=0;
void Sound_Loop()
{
signed short *ptr,*tptr;
signed short samp;

int f;

//curFrame++;

if(!sound_enabled) return ;

sound_beep_overlay();

/* overlay tape sound */

/* fill in remaining beeper/tape sound */

ptr=sound_buf+(sound_stereo?sound_fillpos[0]*2:sound_fillpos[0]);
samp=sound_oldval[0];
for(f=sound_fillpos[0];f<sound_framesiz;f++) {SOUND_WRITE_BUF_BEEPER(ptr,samp);}


if(sound_fillpos[1]!=0)//se ha mandado sonido por el tape
{
	tptr=tape_buf+sound_fillpos[1];  
	samp=sound_oldval[1];
	for(f=sound_fillpos[1];f<sound_framesiz;f++) {*(tptr)++=samp;}
	
	//overlay
	ptr=sound_buf/*+(sound_stereo?sound_fillpos[0]*2:sound_fillpos[0])*/;
	tptr=tape_buf/*+sound_fillpos[1]*/;
	for(f=0;f<sound_framesiz;f++,tptr++)
	{
	    *(ptr)++ += *tptr;
	    if(sound_stereo)
          (*ptr++)+=*tptr;
	}        
}

           
if(ay_is_in_use)  sound_ay_overlay();  // evita la emulacion si el juego no usa el AY

//fwrite(sound_buf, 1, sound_framesiz * sizeof(short) * sound_channels , fpp)

//Seleuco: Enviamos directamente el sonido al DSP. Es mejor que el hilo. Perfecta sincronizacion y no underruns. 

sound_send(sound_buf,sound_framesiz * sound_channels);
 
sound_oldpos[0]=sound_oldpos[1]=-1;
sound_fillpos[0]=sound_fillpos[1]=0;

ay_change_count=0;
beep_change_count=0;

}
Beispiel #5
0
void sound_frame( CAY8910 *_this )
{
#if 0
  libspectrum_signed_word *ptr, *tptr;
  int f, bchan;
  int ampl = AMPL_BEEPER;

  if( !sound_enabled )
    return;

/* fill in remaining beeper/tape sound */
  ptr =
    sound_buf + ( sound_stereo ? sound_fillpos[0] * 2 : sound_fillpos[0] );
  for( bchan = 0; bchan < 2; bchan++ ) {
    for( f = sound_fillpos[ bchan ]; f < sound_generator_framesiz; f++ )
      SOUND_WRITE_BUF( bchan, ptr, sound_oldval[ bchan ] );

    ptr = tape_buf + sound_fillpos[1];
    ampl = AMPL_TAPE;
  }

/* overlay tape sound */
  ptr = sound_buf;
  tptr = tape_buf;
  for( f = 0; f < sound_generator_framesiz; f++, tptr++ ) {
    ( *ptr++ ) += *tptr;
    if( sound_stereo )
      ( *ptr++ ) += *tptr;
  }
#endif

/* overlay AY sound */
  sound_ay_overlay(_this);

#ifdef HAVE_SAMPLERATE
/* resample from generated frequency down to output frequency if required */
  if( settings_current.sound_hifi )
    sound_resample();
  else
#endif /* #ifdef HAVE_SAMPLERATE */
#if 0
    sound_lowlevel_frame( sound_buf,
			  sound_generator_framesiz * sound_channels );
#endif

#if 0
  sound_oldpos[0] = sound_oldpos[1] = -1;
  sound_fillpos[0] = sound_fillpos[1] = 0;
#endif

  _this->ay_change_count = 0;
}