47 void feed(
const float* left,
const float* right, uint16_t frames) {
50 for (uint16_t i = 0; i < frames; ++i) {
74 bool dump_to_file(
const char* path, uint32_t sample_rate = 48000) {
79 if (f_open(&fil, path, FA_CREATE_ALWAYS | FA_WRITE) != FR_OK) {
85 constexpr uint16_t channels = 2;
86 constexpr uint16_t bits = 32;
87 constexpr uint16_t fmt_pcm_float = 3;
88 uint32_t data_size = MaxFrames * channels *
sizeof(float);
89 uint32_t file_size = 36 + data_size;
90 uint32_t fmt_size = 16;
91 uint32_t byte_rate = sample_rate * channels * (bits / 8);
92 uint16_t block_align = channels * (bits / 8);
95 f_write(&fil,
"RIFF", 4, &bw);
96 f_write(&fil, &file_size, 4, &bw);
97 f_write(&fil,
"WAVE", 4, &bw);
98 f_write(&fil,
"fmt ", 4, &bw);
99 f_write(&fil, &fmt_size, 4, &bw);
100 f_write(&fil, &fmt_pcm_float, 2, &bw);
101 f_write(&fil, &channels, 2, &bw);
102 f_write(&fil, &sample_rate, 4, &bw);
103 f_write(&fil, &byte_rate, 4, &bw);
104 f_write(&fil, &block_align, 2, &bw);
105 f_write(&fil, &bits, 2, &bw);
106 f_write(&fil,
"data", 4, &bw);
107 f_write(&fil, &data_size, 4, &bw);
111 for (uint16_t pass = 0; pass < 2; ++pass) {
112 uint16_t start = (pass == 0) ? p : 0;
113 uint16_t end = (pass == 0) ? MaxFrames : p;
114 for (uint16_t i = start; i < end; ++i) {
115 f_write(&fil, &
buf_left_[i],
sizeof(
float), &bw);
116 f_write(&fil, &
buf_right_[i],
sizeof(
float), &bw);