add save wav

This commit is contained in:
2025-04-22 14:04:02 +03:00
parent 8bb5266c7e
commit 4252eb88ce
2 changed files with 36 additions and 7 deletions

View File

@@ -0,0 +1,36 @@
#pragma once
#include <string>
#include <vector>
#include <sndfile.h>
#include "hack/logger/logger.hpp"
namespace hack::utils
{
inline void save_wav(const std::string& path, const std::vector<float>& 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);
}
}