Skip to content

File audio.h

File List > external-docs > libDaisy > src > hid > audio.h

Go to the documentation of this file

Source Code

#ifndef DSY_AUDIO_H
#define DSY_AUDIO_H 
#include "per/sai.h"

namespace daisy
{
class AudioHandle
{
  public:
    struct Config
    {
        size_t blocksize = 48;

        SaiHandle::Config::SampleRate samplerate
            = SaiHandle::Config::SampleRate::SAI_48KHZ;

        float postgain = 1.f;

        float output_compensation = 1.f;
    };

    enum class Result
    {
        OK,
        ERR,
    };

    typedef const float* const* InputBuffer;

    typedef float** OutputBuffer;

    typedef void (*AudioCallback)(InputBuffer  in,
                                  OutputBuffer out,
                                  size_t       size);

    typedef const float* InterleavingInputBuffer;

    typedef float* InterleavingOutputBuffer;

    typedef void (*InterleavingAudioCallback)(InterleavingInputBuffer  in,
                                              InterleavingOutputBuffer out,
                                              size_t                   size);

    AudioHandle() : pimpl_(nullptr) {}
    ~AudioHandle() {}

    AudioHandle(const AudioHandle& other) = default;
    AudioHandle& operator=(const AudioHandle& other) = default;

    Result Init(const Config& config, SaiHandle sai);

    Result Init(const Config& config, SaiHandle sai1, SaiHandle sai2);

    Result DeInit();

    const Config& GetConfig() const;

    size_t GetChannels() const;

    float GetSampleRate();

    Result SetSampleRate(SaiHandle::Config::SampleRate samplerate);

    Result SetBlockSize(size_t size);

    Result SetPostGain(float val);

    Result SetOutputCompensation(float val);

    Result Start(AudioCallback callback);

    Result Start(InterleavingAudioCallback callback);

    Result Stop();

    Result ChangeCallback(AudioCallback callback);

    Result ChangeCallback(InterleavingAudioCallback callback);


    class Impl;

  private:
    Impl* pimpl_;
};

} // namespace daisy

#endif