33template <
size_t transfer_size>
75 memset(transfer_buff, 0,
sizeof(transfer_buff));
85 wavheader_.
ByteRate = CalcByteRate();
90 wavheader_.
FileSize = CalcFileSize();
100 for(
int i = 0; i < cfg_.
channels; i++)
107 tp = (int16_t *)transfer_buff;
108 tp[wptr_ + i] =
f2s16(in[i]);
111 case 32: transfer_buff[wptr_ + i] =
f2s32(in[i]);
break;
118 = cfg_.
bitspersample == 16 ? kTransferSamps * 2 : kTransferSamps;
119 if(wptr_ == cap_point)
123 if(wptr_ >= cap_point * 2)
140 f_write(&fp_, &transfer_buff[offset], transfer_size, &bw);
158 uint32_t cap_point = cfg_.
bitspersample == 16 ? kTransferSamps * 2
161 uint32_t offset_samples = 0;
162 uint32_t local_wptr = wptr_;
165 if(local_wptr >= cap_point)
167 offset_samples = cap_point;
168 local_wptr -= cap_point;
171 uint32_t offset_bytes = offset_samples * bytes_per_sample;
172 uint32_t remaining_size = local_wptr * bytes_per_sample;
175 uint32_t max_bytes =
sizeof(transfer_buff) - offset_bytes;
176 if(remaining_size > max_bytes)
177 remaining_size = max_bytes;
179 uint8_t *base =
reinterpret_cast<uint8_t *
>(transfer_buff);
180 f_write(&fp_, base + offset_bytes, remaining_size, &bw);
185 wavheader_.
FileSize = CalcFileSize();
187 f_write(&fp_, &wavheader_,
sizeof(wavheader_), &bw);
191 memset(transfer_buff, 0,
sizeof(transfer_buff));
201 if(f_open(&fp_, name, FA_WRITE | FA_CREATE_ALWAYS) == FR_OK)
204 if(f_write(&fp_, &wavheader_,
sizeof(wavheader_), &bw) == FR_OK)
210 memset(transfer_buff, 0,
sizeof(transfer_buff));
224 return (
float)num_samps_ / (float)cfg_.
samplerate;
229 inline uint32_t CalcFileSize()
237 inline uint32_t CalcByteRate()
242 static constexpr int kTransferSamps = transfer_size /
sizeof(int32_t);
244 WAV_FormatTypeDef wavheader_;
245 uint32_t num_samps_, wptr_;
247 int32_t transfer_buff[kTransferSamps * 2];
Definition WavWriter.h:35
void Sample(const float *in)
Definition WavWriter.h:98
BufferState
Definition WavWriter.h:61
uint32_t GetLengthSamps()
Definition WavWriter.h:219
bool IsRecording() const
Definition WavWriter.h:216
WavWriter()
Definition WavWriter.h:37
void SaveFile()
Definition WavWriter.h:147
void OpenFile(const char *name)
Definition WavWriter.h:199
~WavWriter()
Definition WavWriter.h:38
Result
Definition WavWriter.h:42
float GetLengthSeconds()
Definition WavWriter.h:222
void Write()
Definition WavWriter.h:131
void Init(const Config &cfg)
Definition WavWriter.h:68
FORCE_INLINE int16_t f2s16(float x)
Definition daisy_core.h:128
FORCE_INLINE int32_t f2s32(float x)
Definition daisy_core.h:163
Hardware defines and helpers for daisy field platform.
Definition index.h:2
const uint32_t kWavFileChunkId
Definition wav_format.h:15
const uint32_t kWavFileSubChunk2Id
Definition wav_format.h:18
const uint32_t kWavFileWaveId
Definition wav_format.h:16
@ WAVE_FORMAT_PCM
Definition wav_format.h:30
const uint32_t kWavFileSubChunk1Id
Definition wav_format.h:17
Definition WavWriter.h:50
int32_t bitspersample
Definition WavWriter.h:53
float samplerate
Definition WavWriter.h:51
int32_t channels
Definition WavWriter.h:52