MCPcopy Create free account
hub / github.com/ObEngine/ObEngine / getAudio

Method getAudio

extlibs/soloud/src/core/soloud_bus.cpp:37–99  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

35 }
36
37 unsigned int BusInstance::getAudio(float *aBuffer, unsigned int aSamplesToRead, unsigned int aBufferSize)
38 {
39 int handle = mParent->mChannelHandle;
40 if (handle == 0)
41 {
42 // Avoid reuse of scratch data if this bus hasn't played anything yet
43 unsigned int i;
44 for (i = 0; i < aBufferSize * mChannels; i++)
45 aBuffer[i] = 0;
46 return aSamplesToRead;
47 }
48
49 Soloud *s = mParent->mSoloud;
50 if (s->mScratchNeeded != mScratchSize)
51 {
52 mScratchSize = s->mScratchNeeded;
53 mScratch.init(mScratchSize * MAX_CHANNELS);
54 }
55
56 s->mixBus(aBuffer, aSamplesToRead, aBufferSize, mScratch.mData, handle, mSamplerate, mChannels);
57
58 int i;
59 if (mParent->mFlags & AudioSource::VISUALIZATION_DATA)
60 {
61 for (i = 0; i < MAX_CHANNELS; i++)
62 mVisualizationChannelVolume[i] = 0;
63
64 if (aSamplesToRead > 255)
65 {
66 for (i = 0; i < 256; i++)
67 {
68 int j;
69 mVisualizationWaveData[i] = 0;
70 for (j = 0; j < (signed)mChannels; j++)
71 {
72 float sample = aBuffer[i + aBufferSize * j];
73 float absvol = (float)fabs(sample);
74 if (absvol > mVisualizationChannelVolume[j])
75 mVisualizationChannelVolume[j] = absvol;
76 mVisualizationWaveData[i] += sample;
77 }
78 }
79 }
80 else
81 {
82 // Very unlikely failsafe branch
83 for (i = 0; i < 256; i++)
84 {
85 int j;
86 mVisualizationWaveData[i] = 0;
87 for (j = 0; j < (signed)mChannels; j++)
88 {
89 float sample = aBuffer[(i % aSamplesToRead) + aBufferSize * j];
90 float absvol = (float)fabs(sample);
91 if (absvol > mVisualizationChannelVolume[j])
92 mVisualizationChannelVolume[j] = absvol;
93 mVisualizationWaveData[i] += sample;
94 }

Callers 1

mixBusMethod · 0.45

Calls 2

mixBusMethod · 0.80
initMethod · 0.45

Tested by

no test coverage detected