I'm using resample.c from speex in my project, and was testing it by processing the same waveform twice, with a reset() call in the middle, as follows: short *input_data = read_waveform_as_linear(infileName, &rate, &num_samples, &num_channels); SpeexResamplerState *state = speex_resampler_init_frac(num_channels, in_rate, out_rate, in_rate, out_rate, quality, &error); speex_resampler_skip_zeros(state); speex_resampler_process_int(state, 0, input_data, ...) write_waveform(...) speex_resampler_reset_mem(m_resampler_state); speex_resampler_skip_zeros(m_resampler_state); speex_resampler_process_int(state, 0, input_data, ...) write_waveform(...) speex_resampler_destroy(state); When I run it this way, my two output waveforms are not identical on a binary basis. Changing speex_resampler_reset_mem() as follows seems to fix the problem: EXPORT int speex_resampler_reset_mem(SpeexResamplerState *st) { spx_uint32_t i; for (i=0;i<st->nb_channels*(st->filt_len-1);i++) st->mem[i] = 0; // added bugfix below: st->started = 0; for (i=0;i<st->nb_channels;i++) { st->last_sample[i] = 0; st->magic_samples[i] = 0; st->samp_frac_num[i] = 0; } return RESAMPLER_ERR_SUCCESS; } Note that I have to call speex_resampler_skip_zeros() again after each reset call, whether or not I zero st->last_sample[i] or not. Also, I'm not 100% sure whether resetting st->started = 0 is strictly necessary or not. Thanks for a great addition to open source software, Victor Abrash