1515#include < audioapi/libs/ffmpeg/FFmpegDecoding.h>
1616#endif
1717
18+ #include < memory>
19+ #include < string>
20+ #include < vector>
21+
1822namespace audioapi {
1923
2024// Decoding audio in fixed-size chunks because total frame count can't be
2125// determined in advance. Note: ma_decoder_get_length_in_pcm_frames() always
2226// returns 0 for Vorbis decoders.
23- std::vector<float > AudioDecoder::readAllPcmFrames (
24- ma_decoder &decoder,
25- int outputChannels) {
27+ std::vector<float > AudioDecoder::readAllPcmFrames (ma_decoder &decoder, int outputChannels) {
2628 std::vector<float > buffer;
2729 std::vector<float > temp (CHUNK_SIZE * outputChannels);
2830 ma_uint64 outFramesRead = 0 ;
2931
3032#ifndef AUDIO_API_TEST_SUITE
3133 while (true ) {
3234 ma_uint64 tempFramesDecoded = 0 ;
33- ma_decoder_read_pcm_frames (
34- &decoder, temp.data (), CHUNK_SIZE, &tempFramesDecoded);
35+ ma_decoder_read_pcm_frames (&decoder, temp.data (), CHUNK_SIZE, &tempFramesDecoded);
3536 if (tempFramesDecoded == 0 ) {
3637 break ;
3738 }
3839
39- buffer.insert (
40- buffer.end (),
41- temp.data (),
42- temp.data () + tempFramesDecoded * outputChannels);
40+ buffer.insert (buffer.end (), temp.data (), temp.data () + tempFramesDecoded * outputChannels);
4341 outFramesRead += tempFramesDecoded;
4442 }
4543
@@ -59,8 +57,7 @@ std::shared_ptr<AudioBuffer> AudioDecoder::makeAudioBufferFromFloatBuffer(
5957 }
6058
6159 auto outputFrames = buffer.size () / outputChannels;
62- auto audioBus = std::make_shared<AudioBus>(
63- outputFrames, outputChannels, outputSampleRate);
60+ auto audioBus = std::make_shared<AudioBus>(outputFrames, outputChannels, outputSampleRate);
6461
6562 for (int ch = 0 ; ch < outputChannels; ++ch) {
6663 auto channelData = audioBus->getChannel (ch)->getData ();
@@ -76,27 +73,21 @@ std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithFilePath(
7673 float sampleRate) {
7774#ifndef AUDIO_API_TEST_SUITE
7875 if (AudioDecoder::pathHasExtension (path, {" .mp4" , " .m4a" , " .aac" })) {
79- auto buffer =
80- ffmpegdecoder::decodeWithFilePath (path, static_cast <int >(sampleRate));
76+ auto buffer = ffmpegdecoder::decodeWithFilePath (path, static_cast <int >(sampleRate));
8177 if (buffer == nullptr ) {
8278 __android_log_print (
83- ANDROID_LOG_ERROR,
84- " AudioDecoder" ,
85- " Failed to decode with FFmpeg: %s" ,
86- path.c_str ());
79+ ANDROID_LOG_ERROR, " AudioDecoder" , " Failed to decode with FFmpeg: %s" , path.c_str ());
8780 return nullptr ;
8881 }
8982 return buffer;
9083 }
9184 ma_decoder decoder;
92- ma_decoder_config config =
93- ma_decoder_config_init (ma_format_f32, 0 , static_cast <int >(sampleRate));
85+ ma_decoder_config config = ma_decoder_config_init (ma_format_f32, 0 , static_cast <int >(sampleRate));
9486 ma_decoding_backend_vtable *customBackends[] = {
9587 ma_decoding_backend_libvorbis, ma_decoding_backend_libopus};
9688
9789 config.ppCustomBackendVTables = customBackends;
98- config.customBackendCount =
99- sizeof (customBackends) / sizeof (customBackends[0 ]);
90+ config.customBackendCount = sizeof (customBackends) / sizeof (customBackends[0 ]);
10091
10192 if (ma_decoder_init_file (path.c_str (), &config, &decoder) != MA_SUCCESS) {
10293 __android_log_print (
@@ -113,46 +104,36 @@ std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithFilePath(
113104
114105 std::vector<float > buffer = readAllPcmFrames (decoder, outputChannels);
115106 ma_decoder_uninit (&decoder);
116- return makeAudioBufferFromFloatBuffer (
117- buffer, outputSampleRate, outputChannels);
107+ return makeAudioBufferFromFloatBuffer (buffer, outputSampleRate, outputChannels);
118108#else
119109 return nullptr ;
120110#endif
121111}
122112
123- std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithMemoryBlock (
124- const void *data,
125- size_t size,
126- float sampleRate) {
113+ std::shared_ptr<AudioBuffer>
114+ AudioDecoder::decodeWithMemoryBlock (const void *data, size_t size, float sampleRate) {
127115#ifndef AUDIO_API_TEST_SUITE
128116 const AudioFormat format = AudioDecoder::detectAudioFormat (data, size);
129- if (format == AudioFormat::MP4 || format == AudioFormat::M4A ||
130- format == AudioFormat::AAC) {
131- auto buffer = ffmpegdecoder::decodeWithMemoryBlock (
132- data, size, static_cast <int >(sampleRate));
117+ if (format == AudioFormat::MP4 || format == AudioFormat::M4A || format == AudioFormat::AAC) {
118+ auto buffer = ffmpegdecoder::decodeWithMemoryBlock (data, size, static_cast <int >(sampleRate));
133119 if (buffer == nullptr ) {
134- __android_log_print (
135- ANDROID_LOG_ERROR, " AudioDecoder" , " Failed to decode with FFmpeg" );
120+ __android_log_print (ANDROID_LOG_ERROR, " AudioDecoder" , " Failed to decode with FFmpeg" );
136121 return nullptr ;
137122 }
138123 return buffer;
139124 }
140125 ma_decoder decoder;
141- ma_decoder_config config =
142- ma_decoder_config_init (ma_format_f32, 0 , static_cast <int >(sampleRate));
126+ ma_decoder_config config = ma_decoder_config_init (ma_format_f32, 0 , static_cast <int >(sampleRate));
143127
144128 ma_decoding_backend_vtable *customBackends[] = {
145129 ma_decoding_backend_libvorbis, ma_decoding_backend_libopus};
146130
147131 config.ppCustomBackendVTables = customBackends;
148- config.customBackendCount =
149- sizeof (customBackends) / sizeof (customBackends[0 ]);
132+ config.customBackendCount = sizeof (customBackends) / sizeof (customBackends[0 ]);
150133
151134 if (ma_decoder_init_memory (data, size, &config, &decoder) != MA_SUCCESS) {
152135 __android_log_print (
153- ANDROID_LOG_ERROR,
154- " AudioDecoder" ,
155- " Failed to initialize decoder for memory block" );
136+ ANDROID_LOG_ERROR, " AudioDecoder" , " Failed to initialize decoder for memory block" );
156137 ma_decoder_uninit (&decoder);
157138 return nullptr ;
158139 }
@@ -162,8 +143,7 @@ std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithMemoryBlock(
162143
163144 std::vector<float > buffer = readAllPcmFrames (decoder, outputChannels);
164145 ma_decoder_uninit (&decoder);
165- return makeAudioBufferFromFloatBuffer (
166- buffer, outputSampleRate, outputChannels);
146+ return makeAudioBufferFromFloatBuffer (buffer, outputSampleRate, outputChannels);
167147#else
168148 return nullptr ;
169149#endif
@@ -176,11 +156,9 @@ std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithPCMInBase64(
176156 bool interleaved) {
177157 auto decodedData = base64_decode (data, false );
178158 const auto uint8Data = reinterpret_cast <uint8_t *>(decodedData.data ());
179- size_t numFramesDecoded =
180- decodedData.size () / (inputChannelCount * sizeof (int16_t ));
159+ size_t numFramesDecoded = decodedData.size () / (inputChannelCount * sizeof (int16_t ));
181160
182- auto audioBus = std::make_shared<AudioBus>(
183- numFramesDecoded, inputChannelCount, inputSampleRate);
161+ auto audioBus = std::make_shared<AudioBus>(numFramesDecoded, inputChannelCount, inputSampleRate);
184162
185163 for (int ch = 0 ; ch < inputChannelCount; ++ch) {
186164 auto channelData = audioBus->getChannel (ch)->getData ();
0 commit comments