From 4252eb88cea6abcfeca2d25b3cd7a4d220028ffb Mon Sep 17 00:00:00 2001 From: chatlanin Date: Tue, 22 Apr 2025 14:04:02 +0300 Subject: [PATCH] add save wav --- .vscode/launch.json | 7 ------- src/hack/utils/save_wav.hpp | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 7 deletions(-) delete mode 100644 .vscode/launch.json create mode 100644 src/hack/utils/save_wav.hpp diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 5c7247b..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [] -} \ No newline at end of file diff --git a/src/hack/utils/save_wav.hpp b/src/hack/utils/save_wav.hpp new file mode 100644 index 0000000..a39de94 --- /dev/null +++ b/src/hack/utils/save_wav.hpp @@ -0,0 +1,36 @@ +#pragma once + +#include +#include +#include +#include "hack/logger/logger.hpp" + +namespace hack::utils +{ + inline void save_wav(const std::string& path, const std::vector& samples, int sample_rate) + { + SF_INFO sf_info; + sf_info.samplerate = sample_rate; + sf_info.channels = 1; + + // SF_FORMAT_PCM_16/24/32 + // Максимальная точность (подходит для обработки в DAW, научных расчётов). + // Меньше ошибок округления при многократной обработке (фильтрация, нормализация). + // Поддержка чисел с плавающей запятой (если используется float или double). + // Большой размер файла (в 2 раза больше, чем 16-bit). + // Избыточен для финального аудио (обычно 16-24 бит достаточно). + sf_info.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16; + + + SNDFILE* outfile = sf_open(path.c_str(), SFM_WRITE, &sf_info); + if (!outfile) + { + hack::error()("Error: could not open file ", path); + return; + } + + sf_write_float(outfile, samples.data(), samples.size()); + sf_close(outfile); + } +} +