Write audiobuffer to file or memory.
120 drwav_allocation_callbacks drwaveCallbacks {
130 drwav_data_format droptions;
132 droptions.sampleRate = in.sampleRate;
133 droptions.channels = in.channels();
134 droptions.bitsPerSample = options.bitsPerSample;
135 droptions.format = options.format;
136 droptions.container = drwav_container(options.container);
139 void* memory =
nullptr;
140 if (out ==
nullptr) {
141 #ifndef TKLB_NO_STDIO
142 if (!drwav_init_file_write(&wav, path, &droptions, &drwaveCallbacks)) {
149 if (!drwav_init_memory_write(&wav, &memory, &outSize, &droptions, &drwaveCallbacks)) {
155 constexpr Size chunkSize = 128;
156 const Size frames = in.validSize();
159 case WaveOptions::Format::IEEE_FLOAT:
162 auto interleaved =
new float[chunkSize * in.channels()];
163 while (written < frames) {
164 auto remaining = in.putInterleaved(interleaved, chunkSize, written);
165 written +=
Size(drwav_write_pcm_frames(&wav, remaining, interleaved));
167 delete[] interleaved;
170 case WaveOptions::Format::PCM:
173 auto interleaved =
new short[chunkSize * in.channels()];
174 while (written < frames) {
175 auto read = in.putInterleaved(interleaved, chunkSize, written);
176 written +=
Size(drwav_write_pcm_frames(&wav, read, interleaved));
178 delete[] interleaved;
187 if (out !=
nullptr) {
188 out->
set(
reinterpret_cast<char*
>(memory),
Size(outSize));
#define TKLB_ASSERT(condition)
Wrap assertions.
bool set(const HeapBuffer< T, Alignment2, Allocator2, Size2 > &source)
Resizes and copies the contents of the source Buffer This will do a memory::copy,so none of the objec...