| 294 | } |
| 295 | |
| 296 | void PannerNode::setPanningModel(PanningModel model) |
| 297 | { |
| 298 | if (model != PanningModel::EQUALPOWER && model != PanningModel::HRTF) |
| 299 | throw std::invalid_argument("Unknown panning model specified"); |
| 300 | |
| 301 | ASSERT(m_sampleRate); |
| 302 | |
| 303 | PanningModel curr = static_cast<PanningModel>(m_panningModel->valueUint32()); |
| 304 | if (!m_panner.get() || model != curr) |
| 305 | { |
| 306 | m_panningModel->setUint32(static_cast<uint32_t>(model)); |
| 307 | |
| 308 | switch (model) |
| 309 | { |
| 310 | case PanningModel::EQUALPOWER: |
| 311 | m_panner = std::unique_ptr<Panner>(new EqualPowerPanner(m_sampleRate)); |
| 312 | break; |
| 313 | case PanningModel::HRTF: |
| 314 | //m_panner = std::unique_ptr<Panner>(new HRTFPanner(m_sampleRate)); |
| 315 | m_panner.reset(nullptr); // release the old one |
| 316 | // @TODO setting the panner is not thread safe. |
| 317 | // all of this should be part of the processing graph pre-render step. |
| 318 | break; |
| 319 | default: |
| 320 | throw std::invalid_argument("invalid panning model"); |
| 321 | } |
| 322 | } |
| 323 | } |
| 324 | |
| 325 | void PannerNode::setDistanceModel(DistanceModel model) |
| 326 | { |
no test coverage detected