Polyphase Game Engine
Loading...
Searching...
No Matches
AudioAnalysis.h
Go to the documentation of this file.
1#pragma once
2
3#include <stdint.h>
4
5#include "Constants.h"
6#include "AudioConstants.h"
7
8namespace AudioAnalysis
9{
10 static constexpr uint32_t kFftSize = AUDIO_FFT_SIZE;
11 static constexpr uint32_t kSpectrumLen = kFftSize / 2;
12 static constexpr uint32_t kMaxStreams = AUDIO_ANALYSIS_MAX_STREAMS;
13
14 // PCM view handed to the analysis routines. The caller fills this and
15 // hands it in; we never own the data.
16 struct PcmView
17 {
18 const uint8_t* mData = nullptr; // raw interleaved PCM
19 uint32_t mSampleRate = 0;
20 uint32_t mNumChannels = 1;
21 uint32_t mBitsPerSample = 16;
22 uint64_t mCursorFrame = 0; // current playback frame (samples-per-channel)
23 uint64_t mTotalFrames = 0;
24 bool mLoop = false;
25 uint32_t mCacheKey = 0; // unique per voice/stream — used by per-frame cache
26 };
27
28#if AUDIO_ANALYSIS_ENABLED
29
30 float ComputeRMS (const PcmView& view);
31 float ComputeLoudnessDb (float rms);
32 float ComputeLoudnessNormalized (float rms);
33 float ComputeBandMagnitude (const PcmView& view, float startHz, float endHz);
34 void ComputeSpectrum (const PcmView& view, float startHz, float endHz,
35 float* outBins, uint32_t numBins);
36
37 // Streaming voice ring buffers (shared platform-independent state).
38 // Backends call these from AUD_OpenStream / AUD_CloseStream / AUD_SubmitStreamBuffer.
39 void OnStreamOpened (uint32_t streamId, uint32_t sampleRate, uint32_t numChannels, uint32_t bitsPerSample);
40 void OnStreamClosed (uint32_t streamId);
41 void OnStreamSubmitted (uint32_t streamId, const uint8_t* data, uint32_t byteSize);
42 bool BuildStreamPcmView(uint32_t streamId, PcmView& outView);
43
44#else
45
46 inline float ComputeRMS (const PcmView&) { return 0.0f; }
47 inline float ComputeLoudnessDb (float) { return -60.0f; }
48 inline float ComputeLoudnessNormalized (float) { return 0.0f; }
49 inline float ComputeBandMagnitude (const PcmView&, float, float) { return 0.0f; }
50 inline void ComputeSpectrum (const PcmView&, float, float, float* outBins, uint32_t numBins)
51 {
52 if (outBins) { for (uint32_t i = 0; i < numBins; ++i) outBins[i] = 0.0f; }
53 }
54 inline void OnStreamOpened (uint32_t, uint32_t, uint32_t, uint32_t) {}
55 inline void OnStreamClosed (uint32_t) {}
56 inline void OnStreamSubmitted (uint32_t, const uint8_t*, uint32_t) {}
57 inline bool BuildStreamPcmView(uint32_t, PcmView&) { return false; }
58
59#endif // AUDIO_ANALYSIS_ENABLED
60}
#define AUDIO_ANALYSIS_MAX_STREAMS
Definition Constants.h:83
#define AUDIO_FFT_SIZE
Definition Constants.h:77
Definition AudioAnalysis.h:9
void OnStreamOpened(uint32_t, uint32_t, uint32_t, uint32_t)
Definition AudioAnalysis.h:54
void OnStreamClosed(uint32_t)
Definition AudioAnalysis.h:55
bool BuildStreamPcmView(uint32_t, PcmView &)
Definition AudioAnalysis.h:57
float ComputeLoudnessDb(float)
Definition AudioAnalysis.h:47
float ComputeRMS(const PcmView &)
Definition AudioAnalysis.h:46
void ComputeSpectrum(const PcmView &, float, float, float *outBins, uint32_t numBins)
Definition AudioAnalysis.h:50
void OnStreamSubmitted(uint32_t, const uint8_t *, uint32_t)
Definition AudioAnalysis.h:56
float ComputeLoudnessNormalized(float)
Definition AudioAnalysis.h:48
float ComputeBandMagnitude(const PcmView &, float, float)
Definition AudioAnalysis.h:49
Definition AudioAnalysis.h:17
uint32_t mBitsPerSample
Definition AudioAnalysis.h:21
uint64_t mCursorFrame
Definition AudioAnalysis.h:22
const uint8_t * mData
Definition AudioAnalysis.h:18
uint32_t mSampleRate
Definition AudioAnalysis.h:19
bool mLoop
Definition AudioAnalysis.h:24
uint32_t mNumChannels
Definition AudioAnalysis.h:20
uint32_t mCacheKey
Definition AudioAnalysis.h:25
uint64_t mTotalFrames
Definition AudioAnalysis.h:23