From ed8ca06aa48149825a8a77ad7ea3eaf02983eeb7 Mon Sep 17 00:00:00 2001 From: Dimitri Diakopoulos Date: Sun, 17 May 2015 18:19:39 -0700 Subject: [PATCH] sanity check out target format --- include/libnyquist/WavEncoder.h | 1 + src/WavEncoder.cpp | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/include/libnyquist/WavEncoder.h b/include/libnyquist/WavEncoder.h index 3353659..60a2034 100644 --- a/include/libnyquist/WavEncoder.h +++ b/include/libnyquist/WavEncoder.h @@ -46,6 +46,7 @@ class WavEncoder FileIOError, UnsupportedSamplerate, UnsupportedChannelConfiguration, + UnsupportedBitdepth, BufferTooBig, }; diff --git a/src/WavEncoder.cpp b/src/WavEncoder.cpp index fff5303..2c19775 100644 --- a/src/WavEncoder.cpp +++ b/src/WavEncoder.cpp @@ -73,6 +73,12 @@ int WavEncoder::WriteFile(const EncoderParams p, const AudioData * d, const std: return EncoderError::UnsupportedSamplerate; } + // Don't support PCM_64 or PCM_DBL + if (GetFormatBitsPerSample(p.targetFormat) > 32) + { + return EncoderError::UnsupportedBitdepth; + } + std::ofstream fout(path.c_str(), std::ios::out | std::ios::binary); if (!fout.is_open()) @@ -95,6 +101,14 @@ int WavEncoder::WriteFile(const EncoderParams p, const AudioData * d, const std: auto header = MakeWaveHeader(p); fout.write(reinterpret_cast(&header), sizeof(WaveChunkHeader)); + auto sourceBits = GetFormatBitsPerSample(d->sourceFormat); + auto targetBits = GetFormatBitsPerSample(p.targetFormat); + + if (p.targetFormat == PCM_FLT || p.targetFormat == PCM_DBL) + { + + } + // Data header fout.write(GenerateChunkCodeChar('d', 'a', 't', 'a'), 4); @@ -102,10 +116,6 @@ int WavEncoder::WriteFile(const EncoderParams p, const AudioData * d, const std: toBytes(int(samplesSizeInBytes), chunkSizeBuff); fout.write(chunkSizeBuff, 4); - // Debugging -- assume IEEE_Float - auto sourceBits = GetFormatBitsPerSample(d->sourceFormat); - auto targetBits = GetFormatBitsPerSample(p.targetFormat); - // Apply dithering if (sourceBits != targetBits && p.dither != DITHER_NONE) {