From 2a1d6c07c098741612ebbc0d7dec204a05f3cc24 Mon Sep 17 00:00:00 2001 From: Turijon Date: Thu, 25 Jun 2026 11:11:59 +0200 Subject: [PATCH] Add option to keep input audio. --- examples/parakeet-server/parakeet-server.cpp | 26 ++++++++++++++------ examples/server-common.h | 1 + 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/examples/parakeet-server/parakeet-server.cpp b/examples/parakeet-server/parakeet-server.cpp index 141d3f1b5..6ef3c45e6 100644 --- a/examples/parakeet-server/parakeet-server.cpp +++ b/examples/parakeet-server/parakeet-server.cpp @@ -53,6 +53,7 @@ static void parakeet_print_usage(int /*argc*/, char ** argv, const parakeet_para fprintf(stderr, " --request-path PATH, [%-7s] Request path prefix\n", sparams.request_path.c_str()); fprintf(stderr, " --inference-path PATH, [%-7s] Inference endpoint path\n", sparams.inference_path.c_str()); fprintf(stderr, " --convert, [%-7s] Convert audio to WAV via ffmpeg\n", sparams.ffmpeg_converter ? "true" : "false"); + fprintf(stderr, " --keep-input-audio, [%-7s] Keep input audio in --tmp-dir\n", sparams.keep_input_audio ? "true" : "false"); fprintf(stderr, " --tmp-dir PATH, [%-7s] Temporary directory for converted files\n", sparams.tmp_dir.c_str()); fprintf(stderr, "\n"); } @@ -82,6 +83,7 @@ static bool parakeet_params_parse(int argc, char ** argv, parakeet_params & para else if (arg == "--request-path") { sparams.request_path = argv[++i]; } else if (arg == "--inference-path") { sparams.inference_path = argv[++i]; } else if (arg == "--convert") { sparams.ffmpeg_converter = true; } + else if (arg == "--keep-input-audio") { sparams.keep_input_audio = true; } else if (arg == "--tmp-dir") { sparams.tmp_dir = argv[++i]; } else { fprintf(stderr, "error: unknown argument: %s\n", arg.c_str()); @@ -260,12 +262,17 @@ int main(int argc, char ** argv) { std::vector pcmf32; std::vector> pcmf32s; - if (sparams.ffmpeg_converter) { - const std::string temp_filename = generate_temp_filename(sparams.tmp_dir, "parakeet-server", ".wav"); - std::ofstream temp_file{temp_filename, std::ios::binary}; - temp_file << audio_file.content; - temp_file.close(); + std::string temp_filename; + if (sparams.keep_input_audio || sparams.ffmpeg_converter) { + temp_filename = generate_temp_filename(sparams.tmp_dir, "parakeet-server", ".wav"); + + std::ofstream temp_file{temp_filename, std::ios::binary}; + temp_file.write(audio_file.content.data(), + static_cast(audio_file.content.size())); + } + + if (sparams.ffmpeg_converter) { std::string error_resp; if (!convert_to_wav(temp_filename, error_resp, false)) { res.status = 500; @@ -277,10 +284,11 @@ int main(int argc, char ** argv) { fprintf(stderr, "error: failed to read WAV file '%s'\n", temp_filename.c_str()); res.status = 400; res.set_content("{\"error\":\"failed to read WAV file\"}", "application/json"); - std::remove(temp_filename.c_str()); + if (!sparams.keep_input_audio) { + std::remove(temp_filename.c_str()); + } return; } - std::remove(temp_filename.c_str()); } else { if (!::read_audio_data(audio_file.content.data(), audio_file.content.size(), pcmf32, pcmf32s, false)) { fprintf(stderr, "error: failed to read audio data\n"); @@ -290,6 +298,10 @@ int main(int argc, char ** argv) { } } + if (!sparams.keep_input_audio) { + std::remove(temp_filename.c_str()); + } + printf("Successfully loaded %s\n", filename.c_str()); fprintf(stderr, "%s: processing '%s' (%d samples, %.1f sec), %d threads ...\n", diff --git a/examples/server-common.h b/examples/server-common.h index b320387aa..1bb99a013 100644 --- a/examples/server-common.h +++ b/examples/server-common.h @@ -30,6 +30,7 @@ struct server_params { int32_t write_timeout = 600; bool ffmpeg_converter = false; + bool keep_input_audio = false; }; struct segment_token {