void measure_speed (float *speed, uint32_t size){ shift_right(speed,size); //Abrindo Espaço na Fila //Medição de velocidade pela Duty: if (flag_speed == SPEED_DUTY){ measure_speed_duty(speed); if (speed[0] > MAX_DUTY){ flag_speed = SPEED_FREQ; } } //Medição de velocidade pela Freq: else if (flag_speed == SPEED_FREQ){ measure_speed_freq(speed); if (speed[0] < MIN_FREQ){ flag_speed = SPEED_DUTY; } } speed[0] = speed[0]*RPMtoRADs; //Convertendo RPM para Rad/s filter_lowpass(speed,&Hd,size); //speed[0] = N0*speed[0] + N1*speed[1]; }
char *play(t_platine *p) { char *str; if (p->cmd[p->index][0] == '#') str = strdup("shrrrck"); else str = remove_cut(strdup(p->cmd[p->index])); if (p->lowpass == 1) str = filter_lowpass(str); if (p->highpass == 1) str = filter_highpass(str); if (p->doubl == 1) str = fx_double(str); if (p->flanger == 1) str = flanger(str); if (p->echo == 1) str = fx_echo(str); reset_all_fx(p); if (p->reversed == 1) return (revstr(str)); return (str); }
int main(int argc, char **argv) { struct tap tapfile; struct wav wavfile; FILE *infile; long pulse; long i; fixedpoint len, accum; long channels[2]; int wave[2]; int sample; getopts(argc, argv); if (invert) { wave[0] = LOW; wave[1] = HIGH; } else { wave[0] = HIGH; wave[1] = LOW; } if (optind == argc) { infile = stdin; } else if (optind == argc - 1) { if (!strcmp(argv[optind], "-")) { infile = stdin; } else { infile = fopen(argv[optind], "rb"); if (!infile) { perror(argv[optind]); return 1; } } } else { fprintf(stderr, "%s: too many arguments\n", argv0); usage(); return 1; } if (tap_read_header(&tapfile, infile)) { fprintf(stderr, "%s: error reading TAP file\n", argv0); return 1; } wavfile.SampleRate = samplerate; wavfile.BitsPerSample = 8; wavfile.NumChannels = 1; if (wav_write_header(&wavfile, stdout)) { fprintf(stderr, "%s: error writing WAV file\n", argv0); return 1; } filter_init(&lowpass_filter, lowpass_freq, wavfile.SampleRate); #if 0 /* put one initial sample so the first pulse is recognized */ channels[0] = wave[1]; wav_put_sample(&wavfile, channels); accum = TO_FIXED(1.5); #else accum = TO_FIXED(2); #endif while ((pulse = tap_get_pulse(&tapfile)) >= 0) { //fprintf(stderr, "pulse: %6ld (%04lx)\n", pulse, pulse); //if (pulse < 8*256) //++pulsehist[pulse/8]; len = TO_FIXED(((double)pulse * samplerate / PAL_MHZ / speed / 1000000)); if (len < TO_FIXED(2)) { fprintf(stderr, "%s: warning: pulse length (%ld) is less than 2 samples\n", argv0, pulse); } #if 0 accum = FIXED_F(len + accum); #else len += accum; accum = FIXED_F(len); #endif #if 0 fprintf(stderr, "%ld.%03ld 0.%03ld \n", FIXED_I(len), FIXED_F(len) * 1000 / FIXED_ONE, FIXED_F(accum) * 1000 / FIXED_ONE); #endif for (i = 0; i < FIXED_I(len) / 2 - 1; ++i) { channels[0] = filter_lowpass(&lowpass_filter, wave[0]) << 16; wav_put_sample(&wavfile, channels); } for (; i < FIXED_I(len) - 2; ++i) { channels[0] = filter_lowpass(&lowpass_filter, wave[1]) << 16; wav_put_sample(&wavfile, channels); } #if 0 channels[0] = FIXED_MUL(wave[1], accum) + FIXED_MUL(wave[0], FIXED_ONE - accum); wav_put_sample(&wavfile, channels); #else sample = FIXED_MUL(wave[1], accum); channels[0] = filter_lowpass(&lowpass_filter, sample) << 16; wav_put_sample(&wavfile, channels); sample -= wave[1]; channels[0] = filter_lowpass(&lowpass_filter, sample) << 16; wav_put_sample(&wavfile, channels); #endif } wav_close(&wavfile); return 0; }