MCPcopy Create free account
hub / github.com/axmolengine/axmol / readDataTask

Method readDataTask

core/audio/AudioCache.cpp:111–328  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

109}
110
111void AudioCache::readDataTask(unsigned int selfId)
112{
113 // Note: It's in sub thread
114 AXLOGV("readDataTask begin, cache id={}", selfId);
115
116 _readDataTaskMutex.lock();
117 _state = State::LOADING;
118
119 AudioDecoder* decoder = AudioDecoderManager::createDecoder(_fileFullPath);
120 do
121 {
122 if (decoder == nullptr || !decoder->open(_fileFullPath))
123 break;
124
125 const uint32_t originalTotalFrames = decoder->getTotalFrames();
126 const uint32_t sampleRate = decoder->getSampleRate();
127 const uint32_t channelCount = decoder->getChannelCount();
128 const auto sourceFormat = decoder->getSourceFormat();
129
130 uint32_t totalFrames = originalTotalFrames;
131 uint32_t dataSize = decoder->framesToBytes(totalFrames);
132 uint32_t remainingFrames = totalFrames;
133
134 switch (sourceFormat)
135 {
136 case AUDIO_SOURCE_FORMAT::PCM_16:
137 _format = channelCount > 1 ? AL_FORMAT_STEREO16 : AL_FORMAT_MONO16; // bits depth: 16bits
138 break;
139 case AUDIO_SOURCE_FORMAT::PCM_U8:
140 _format = channelCount > 1 ? AL_FORMAT_STEREO8 : AL_FORMAT_MONO8; // bits depth: 8bits
141 break;
142#if AX_USE_ALSOFT
143 case AUDIO_SOURCE_FORMAT::PCM_FLT32:
144 _format = channelCount > 1 ? AL_FORMAT_STEREO_FLOAT32 : AL_FORMAT_MONO_FLOAT32;
145 break;
146 case AUDIO_SOURCE_FORMAT::PCM_FLT64:
147 _format = channelCount > 1 ? AL_FORMAT_STEREO_DOUBLE_EXT : AL_FORMAT_MONO_DOUBLE_EXT;
148 break;
149 case AUDIO_SOURCE_FORMAT::MULAW:
150 _format = channelCount > 1 ? AL_FORMAT_STEREO_MULAW : AL_FORMAT_MONO_MULAW;
151 break;
152 case AUDIO_SOURCE_FORMAT::ALAW:
153 _format = channelCount > 1 ? AL_FORMAT_STEREO_ALAW_EXT : AL_FORMAT_MONO_ALAW_EXT;
154 break;
155 case AUDIO_SOURCE_FORMAT::ADPCM:
156 _format = channelCount > 1 ? AL_FORMAT_STEREO_MSADPCM_SOFT : AL_FORMAT_MONO_MSADPCM_SOFT;
157 break;
158 case AUDIO_SOURCE_FORMAT::IMA_ADPCM:
159 _format = channelCount > 1 ? AL_FORMAT_STEREO_IMA4 : AL_FORMAT_MONO_IMA4;
160 break;
161#endif
162 default:
163 assert(false);
164 }
165
166 _sampleRate = (ALsizei)sampleRate;
167 _duration = 1.0f * totalFrames / sampleRate;
168 _totalFrames = totalFrames;

Callers 1

preloadMethod · 0.80

Calls 15

alGetErrorFunction · 0.85
alBufferDataFunction · 0.85
getTotalFramesMethod · 0.80
getSampleRateMethod · 0.80
getChannelCountMethod · 0.80
getSourceFormatMethod · 0.80
readFixedFramesMethod · 0.80
getSamplesPerBlockMethod · 0.80
minFunction · 0.50
freeFunction · 0.50
lockMethod · 0.45
openMethod · 0.45

Tested by

no test coverage detected