int ftape_set_nr_buffers(int cnt)
{
    int delta = cnt - ft_nr_buffers;
    TRACE_FUN(ft_t_flow);

    if (delta > 0) {
        while (delta--) {
            if (add_one_buffer() < 0) {
                TRACE_EXIT -ENOMEM;
            }
        }
    } else if (delta < 0) {
        while (delta++) {
            del_one_buffer();
        }
    }
    ftape_zap_read_buffers();
    TRACE_EXIT 0;
}
/* Mix out function: it mix buffers providing from the player and/or send it to output bus (multitrak soundcards)
*/
int mix_out(float *in_buffer, int in_buf_size, int bus)
{
	//printf("mix_out: recus %d samples pour bus %d\n", in_buf_size, bus);
	/* variables internes */
	float *out_buffer = NULL;
	float tmp1, tmp2;
	int i;
	LP_global_audio_data audio_data;

	/* Test de in_buffer */
	if(in_buffer == NULL) {
		fprintf(stderr, "mix_out: in_buffer is NULL\n");
		return -1;
	}

	/* Buffer de bus */
	switch (bus) {
		case 1: out_buffer = audio_data.bus_buffer_1; break;
		case 2: out_buffer = audio_data.bus_buffer_2; break;
		case 3: out_buffer = audio_data.bus_buffer_3; break;
		case 4: out_buffer = audio_data.bus_buffer_4; break;
		default: fprintf(stderr, "mix_out: bus not aviable: %d\n", bus);
		return -1; break;
	}

	/* Si out_bus est NULL on renvois */
	if(out_buffer == NULL) {
		fprintf(stderr, "mix_out: out_buffer is NULL\n");
		return -1;
	}

	/* mixage */
	for(i=0; i<in_buf_size; i++) {
		tmp1 = out_buffer[i];
		tmp2 = in_buffer[i];
		out_buffer[i] = (tmp1) + (tmp2 / audio_data.nb_players);
	}

	/* Routing de sortie */
	add_one_buffer(out_buffer, audio_data.mixed_buffer, in_buf_size, audio_data.nb_channel, audio_data.bus_out[bus]);

	return 0;
}