| 171 | }; |
| 172 | |
| 173 | InitFlags lazyInit(UnityAudioEffectState* state, |
| 174 | int numChannelsIn, |
| 175 | int numChannelsOut) |
| 176 | { |
| 177 | assert(state); |
| 178 | |
| 179 | auto initFlags = INIT_NONE; |
| 180 | |
| 181 | if (!gContext) |
| 182 | return initFlags; |
| 183 | |
| 184 | if (!gHRTF[1]) |
| 185 | return initFlags; |
| 186 | |
| 187 | auto effect = state->GetEffectData<State>(); |
| 188 | if (!effect) |
| 189 | return initFlags; |
| 190 | |
| 191 | IPLAudioSettings audioSettings; |
| 192 | audioSettings.samplingRate = state->samplerate; |
| 193 | audioSettings.frameSize = state->dspbuffersize; |
| 194 | |
| 195 | auto status = IPL_STATUS_SUCCESS; |
| 196 | |
| 197 | if (numChannelsOut > 0) |
| 198 | { |
| 199 | if (!effect->panningEffect) |
| 200 | { |
| 201 | IPLPanningEffectSettings effectSettings{}; |
| 202 | effectSettings.speakerLayout = speakerLayoutForNumChannels(numChannelsOut); |
| 203 | |
| 204 | status = iplPanningEffectCreate(gContext, &audioSettings, &effectSettings, &effect->panningEffect); |
| 205 | } |
| 206 | |
| 207 | if (status == IPL_STATUS_SUCCESS) |
| 208 | { |
| 209 | if (!effect->binauralEffect) |
| 210 | { |
| 211 | IPLBinauralEffectSettings effectSettings; |
| 212 | effectSettings.hrtf = gHRTF[1]; |
| 213 | |
| 214 | status = iplBinauralEffectCreate(gContext, &audioSettings, &effectSettings, &effect->binauralEffect); |
| 215 | } |
| 216 | } |
| 217 | |
| 218 | if (status == IPL_STATUS_SUCCESS) |
| 219 | initFlags = static_cast<InitFlags>(initFlags | INIT_BINAURALEFFECT); |
| 220 | } |
| 221 | |
| 222 | if (numChannelsIn > 0) |
| 223 | { |
| 224 | status = IPL_STATUS_SUCCESS; |
| 225 | if (!effect->directEffect) |
| 226 | { |
| 227 | IPLDirectEffectSettings effectSettings; |
| 228 | effectSettings.numChannels = numChannelsIn; |
| 229 | |
| 230 | status = iplDirectEffectCreate(gContext, &audioSettings, &effectSettings, &effect->directEffect); |
no test coverage detected