diff --git a/i_sndfile/i_sndfile.cpp b/i_sndfile/i_sndfile.cpp index c579956340a9a3c8c1a02938ba1e3fffb42af50c..a51bb12d90c178826976e4280bfd77ae6ddd4502 100644 --- a/i_sndfile/i_sndfile.cpp +++ b/i_sndfile/i_sndfile.cpp @@ -8,8 +8,8 @@ int main(int argc, char**argv){ blc_channel output; - char const *filename, *output_name, *type_str, *length_str, *period_str, *samplerate_str; - int period, samplerate; + char const *filename, *output_name, *type_str, *length_str, *period_str, *samplerate_str, *iterations_nb_str; + int period, samplerate, iterations_nb; size_t length; uint32_t type; SF_INFO sfinfo; @@ -18,6 +18,7 @@ int main(int argc, char**argv){ blc_program_set_description("Record blc_channel input in a sound file"); blc_program_add_option(&filename, 'f', "file", "string", "filename of the file to write", NULL); + blc_program_add_option(&iterations_nb_str, 'n', "number", "integer", "number of samples to acquire (-1 for infinity)", "-1"); blc_program_add_option(&output_name, 'o', "output", "string", "Channel where to put the sound", DEFAULT_OUTPUT_NAME); blc_program_add_option(&period_str, 'p', "period", "integer", "Period between each sample in ms (0 as fast as possible)", "0"); blc_program_add_option(&length_str, 's', "size", "integer", "Sample size", "4096"); @@ -37,6 +38,7 @@ int main(int argc, char**argv){ if (sscanf(length_str, "%ld", &length)!=1) EXIT_ON_ERROR("Reading size '%s'", length_str); if (sscanf(period_str, "%d", &period)!=1) EXIT_ON_ERROR("Reading period in '%s'", period_str); + iterations_nb=strtol(iterations_nb_str, NULL, 10); if (strcmp(DEFAULT_OUTPUT_NAME, output_name)==0) asprintf((char**)&output_name, ":sound%d", getpid()); output.create_or_open(output_name, BLC_CHANNEL_WRITE, type, 'LPCM', 1, length); @@ -51,6 +53,7 @@ int main(int argc, char**argv){ blc_loop_try_add_posting_semaphore(output.sem_new_data); BLC_COMMAND_LOOP(period*1000){ + if (iterations_nb==blc_loop_iteration) blc_command_ask_quit(); read_items_nb=sf_read_float(sndfile, output.floats, output.total_length); if (read_items_nb!=output.total_length) { color_eprintf(BLC_YELLOW, "%s: Iteration %llu: Missing data. Read '%lld' items instead of '%ld'. It is probably the end of the file\n", blc_program_name, blc_loop_iteration, read_items_nb, output.total_length);