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; }