Exemple #1
0
void play_click(int sound)
{
	int snd_bf_pointer;
	uae_s16 gui_volume;
	
	if (!changed_prefs.gui_volume) return;
	if (changed_prefs.sound_stereo!=1) return; //Only stereo implemented
	
	gui_volume = 5-changed_prefs.gui_volume;
	
	if (gui_volume<0) gui_volume=0;
	if (gui_volume>5) gui_volume=5;
	
	audio_resume();
	
	for(snd_bf_pointer=0; snd_bf_pointer< (len_click_buffer[sound]-sndbufsize); snd_bf_pointer+=sndbufsize)
	{
		memcpy_volume((uae_s16 *)sndbuffer, (uae_s16 *)(click_buffer_pointer[sound]+snd_bf_pointer), sndbufsize, gui_volume);
		finish_sound_buffer();
	}
	
	memcpy(sndbuffer, click_buffer_pointer[sound] + snd_bf_pointer, len_click_buffer[sound] - snd_bf_pointer); //The last chunk
	memset((char *) sndbuffer + len_click_buffer[sound]-snd_bf_pointer,0, sndbufsize -(len_click_buffer[sound]- snd_bf_pointer));
	finish_sound_buffer();
	clearbuffer();
	
	audio_pause();
}
Exemple #2
0
void update_audio (void)
{
    unsigned long int n_cycles;
	
    uae4all_prof_start(4);
    n_cycles = get_cycles () - last_cycles;
	for (;;) {
#ifdef __arm__
		asm(".align 4");
#endif	
		register unsigned long int best_evtime = n_cycles + 1;
		//int addr = (int)audio_channel_evtime;
		//AUDIO_PREFETCH(addr);

		// CHECK_STATE
		if (best_evtime > audio_channel_evtime[0]) 
			best_evtime = audio_channel_evtime[0]; 
		if (best_evtime > audio_channel_evtime[1]) 
			best_evtime = audio_channel_evtime[1]; 
		if (best_evtime > audio_channel_evtime[2]) 
			best_evtime = audio_channel_evtime[2];
		if (best_evtime > audio_channel_evtime[3])
			best_evtime = audio_channel_evtime[3];

		if (best_evtime > next_sample_evtime)
			best_evtime = next_sample_evtime;
		if (best_evtime > n_cycles)
			break;
			
		// SUB_EVTIME
		next_sample_evtime -= best_evtime;
		audio_channel_evtime[0] -= best_evtime;
		audio_channel_evtime[1] -= best_evtime;
		audio_channel_evtime[2] -= best_evtime;
		audio_channel_evtime[3] -= best_evtime;
		n_cycles -= best_evtime;
		
		/*
		addr = (int)&audio_channel_current_sample;
		AUDIO_PREFETCH(addr);
		addr = (int)&audio_channel_vol;
		AUDIO_PREFETCH(addr);
		addr = (int)&audio_channel_adk_mask;
		AUDIO_PREFETCH(addr);
		 */
		
		// IF_SAMPLE
		if (!next_sample_evtime) {
			next_sample_evtime = scaled_sample_evtime;
			register uae_u32 d0 = audio_channel_current_sample[0];
			register uae_u32 d1 = audio_channel_current_sample[1];
			register uae_u32 d2 = audio_channel_current_sample[2];
			register uae_u32 d3 = audio_channel_current_sample[3];
			d0 *= audio_channel_vol[0];
			d1 *= audio_channel_vol[1];
			d2 *= audio_channel_vol[2];
			d3 *= audio_channel_vol[3];
			d0 &= audio_channel_adk_mask[0];
			d1 &= audio_channel_adk_mask[1];
			d2 &= audio_channel_adk_mask[2];
			d3 &= audio_channel_adk_mask[3];
			*(uae_u16 *)sndbufpt = d0+d1+d2+d3;
			sndbufpt = (uae_u16 *)(((uae_u8 *)sndbufpt) + 2);
			if ((unsigned)sndbufpt - (unsigned)render_sndbuff >= SNDBUFFER_LEN) {
				finish_sound_buffer ();
			}
		}
		
		// RUN_HANDLERS
		for (int i=0; i < 4; i++) {
			if (!audio_channel_evtime[i])
				audio_handler(i);
		}
		/*
		if (!audio_channel_evtime[0])
			audio_handler_0();
		if (!audio_channel_evtime[1])
			audio_handler_1();
		if (!audio_channel_evtime[2])
			audio_handler_2();
		if (!audio_channel_evtime[3])
			audio_handler_3();
		 */
	}
	
	last_cycles = get_cycles () - n_cycles;
	
    uae4all_prof_end(4);
}