Esempio n. 1
0
void obj::camera::move(int direction) {
    int modifier = modifier_for_direction(direction);

    float auxAngle = angle / 180 * M_PI - (M_PI / 2);

    switch (direction) {
        case left:
        case right:
            i[0] += speed * std::cos(auxAngle) * modifier;
            i[2] += speed * std::sin(auxAngle) * modifier;

            break;
        case front:
        case back:
            i[0] += speed * modifier * get_cos();
            i[1] += speed * modifier * d[1];
            i[2] += speed * modifier * get_sin();

            break;
    }

    refresh_direction();
    refresh_look_at();
}
Esempio n. 2
0
int quisk_process_microphone(complex * cSamples, int count)
{
	int i, sample, maximum;
	double d;
	static double fmPhase = CLIP16;

#if 0
	// Measure soundcard actual sample rate
	static time_t seconds = 0;
	static long total = 0;
	struct timeb tb;
	static double dtime;

	ftime(&tb);
	total += count;
	if (seconds == 0) {
		seconds = tb.time;
		dtime = tb.time + .001 * tb.millitm;
	}		
	else if (tb.time - seconds > 4) {
		printf("Mic soundcard rate %.3f\n", total / (tb.time + .001 * tb.millitm - dtime));
		seconds = tb.time;
		printf("backlog %d, count %d\n", backlog, count);
	}
#endif

	
#ifdef TEST_TX_WAV_FILE
	get_wav(cSamples, count);	// replace audio samples with sound from a WAV file
#endif
#if USE_GET_SIN
	get_sin(cSamples, count);	// Replace mic samples with a sin wave, and send it
#endif
	maximum = 1;
	for (i = 0; i < count; i++) {	// measure maximum microphone level for display
		cSamples[i] *= (double)CLIP16 / CLIP32;	// convert 32-bit samples to 16 bits
		d = creal(cSamples[i]);
		sample = (int)fabs(d);
		if (sample > maximum)
			maximum = sample;
	}
	if (maximum > mic_level)
		mic_level = maximum;
	mic_timer -= count;		// time out the max microphone level to display
	if (mic_timer <= 0) {
		mic_timer = quisk_sound_state.mic_sample_rate / 1000 * MIC_MAX_HOLD_TIME;
		mic_max_display = mic_level;
		mic_level = 1;
	}

	if (quisk_is_key_down())
		switch (rxMode) {
		case 2:		// LSB
		case 3:		// USB
			if (spotMode == 0) {
				tx_filter(cSamples, count);	// filter samples
				transmit_udp(cSamples, count);
			}
			else if (spotMode == 1)
				transmit_mic_carrier(cSamples, count, 0.5);
			else
				transmit_mic_carrier(cSamples, count, 1.0);
			break;
		case 4:		// AM
			tx_filter2(cSamples, count);
			for (i = 0; i < count; i++)	// transmit (0.5 + ampl/2, 0)
				cSamples[i] = (creal(cSamples[i]) + CLIP16) * 0.5;
			transmit_udp(cSamples, count);
			break;
		case 5999:		// FM
			tx_filter2(cSamples, count);
			for (i = 0; i < count; i++) {	// transmit +/- 5000 Hz tone
				fmPhase *= cexp( - I * 2.0 * M_PI * (5000.0 * creal(cSamples[i]) / CLIP16) /
					quisk_sound_state.mic_sample_rate);
				cSamples[i] = fmPhase;
			}
			transmit_udp(cSamples, count);
			break;
		case 10:	// transmit IMD 2-tone test
			transmit_mic_imd(cSamples, count, 1.0);
			break;
		case 11:
			transmit_mic_imd(cSamples, count, 1.0 / sqrt(2.0));
			break;
		case 12:
			transmit_mic_imd(cSamples, count, 0.5);
			break;
		}
	else
		fmPhase = CLIP16;
	return count;
}
Esempio n. 3
0
void obj::camera::refresh_direction() {
    d[0] =  get_cos() + i[0];
    d[2] =  get_sin() + i[2];
}