/** * @author JoSch * @date 03-11-2005 */ void SoundObject::_update() { ActorControlledObject::_update(); SoundChannel *channel = getSoundChannel(); Actor *actor = getActor(); if (!channel || !actor) // Einer ist Null { return; } if (!channel->isValid()) { return; } channel->setPosition(actor->getPosition()); Vector3 *temp1 = new Vector3(); Vector3 *temp2 = new Vector3(actor->getPosition()); Real length = temp2->normalise(); actor->getOrientation().ToAxes(temp1); *temp1 += *temp2; *temp1 *= length; channel->setDirection(*temp1); }
void test_playWith3D() { xtime xt; Ogre::ResourceManager::ResourceMapIterator it = SoundManager::getSingleton().getResourceIterator(); while (it.hasMoreElements()) { SoundResourcePtr soundres = it.getNext(); SoundStream *sound = new SoundStream(soundres); SoundChannel *channel = new SoundChannel(sound, soundres->getName()); if (channel) { channel->play(); float angle = 0.0f; xtime_get(&xt, TIME_UTC); xt.sec++; thread::sleep(xt); while (channel->isPlaying()) { xtime_get(&xt, TIME_UTC); xt.nsec+=100000; thread::sleep(xt); Vector3 pos(1.0f*sinf(angle), 20.0f*cosf(angle), 0.0f); channel->setPosition(pos); angle += 0.005; if (angle > 2 * M_PI) { angle = 0.0f; } FSOUND_Update(); } delete channel; } } }