AUI Framework  master
Cross-platform base for C++ UI apps
Loading...
Searching...
No Matches
AVorbisSoundPipe.h
    1#pragma once
    2
    3#include "AUI/Audio/ISoundPipe.h"
    4#include "AUI/IO/ADynamicPipe.h"
    5#include "AUI/Util/APimpl.h"
    6
    7typedef struct vorbis_info vorbis_info;
    8typedef struct vorbis_comment vorbis_comment;
    9typedef struct vorbis_dsp_state vorbis_dsp_state;
   10typedef struct vorbis_block vorbis_block;
   11
   12class AVorbisSoundPipe : public ISoundPipe {
   13public:
   14    AVorbisSoundPipe();
   15
   16    void write(const char *src, size_t size) override;
   17
   18    size_t read(char* dst, size_t) override;
   19
   20    AAudioFormat info() override;
   21
   22    [[nodiscard]]
   23    bool isLastWriteSuccessful() const {
   24        return mLastWriteSuccessful;
   25    }
   26
   27    static constexpr ASampleFormat SAMPLE_FORMAT = ASampleFormat::I16;
   28
   29private:
   30    enum class WaitingTarget {
   31        ID_HEADER,
   32        COMMENT,
   33        INFO,
   34        AUDIO_PACKET
   35    };
   36
   37    WaitingTarget mWaitingTarget;
   38    aui::fast_pimpl<vorbis_info, 8 * std::max(sizeof(long), sizeof(void*))> mInfo;
   39    aui::fast_pimpl<vorbis_comment, 4 * sizeof(void*)> mComment;
   40    aui::fast_pimpl<vorbis_dsp_state, 160> mState;
   41    aui::fast_pimpl<vorbis_block, 200> mBlock;
   42
   43    ADynamicPipe mDecodedSamples;
   44    bool mLastWriteSuccessful = true;
   45};
void write(const char *src, size_t size) override
Writes exact size bytes to stream. Blocking (waiting for write all data) is allowed.
size_t read(char *dst, size_t) override
Reads up to size bytes from stream. Blocking (waiting for new data) is allowed.
AAudioFormat info() override
Get general info about sound stream.
ISoundPipe accepts sound data and outputs sound samples, useful for decoded audio passed in packets.
Definition ISoundPipe.h:10
ASampleFormat
Sample formats supported for mixing.
Definition ASampleFormat.h:12
@ I16
Signed 16-bit integer.
Definition ASampleFormat.h:16
Audio format descriptor.
Definition AAudioFormat.h:13