Polyphase Game Engine
Loading...
Searching...
No Matches
SoundWave.h
Go to the documentation of this file.
1#pragma once
2
3#include "Asset.h"
4
6{
7public:
8
10
11 SoundWave();
12 ~SoundWave();
13
14 virtual void LoadStream(Stream& stream, Platform platform) override;
15 virtual void SaveStream(Stream& stream, Platform platform) override;
16 virtual void Create() override;
17 virtual void Destroy() override;
18 virtual bool Import(const std::string& path, ImportOptions* options) override;
19 virtual void GatherProperties(std::vector<Property>& outProps) override;
20 virtual glm::vec4 GetTypeColor() override;
21 virtual const char* GetTypeName() override;
22 virtual const char* GetTypeImportExt() override;
23
24 void SetPcmData(uint8_t* data, uint32_t size, uint32_t numSamples, uint32_t bitsPerSample, uint32_t numChannels, uint32_t sampleRate);
25
26 // Decode an in-memory WAV (or OGG, when AUD_DecodeVorbis is available)
27 // buffer into `out` and Create() it. Format detected via magic bytes:
28 // RIFF/WAVE for WAV, "OggS" for OGG. Pass formatHint = "wav"/"ogg" to
29 // skip detection. Runtime-safe.
30 static bool LoadFromMemory(const uint8_t* data, size_t size, const char* formatHint, SoundWave& out);
31
32 void SetVolumeMultiplier(float volume);
33 float GetVolumeMultiplier() const;
34
35 void SetPitchMultiplier(float pitch);
36 float GetPitchMultiplier() const;
37
38 void SetAudioClass(int8_t audioClass);
39 int8_t GetAudioClass() const;
40
41 uint8_t* GetWaveData() const;
42 uint32_t GetWaveDataSize() const;
43
44 // Streaming (long BGM): when set, LoadStream does NOT decode the whole PCM into
45 // RAM. Instead it records where the PCM lives in the .oct so AudioManager can
46 // stream it from disk in chunks. GetWaveData() returns nullptr for these.
47 bool IsStreaming() const { return mStreaming; }
48 uint64_t GetStreamPcmOffset() const { return mStreamPcmOffset; }
49 uint32_t GetStreamPcmSize() const { return mStreamPcmSize; }
50
51 uint32_t GetNumChannels() const;
52 uint32_t GetBitsPerSample() const;
53 uint32_t GetSampleRate() const;
54 uint32_t GetNumSamples() const;
55 uint32_t GetBlockAlign() const;
56 uint32_t GetByteRate() const;
57
58 float GetDuration() const;
59
60protected:
61
62 static bool HandlePropChange(Datum* datum, uint32_t index, const void* newValue);
63
64 uint8_t* mWaveData = nullptr;
65 uint32_t mWaveDataSize = 0;
66
67 uint8_t* mCompressedData = nullptr;
68 uint32_t mCompressedSize = 0;
69
70 // Properties
71 float mVolumeMultiplier = 1.0f;
72 float mPitchMultiplier = 1.0f;
73 int8_t mAudioClass = 0;
74 bool mCompress = false;
75 bool mCompressInternal = false;
76 bool mStreaming = false;
77
78 // Streaming metadata (valid when mStreaming): where the raw PCM lives in the
79 // .oct file, so it can be re-opened and read in chunks instead of resident.
80 uint64_t mStreamPcmOffset = 0;
81 uint32_t mStreamPcmSize = 0;
82
83 // Soundwave Format
84 uint32_t mNumChannels = 1;
85 uint32_t mBitsPerSample = 8;
86 uint32_t mSampleRate = 22050;
87 uint32_t mNumSamples = 0;
88 uint32_t mBlockAlign = 0;
89 uint32_t mByteRate = 0;
90};
Platform
Definition EngineTypes.h:32
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Definition Asset.h:120
virtual bool Import(const std::string &path, ImportOptions *options=nullptr)
Definition Asset.cpp:342
virtual void Create()
Definition Asset.cpp:78
virtual void SaveStream(Stream &stream, Platform platform)
Definition Asset.cpp:334
virtual glm::vec4 GetTypeColor()
Definition Asset.cpp:352
virtual const char * GetTypeImportExt()
Definition Asset.cpp:362
virtual const char * GetTypeName()
Definition Asset.cpp:357
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition Asset.cpp:347
virtual void LoadStream(Stream &stream, Platform platform)
Definition Asset.cpp:320
virtual void Destroy()
Definition Asset.cpp:93
Definition Datum.h:169
Definition Asset.h:109
Definition SoundWave.h:6
bool IsStreaming() const
Definition SoundWave.h:47
uint32_t GetStreamPcmSize() const
Definition SoundWave.h:49
uint64_t GetStreamPcmOffset() const
Definition SoundWave.h:48
DECLARE_ASSET(SoundWave, Asset)
Definition Stream.h:21