Right parameters for 3D Audio

Hey,
you mean setting the min distance for the used sound to 1? Because the AudioManager doent have a function set_3d_min_diestance()
I applied it to the sound i’m using but it had no effect.

Here’s my full code if it is helpful:

#include "pandaFramework.h"
#include "pandaSystem.h"
 
#include "genericAsyncTask.h"
#include "asyncTaskManager.h"
 
#include "cIntervalManager.h"
#include "cLerpNodePathInterval.h"
#include "cMetaInterval.h"

#include "audiomanager.h"
#include "audiosound.h"
 
// Global stuff
PandaFramework framework;
PT(AsyncTaskManager) taskMgr = AsyncTaskManager::get_global_ptr(); 
PT(ClockObject) globalClock = ClockObject::get_global_clock();
NodePath camera;
PT(AudioManager) AM = AudioManager::create_AudioManager();
  PT(AudioSound) bgsound;
   NodePath pandaActor;
 
// Task to move the camera
AsyncTask::DoneStatus SpinCameraTask(GenericAsyncTask* task, void* data) {
  double time = globalClock->get_real_time();
  double angledegrees = time * 6.0;
  double angleradians = angledegrees * (3.14 / 180.0);
  camera.set_pos(20*sin(angleradians),-20.0*cos(angleradians),3);
  camera.set_hpr(angledegrees, 0, 0);
  //camera.look_at(pandaActor);
  return AsyncTask::DS_cont;
}
AsyncTask::DoneStatus ContSoundTask(GenericAsyncTask* task, void* data){
	//My second attempt
	LPoint3f pandapos = pandaActor.get_pos();
	bgsound->set_3d_attributes(pandapos.get_x(),pandapos.get_y(),pandapos.get_z(),0,0,0);
	LPoint3f camerapos = camera.get_pos();
	AM->audio_3d_set_listener_attributes(camerapos.get_x(),camerapos.get_y(),camerapos.get_z(),
										0,0,0,
										pandapos.get_x(), pandapos.get_y(), pandapos.get_z(),
										0,0,1);



/*	// My first attempt
	LVecBase3f view = camera.get_hpr();
	AM->audio_3d_set_listener_attributes(camera.get_x(),camera.get_y(), camera.get_z(),
										0,0,0, 
										view.get_x(), view.get_y(), view.get_z(), 
										0,0,1);
	// tah's attempt
	 LMatrix4f mat = camera.get_mat(); 
	 LVecBase3f lv = mat.get_row3(1); 
	 LVecBase3f uv = mat.get_row3(2); 
	 LVecBase3f pos = mat.get_row3(3); 
	 AM->audio_3d_set_listener_attributes(pos.get_x(),pos.get_y(),pos.get_z(),
										0,0,0, 
		                                   lv.get_x(),lv.get_y(),lv.get_z(), 
			                                uv.get_x(),uv.get_y(),uv.get_z()); 
	*/
	AM->update();

 return AsyncTask::DS_cont;
}	
 
int main(int argc, char *argv[]) {
  // Open a new window framework and set the title
  framework.open_framework(argc, argv);
  framework.set_window_title("My Panda3D Window");
 
  // Open the window
  WindowFramework *window = framework.open_window();
  camera = window->get_camera_group(); // Get the camera and store it

  //Sound
  bgsound = AM->get_sound("KirbyMono.mp3");
 bgsound->set_3d_min_distance(1);
 // AM->set_3d_min_distance(1.); doesnt exist
  bgsound->set_loop(true);
  bgsound->play();
 
  // Load the environment model
  NodePath environ = window->load_model(framework.get_models(),
    "models/environment");
  environ.reparent_to(window->get_render());
  environ.set_scale(0.25 , 0.25, 0.25);
  environ.set_pos(-8, 42, 0);
 
  // Load our panda
  pandaActor = window->load_model(framework.get_models(),
    "panda-model");
  pandaActor.set_scale(0.005);
  pandaActor.reparent_to(window->get_render());
 
  // Load the walk animation
  window->load_model(pandaActor, "panda-walk4");
  window->loop_animations(0);
 
  // Create the lerp intervals needed to walk back and forth
  PT(CLerpNodePathInterval) pandaPosInterval1, pandaPosInterval2,
    pandaHprInterval1, pandaHprInterval2;
  pandaPosInterval1 = new CLerpNodePathInterval("pandaPosInterval1",
    13.0, CLerpInterval::BT_no_blend,
    true, false, pandaActor, NodePath());
  pandaPosInterval1->set_start_pos(LPoint3f(0, 10, 0));
  pandaPosInterval1->set_end_pos(LPoint3f(0, -10, 0));
 
  pandaPosInterval2 = new CLerpNodePathInterval("pandaPosInterval2",
    13.0, CLerpInterval::BT_no_blend,
    true, false, pandaActor, NodePath());
  pandaPosInterval2->set_start_pos(LPoint3f(0, -10, 0));
  pandaPosInterval2->set_end_pos(LPoint3f(0, 10, 0));
 
  pandaHprInterval1 = new CLerpNodePathInterval("pandaHprInterval1", 3.0,
    CLerpInterval::BT_no_blend,
    true, false, pandaActor, NodePath());
  pandaHprInterval1->set_start_hpr(LPoint3f(0, 0, 0));
  pandaHprInterval1->set_end_hpr(LPoint3f(180, 0, 0));
 
  pandaHprInterval2 = new CLerpNodePathInterval("pandaHprInterval2", 3.0,
    CLerpInterval::BT_no_blend,
    true, false, pandaActor, NodePath());
  pandaHprInterval2->set_start_hpr(LPoint3f(180, 0, 0));
  pandaHprInterval2->set_end_hpr(LPoint3f(0, 0, 0));
 
  // Create and play the sequence that coordinates the intervals
  PT(CMetaInterval) pandaPace;
  pandaPace = new CMetaInterval("pandaPace");
  pandaPace->add_c_interval(pandaPosInterval1, 0,
    CMetaInterval::RS_previous_end);
  pandaPace->add_c_interval(pandaHprInterval1, 0,
    CMetaInterval::RS_previous_end);
  pandaPace->add_c_interval(pandaPosInterval2, 0,
    CMetaInterval::RS_previous_end);
  pandaPace->add_c_interval(pandaHprInterval2, 0,
    CMetaInterval::RS_previous_end);
  pandaPace->loop();
 
  // Add our task.
  taskMgr->add(new GenericAsyncTask("Spins the camera",
    &SpinCameraTask, (void*) NULL));
  taskMgr->add(new GenericAsyncTask("Continues Sound", &ContSoundTask, (void*) NULL));
 
  // This is a simpler way to do stuff every frame,
  // if you're too lazy to create a task.
  Thread *current_thread = Thread::get_current_thread();
  while(framework.do_frame(current_thread)) {
    // Step the interval manager
    CIntervalManager::get_global_ptr()->step();
  }
 
  framework.close_framework();
  return (0);
}