查看: 1621|回复: 5

求助关于osgAudio中如何实现声音大小根据声源与相机(listener)之间的距离而改变!

[复制链接]

该用户从未签到

发表于 2013-2-25 18:53:30 | 显示全部楼层 |阅读模式
如题:
    我想在场景中加入各种各样的鸟叫声以及瀑布等水的声音!每一种鸟叫声的声源位置是设置好了的!想法就是将某个声源绑定在一个特定的位置,当相机隔那个声源位置很远的时候是听不到声音的,当场景中的人物走到离声源位置很近的地方,也就是说相机隔声源靠近的时候,可以感觉这个声源的声音慢慢增大! 我在SoundState这个类中发现了setPosition这个函数,但是奇怪的是,不论我怎么设置这个坐标,声源依旧是处于某一个特定的地方,不知道那个位置是自动默认的还是??
我的程序中关于声音的设置代码如下:
     // Create a new filestream that streams samples from a ogg-file.
        osgAudio::FileStream *musicStream = new osgAudio::FileStream(file);

        SoundState *musicSoundState  = new SoundState("music");
        // Associate the stream with the sound state
        musicSoundState->setStream( musicStream );

        // Create a named sound state.
        //osg::ref_ptr<osgAudio::SoundState> sound_state = new osgAudio::SoundState("glider");

        //// Let the soundstate use the sample we just created
        //sound_state->setSample(sample);

        // Set its gain (volume) to 0.9
        musicSoundState->setGain(0.9f);

        // Set its pitch to 1 (normal speed)
        musicSoundState->setPitch(1);

        // Make it play
        musicSoundState->setPlay(true);

        // The sound should loop over and over again
        musicSoundState->setLooping(true);

        musicSoundState->setAmbient(true);//设置声音是否衰减
       
        musicSoundState->setRelative(false);//设置声音是否始终相对于listener

        musicSoundState->setPosition(SOUND_POSITION);//SOUND_POSITION
                                                                                               //==osg::Vec3(-129.759f,-270.086f,17.6714f));

        // Allocate a hardware soundsource to this soundstate (priority 10)
        musicSoundState->allocateSource(10, false);

        // At 70 the gain will be half of full!
        musicSoundState->setReferenceDistance(70);
        musicSoundState->setRolloffFactor(4);
        musicSoundState->apply();

        // Add the soundstate to the sound manager, so we can find it later on if we want to
        osgAudio::SoundManager::instance()->addSoundState(musicSoundState);

目前主要的目的是想知道声源的位置是否可以设定,只有当相机靠近这个声源的时候才能听得到!如果可以设置的话,应该怎么设置??它的位置是世界坐标还是???还望各位指点一二!谢谢!

该用户从未签到

 楼主| 发表于 2013-2-27 09:02:41 | 显示全部楼层
问题没解决,别沉!!!!!

该用户从未签到

发表于 2013-3-4 14:20:57 | 显示全部楼层
我印象中osgAudio是包含了这样的例子的,我个人并没有太多声音处理的需求,因此并没有更多研究

该用户从未签到

 楼主| 发表于 2013-3-4 19:41:31 | 显示全部楼层
array 发表于 2013-3-4 14:20
我印象中osgAudio是包含了这样的例子的,我个人并没有太多声音处理的需求,因此并没有更多研究

谢谢锐哥,已经搞定了!

该用户从未签到

发表于 2013-12-9 10:32:59 | 显示全部楼层
buptronin 发表于 2013-3-4 19:41
谢谢锐哥,已经搞定了!

求解决方法?

该用户从未签到

 楼主| 发表于 2013-12-12 11:20:43 | 显示全部楼层

我不知道你需要什么样的功能,因为好长时间的帖子了,具体细节忘了,你可以说一下功能或者目前遇到的问题,我查查代码看看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表