AUI Framework  master
Cross-platform base for C++ UI apps
Loading...
Searching...
No Matches
AWavSoundStream.h
    1#pragma once
    2
    3#include "AUI/Audio/ISoundInputStream.h"
    4#include "AUI/Url/AUrl.h"
    5
    6class ISeekableInputStream;
    7
   12class API_AUI_AUDIO AWavSoundStream: public ISoundInputStream {
   13public:
   14    explicit AWavSoundStream(aui::non_null<_unique<IInputStream>> stream);
   15
   16    AAudioFormat info() override;
   17
   18    size_t read(char* dst, size_t size) override;
   19
   20private:
   21    struct WavFileHeader {
   22        char    chunkID[4];
   23        int32_t chunkSize;
   24        char    format[4];
   25
   26        char    subchunk1ID[4];
   27        int32_t subchunk1Size;
   28        int16_t audioFormat;
   29        int16_t numChannels;
   30        int32_t sampleRate;
   31        int32_t byteRate;
   32        int16_t blockAlign;
   33        int16_t bitsPerSample;
   34
   35        char    subchunk2ID[4];
   36        int32_t subchunk2Size;
   37    };
   38
   39    static_assert(sizeof(WavFileHeader) == 44);
   40
   41    _unique<IInputStream> mStream;
   42    AOptional<AUrl> mUrl;
   43    WavFileHeader mHeader{};
   44    size_t mChunkReadPos = 0;
   45
   46    void readHeader();
   47};
Utility wrapper implementing the stack-allocated (fast) optional idiom.
Definition AOptional.h:33
AAudioFormat info() override
Get general info about sound stream.
size_t read(char *dst, size_t size) override
Reads up to size bytes from stream. Blocking (waiting for new data) is allowed.
Represents an input stream with updating reading position.
Definition ISeekableInputStream.h:27
Base interface for representing sound input streams of different formats.
Definition ISoundInputStream.h:15
Audio format descriptor.
Definition AAudioFormat.h:13
Definition values.h:109