diff --git a/include/libnyquist/WavEncoder.h b/include/libnyquist/WavEncoder.h index 2bc5d23..059b714 100644 --- a/include/libnyquist/WavEncoder.h +++ b/include/libnyquist/WavEncoder.h @@ -33,28 +33,31 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. namespace nqr { +enum EncoderError +{ + NoError, + InsufficientSampleData, + FileIOError, + UnsupportedSamplerate, + UnsupportedChannelConfiguration, + UnsupportedBitdepth, + UnsupportedChannelMix, + BufferTooBig, +}; + + // A simplistic encoder that takes a blob of data, conforms it to the user's // EncoderParams preference, and writes to disk. Be warned, does not support resampling! // @todo support dithering, samplerate conversion, etc. -class WavEncoder +struct WavEncoder { - enum EncoderError - { - NoError, - InsufficientSampleData, - FileIOError, - UnsupportedSamplerate, - UnsupportedChannelConfiguration, - UnsupportedBitdepth, - UnsupportedChannelMix, - BufferTooBig, - }; - -public: - // Assume data adheres to EncoderParams, except for bit depth and fmt static int WriteFile(const EncoderParams p, const AudioData * d, const std::string & path); - +}; + +struct OpusEncoder +{ + static int WriteFile(const EncoderParams p, const AudioData * d, const std::string & path); }; } // end namespace nqr diff --git a/src/WavEncoder.cpp b/src/WavEncoder.cpp index aa0e46f..be1eb04 100644 --- a/src/WavEncoder.cpp +++ b/src/WavEncoder.cpp @@ -36,6 +36,10 @@ inline void toBytes(int value, char * arr) arr[3] = (value >> 24) & 0xFF; } +//////////////////////////// +// Wave File Encoding // +//////////////////////////// + int WavEncoder::WriteFile(const EncoderParams p, const AudioData * d, const std::string & path) { assert(d->samples.size() > 0); @@ -189,3 +193,19 @@ int WavEncoder::WriteFile(const EncoderParams p, const AudioData * d, const std: return EncoderError::NoError; } + +//////////////////////////// +// Opus File Encoding // +//////////////////////////// + +int OpusEncoder::WriteFile(const EncoderParams p, const AudioData * d, const std::string & path) +{ + assert(d->samples.size() > 0); + + // Cast away const because we know what we are doing (Hopefully?) + float * sampleData = const_cast(d->samples.data()); + size_t sampleDataSize = d->samples.size(); + + return EncoderError::NoError; +} +