一个python库,用于向相扑交通模拟添加3D声音。

SumoSound的Python项目详细描述


苏美索德

SumoSound是一个Python包,它使用Sumo的traciapi和PyOpenAL来生成 三维环境中的车辆声音。PyOpenAL计算出合适的容积,多普勒 移位,立体声(或环绕声)输出。该软件包带有一些内置的 默认音效,但完全可自定义,并且可以从 一个静止的自我位置或一个交通工具的观点 模拟。在

安装

SumoSound可以使用pip安装:

pip install SumoSound

或者,您可以简单地克隆GitHub存储库并将其添加到Python路径中。在

然后可以导入库。在

^{pr2}$

依赖性

  • 相扑
  • 卵裂的

使用

有关示例,请参见示例脚本sound_test.py。在

通常,您只需要定义一个Ego对象(可以是Ego类或 子类),将这个Ego对象传递给Simulation对象,然后调用 update()Simulation对象执行一次模拟步骤。其他的一切 应该自动处理。在

文件

自我

一个Ego对象定义侦听器的位置、速度和方向。 有三种自我类型:静止的自我,自我车辆和手动计算速度的自我车辆。在

静止自我(Ego

静止自我的位置、速度和方向是通过set_position()来控制的, set_velocity(),和{}。小我将默认为(0,0,0)朝东的位置 零速度。在

ego=SumoSound.Ego()

Ego车辆(EgoVehicle

ego车辆的位置、速度和方向通过TraCI与具有给定ID的车辆同步。 这些属性在Simulation对象的每个时间步自动更新。在

ego=SumoSound.EgoVehicle("vehicleID")

具有手动计算速度的Ego车辆(EgoVehicleManualSpeed

EgoVehicle相同,但车速是根据前面和 当前模拟时间点。这是有用的,如果ego车辆是外部控制和速度属性 不正确或未定义。在

ego=SumoSound.EgoVehicleManualSpeed("vehicleID")

模拟

一个Simulation对象通过TraCI跟踪相扑模拟中的所有车辆,更新声音 源和侦听器位置(如有必要)。ego必须传递给Simulation对象的构造函数。在

simulation=SumoSound.Simulation(ego)

其他参数也可用。最值得注意的是,参数vehicle_class_map可以用来说明 SumoSound用于每个相扑车辆类的Vehicle的子类。默认情况下,dict DEFAULT_VEHICLE_CLASS_MAP被使用。有关定义自定义车辆类型的详细信息,请参阅下一节。在

方法update()必须在每个模拟步骤中调用。在

whileTrue:traci.simulationStep()simulation.update()

车辆

一个Vehicle对象跟踪与车辆类型相关的一个或多个声源。SumoSound配有 由Simulation对象基于相扑自动选择的预定义车辆类型的数量 每辆车的车辆等级属性。只需对Vehicle进行子分类,就可以创建自定义车辆类型 班级。每个车辆声音的增益可由信号自动驱动。默认情况下,速度和加速度 车辆的可用作信号,但也可以创建自定义信号。在

classCustomVehicle(SumoSound.Vehicle):def__init__(self,id,engine_sound_file="path/to/file.wav",tire_sound_file="path/to/file.wav",horn_sound_file="path/to/file.wav"):super().__init__(id)self.horn=False# define a custom signal called "horn"# add an engine sound to the vehicle, actuated by the vehicle accelerationengine_sound=SumoSound.VehicleSound(engine_sound_file,base_gain=0.5)self.add_sound(engine_sound,"acceleration",response_curve=[(0,0.5),(2.5,1)])# add a tire sound to the vehicle, actuated by the vehicle speedtire_sound=SumoSound.VehicleSound(tire_sound_file,base_gain=2)self.add_sound(tire_sound,"speed",response_curve=[(0,0),(28,1)])# add a horn sound to the vehicle, actuated by the custom signal "horn"horn_sound=SumoSound.VehicleSound(horn_sound_file,base_gain=2)self.add_sound(horn_sound,"horn",response_curve=[(False,0),(True,1)])

方法add_sound()的参数response_curve可以使用签名进行调用 fun(signal_value) -> gain或{}元组的列表,这些元组根据需要进行插值 根据信号值计算声音增益。在

要将自定义车辆类型与车辆类关联,Simulationvehicle_class_map参数 必须向构造函数传递包含所需映射的自定义dict,否则可以在之前修改默认dict 创建仿真对象。在

# map the custom vehicle type to the Sumo vehicleClass "passenger"SumoSound.DEFAULT_VEHICLE_CLASS_MAP["passenger"]=CustomVehiclesimulation=SumoSound.Simulation(ego)

为了使用自定义信号来激活声音,只需将信号设置为所需的值,然后兴会 下次更新仿真时自动处理。在

simulation.vehicles["vehicleID"].horn=True

贡献

问题和拉请求是受欢迎的。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
带验证的java JavaScript链接生成器   java休眠外键而不是实体   使用正则表达式在java中分隔字符串的数组   爪哇/sdk/platformtools/adb,startserver失败   可以使用java URL连接通过Id获取html   java使用Maven构建类路径失败   java GUI最初未显示(netbeans)   java无法解析:com。安卓支持:supportv4:26.0.2   swing覆盖Java DefaultStyledDocument实现   JAVAlang.IllegalState异常LifeCycleCProcessor和ApplicationEventMulticaster在使用Spring引导时未初始化   JAXB Websphere jar与applicationl jar的java ClassCastException   继承获取父子类java的不兼容错误