#ifndef _XAS_SPATIAL_H #define _XAS_SPATIAL_H #include #define XAS_SPATIAL_DEFAULT_OBSERVER_WIDTH 0.18f #define XAS_SPATIAL_DEFAULT_SPEED 343.0f /* m/s */ typedef struct _xas_spatial_coord { float x, y, z; } xas_spatial_coord; typedef struct _xas_spatial_rotation { float pitch, roll, yaw; } xas_spatial_rotation; typedef struct _xas_spatial_observer { xas_spatial_coord coord; xas_spatial_rotation rotation; float width; } xas_spatial_observer; typedef struct _xas_spatial_object xas_spatial_object; struct _xas_spatial_object { float x, y, z; xas_audio_stream *source; xas_spatial_object *next; }; typedef struct _xas_spatial_scene { xas_audio_format format; xas_spatial_observer observer; xas_spatial_coord speaker_l, speaker_r; float speed; xas_spatial_object *first, *last; void *buf; size_t buflen; } xas_spatial_scene; xas_spatial_scene *xas_spatial_scene_new(xas_audio_format format, xas_spatial_coord speaker_l, xas_spatial_coord speaker_r); void xas_spatial_scene_destroy(xas_spatial_scene *scene); int xas_spatial_scene_set_observer(xas_spatial_scene *scene, xas_spatial_coord coord, xas_spatial_rotation rotation, float width); void xas_spatial_scene_set_speaker_coords(xas_spatial_scene *scene, xas_spatial_coord speaker_l, xas_spatial_coord speaker_r); void xas_spatial_scene_set_speed(xas_spatial_scene *scene, float speed); xas_spatial_object *xas_spatial_scene_add_object(xas_spatial_coord coord, xas_audio_stream *source); void xas_spatial_object_get_coord(xas_spatial_object *object, xas_spatial_coord *coord); void xas_spatial_object_set_coord(xas_spatial_object *object, xas_spatial_coord coord); xas_audio_stream *xas_spatial_scene_new_stream(xas_spatial_scene *scene); #endif /* _XAS_SPATIAL_H */