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(); }
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; }
void obj::camera::refresh_direction() { d[0] = get_cos() + i[0]; d[2] = get_sin() + i[2]; }