一个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()
,和{
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
或{
要将自定义车辆类型与车辆类关联,Simulation
的vehicle_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
贡献
问题和拉请求是受欢迎的。在
- 项目
标签: