191 {
193 return false;
194 }
195
196 VorbisInfo info =
mDecoder.getInfo();
197 fl::i32 channels = info.channels > 0 ? info.channels : 1;
198
199
200 fl::i32 samplesDecoded =
mDecoder.getSamplesShortInterleaved(
201 channels,
204 );
205
206 if (samplesDecoded == 0) {
209 return false;
210 }
211
212
213 fl::u32 totalSamples =
mDecoder.getTotalSamples();
214 if (totalSamples > 0) {
215 fl::u32 currentSample =
mDecoder.getSampleOffset();
217 }
218
219
220 if (channels == 2) {
221 fl::vector<fl::i16> mono;
223 for (fl::i32 i = 0; i < samplesDecoded; ++i) {
226 mono.
push_back(
static_cast<fl::i16
>((left + right) / 2));
227 }
228 *outSample = audio::Sample(mono);
229 } else {
230 *outSample = audio::Sample(fl::span<const fl::i16>(
mPcmBuffer.data(), samplesDecoded));
231 }
232
233 return true;
234}
fl::vector< fl::u8 > mFileData
fl::vector< fl::i16 > mPcmBuffer
StbVorbisDecoder mDecoder
void reserve(fl::size n) FL_NOEXCEPT
void push_back(const T &value) FL_NOEXCEPT