merge with trunk at r27259 and commit of a patch by anthony jones to fix msvc (though...
authorJoseph Eagar <joeedh@gmail.com>
Tue, 9 Mar 2010 04:32:40 +0000 (04:32 +0000)
committerJoseph Eagar <joeedh@gmail.com>
Tue, 9 Mar 2010 04:32:40 +0000 (04:32 +0000)
446 files changed:
SConstruct
config/win32-vc-config.py
intern/SoundSystem/CMakeLists.txt [new file with mode: 0644]
intern/SoundSystem/Makefile [new file with mode: 0644]
intern/SoundSystem/SConscript [new file with mode: 0644]
intern/SoundSystem/SND_C-api.h [new file with mode: 0644]
intern/SoundSystem/SND_CDObject.h [new file with mode: 0644]
intern/SoundSystem/SND_DependKludge.h [new file with mode: 0644]
intern/SoundSystem/SND_DeviceManager.h [new file with mode: 0644]
intern/SoundSystem/SND_IAudioDevice.h [new file with mode: 0644]
intern/SoundSystem/SND_Object.h [new file with mode: 0644]
intern/SoundSystem/SND_Scene.h [new file with mode: 0644]
intern/SoundSystem/SND_SoundListener.h [new file with mode: 0644]
intern/SoundSystem/SND_SoundObject.h [new file with mode: 0644]
intern/SoundSystem/SND_Utils.h [new file with mode: 0644]
intern/SoundSystem/SND_WaveCache.h [new file with mode: 0644]
intern/SoundSystem/SND_WaveSlot.h [new file with mode: 0644]
intern/SoundSystem/SND_test/Makefile [new file with mode: 0644]
intern/SoundSystem/SND_test/SND_test.c [new file with mode: 0644]
intern/SoundSystem/SoundDefines.h [new file with mode: 0644]
intern/SoundSystem/dummy/Makefile [moved from source/blender/collada/Makefile with 61% similarity]
intern/SoundSystem/dummy/SND_DummyDevice.cpp [new file with mode: 0644]
intern/SoundSystem/dummy/SND_DummyDevice.h [new file with mode: 0644]
intern/SoundSystem/intern/Makefile [new file with mode: 0644]
intern/SoundSystem/intern/SND_AudioDevice.cpp [new file with mode: 0644]
intern/SoundSystem/intern/SND_AudioDevice.h [new file with mode: 0644]
intern/SoundSystem/intern/SND_C-api.cpp [new file with mode: 0644]
intern/SoundSystem/intern/SND_CDObject.cpp [new file with mode: 0644]
intern/SoundSystem/intern/SND_DeviceManager.cpp [new file with mode: 0644]
intern/SoundSystem/intern/SND_IdObject.cpp [new file with mode: 0644]
intern/SoundSystem/intern/SND_IdObject.h [new file with mode: 0644]
intern/SoundSystem/intern/SND_Scene.cpp [new file with mode: 0644]
intern/SoundSystem/intern/SND_SoundListener.cpp [new file with mode: 0644]
intern/SoundSystem/intern/SND_SoundObject.cpp [new file with mode: 0644]
intern/SoundSystem/intern/SND_Utils.cpp [new file with mode: 0644]
intern/SoundSystem/intern/SND_WaveCache.cpp [new file with mode: 0644]
intern/SoundSystem/intern/SND_WaveSlot.cpp [new file with mode: 0644]
intern/SoundSystem/make/msvc_6_0/SoundSystem.dsp [new file with mode: 0644]
intern/SoundSystem/make/msvc_6_0/dummy/DummySoundSystem.dsp [new file with mode: 0644]
intern/SoundSystem/make/msvc_6_0/openal/OpenALSoundSystem.dsp [new file with mode: 0644]
intern/SoundSystem/make/msvc_7_0/SoundSystem.vcproj [new file with mode: 0644]
intern/SoundSystem/make/msvc_7_0/dummy/DummySoundSystem.vcproj [new file with mode: 0644]
intern/SoundSystem/make/msvc_7_0/openal/OpenALSoundSystem.vcproj [new file with mode: 0644]
intern/SoundSystem/make/msvc_9_0/SoundSystem.vcproj [new file with mode: 0644]
intern/SoundSystem/make/msvc_9_0/dummy/DummySoundSystem.vcproj [new file with mode: 0644]
intern/SoundSystem/make/msvc_9_0/openal/OpenALSoundSystem.vcproj [new file with mode: 0644]
intern/SoundSystem/openal/Makefile [new file with mode: 0644]
intern/SoundSystem/openal/SND_OpenALDevice.cpp [new file with mode: 0644]
intern/SoundSystem/openal/SND_OpenALDevice.h [new file with mode: 0644]
intern/SoundSystem/openal/pthread_cancel.cpp [new file with mode: 0644]
intern/SoundSystem/sdl/Makefile [new file with mode: 0644]
intern/SoundSystem/sdl/SND_SDLCDDevice.cpp [new file with mode: 0644]
intern/SoundSystem/sdl/SND_SDLCDDevice.h [new file with mode: 0644]
intern/audaspace/FX/AUD_AccumulatorFactory.cpp
intern/audaspace/FX/AUD_AccumulatorFactory.h
intern/audaspace/FX/AUD_AccumulatorReader.cpp
intern/audaspace/FX/AUD_AccumulatorReader.h
intern/audaspace/FX/AUD_ButterworthFactory.cpp
intern/audaspace/FX/AUD_ButterworthFactory.h
intern/audaspace/FX/AUD_ButterworthReader.cpp
intern/audaspace/FX/AUD_ButterworthReader.h
intern/audaspace/FX/AUD_EnvelopeFactory.cpp
intern/audaspace/FX/AUD_EnvelopeFactory.h
intern/audaspace/FX/AUD_EnvelopeReader.cpp
intern/audaspace/FX/AUD_EnvelopeReader.h
intern/audaspace/FX/AUD_HighpassFactory.cpp
intern/audaspace/FX/AUD_HighpassFactory.h
intern/audaspace/FX/AUD_HighpassReader.cpp
intern/audaspace/FX/AUD_HighpassReader.h
intern/audaspace/FX/AUD_LowpassFactory.cpp
intern/audaspace/FX/AUD_LowpassFactory.h
intern/audaspace/FX/AUD_LowpassReader.cpp
intern/audaspace/FX/AUD_LowpassReader.h
intern/audaspace/FX/AUD_SquareFactory.cpp
intern/audaspace/FX/AUD_SquareFactory.h
intern/audaspace/FX/AUD_SquareReader.cpp
intern/audaspace/FX/AUD_SquareReader.h
intern/audaspace/FX/AUD_SumFactory.cpp
intern/audaspace/FX/AUD_SumFactory.h
intern/audaspace/FX/AUD_SumReader.cpp
intern/audaspace/FX/AUD_SumReader.h
intern/audaspace/intern/AUD_LinearResampleFactory.cpp
intern/audaspace/intern/AUD_LinearResampleFactory.h
intern/audaspace/intern/AUD_LinearResampleReader.cpp
intern/audaspace/intern/AUD_LinearResampleReader.h
intern/audaspace/intern/AUD_Mixer.cpp
intern/audaspace/intern/AUD_Mixer.h
intern/elbeem/intern/elbeem.h [new file with mode: 0644]
intern/ghost/intern/GHOST_DisplayManagerCocoa.h
intern/ghost/intern/GHOST_DisplayManagerCocoa.mm
intern/ghost/intern/GHOST_EventTrackpad.h [deleted file]
intern/ghost/intern/GHOST_SystemCocoa.h
intern/ghost/intern/GHOST_SystemCocoa.mm
intern/ghost/intern/GHOST_WindowCocoa.h
intern/ghost/intern/GHOST_WindowCocoa.mm
intern/guardedalloc/MEM_guardedalloc.h
intern/guardedalloc/Makefile
intern/guardedalloc/intern/mallocn.c
intern/guardedalloc/intern/mmap_win.c
intern/guardedalloc/make/msvc_6_0/guardedalloc.dsp
intern/guardedalloc/make/msvc_9_0/guardedalloc.vcproj
intern/itasc/kdl/frameacc.hpp
intern/itasc/kdl/framevel.hpp
projectfiles_vc9/BL_bmesh/BL_bmesh.vcproj [new file with mode: 0644]
projectfiles_vc9/blender/BPY_python/BPY_python.vcproj
projectfiles_vc9/blender/blender.sln
projectfiles_vc9/blender/blender.vcproj
projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj
projectfiles_vc9/blender/blenlib/BLI_blenlib.vcproj
projectfiles_vc9/blender/editors/ED_editors.vcproj
projectfiles_vc9/blender/loader/BLO_loader.vcproj
projectfiles_vc9/blender/makesdna/DNA_dna.vcproj
projectfiles_vc9/blender/makesdna/DNA_makesdna.vcproj
projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj
projectfiles_vc9/blender/makesrna/RNA_rna.vcproj
projectfiles_vc9/blender/nodes/nodes.vcproj
projectfiles_vc9/blender/windowmanager/windowmanager.vcproj
projectfiles_vc9/gameengine/converter/KX_converter.vcproj
projectfiles_vc9/gameengine/gameplayer/common/GP_common.vcproj
projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj
projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Ode/PHY_Ode.vcproj
projectfiles_vc9/gameengine/videotexture/TEX_Video.vcproj
release/scripts/export_cal3d.py [new file with mode: 0644]
release/scripts/io/add_mesh_torus.py [new file with mode: 0644]
release/scripts/io/mesh_skin.py [new file with mode: 0644]
release/scripts/modules/bpy/app.py [new file with mode: 0644]
release/scripts/modules/bpy_ops.py [new file with mode: 0644]
release/scripts/modules/dynamic_menu.py [new file with mode: 0644]
release/scripts/op/console_python.py [deleted file]
release/scripts/op/console_shell.py [deleted file]
release/scripts/uv_from_adjacent.py [new file with mode: 0644]
source/blender/CMakeLists.txt
source/blender/SConscript
source/blender/blenkernel/BKE_DerivedMesh.h
source/blender/blenkernel/BKE_blender.h
source/blender/blenkernel/BKE_bmesh.h
source/blender/blenkernel/BKE_cdderivedmesh.h
source/blender/blenkernel/BKE_customdata.h
source/blender/blenkernel/BKE_key.h
source/blender/blenkernel/BKE_mesh.h
source/blender/blenkernel/BKE_modifier.h
source/blender/blenkernel/BKE_paint.h
source/blender/blenkernel/BKE_subsurf.h
source/blender/blenkernel/BKE_tessmesh.h [new file with mode: 0644]
source/blender/blenkernel/BKE_utildefines.h
source/blender/blenkernel/BKE_verse.h [new file with mode: 0644]
source/blender/blenkernel/SConscript
source/blender/blenkernel/intern/BME_Customdata.c
source/blender/blenkernel/intern/BME_conversions.c
source/blender/blenkernel/intern/BME_mesh.c
source/blender/blenkernel/intern/BME_tools.c
source/blender/blenkernel/intern/DerivedMesh.c
source/blender/blenkernel/intern/anim.c
source/blender/blenkernel/intern/armature.c
source/blender/blenkernel/intern/blender.c
source/blender/blenkernel/intern/booleanops.c
source/blender/blenkernel/intern/bvhutils.c
source/blender/blenkernel/intern/cdderivedmesh.c
source/blender/blenkernel/intern/cloth.c
source/blender/blenkernel/intern/constraint.c
source/blender/blenkernel/intern/customdata.c
source/blender/blenkernel/intern/deform.c
source/blender/blenkernel/intern/displist.c
source/blender/blenkernel/intern/editderivedbmesh.c [new file with mode: 0644]
source/blender/blenkernel/intern/effect.c
source/blender/blenkernel/intern/exotic.c
source/blender/blenkernel/intern/fluidsim.c
source/blender/blenkernel/intern/fmodifier.c
source/blender/blenkernel/intern/key.c
source/blender/blenkernel/intern/lattice.c
source/blender/blenkernel/intern/library.c
source/blender/blenkernel/intern/mesh.c
source/blender/blenkernel/intern/modifier.c
source/blender/blenkernel/intern/modifiers_bmesh.c [new file with mode: 0644]
source/blender/blenkernel/intern/multires.c
source/blender/blenkernel/intern/node.c
source/blender/blenkernel/intern/object.c
source/blender/blenkernel/intern/particle.c
source/blender/blenkernel/intern/particle_system.c
source/blender/blenkernel/intern/shrinkwrap.c
source/blender/blenkernel/intern/smoke.c
source/blender/blenkernel/intern/softbody.c
source/blender/blenkernel/intern/subsurf_ccg.c
source/blender/blenkernel/intern/verse_bitmap_node.c [new file with mode: 0644]
source/blender/blenkernel/intern/verse_geometry_node.c [new file with mode: 0644]
source/blender/blenkernel/intern/verse_method.c [new file with mode: 0644]
source/blender/blenkernel/intern/verse_node.c [new file with mode: 0644]
source/blender/blenkernel/intern/verse_object_node.c [new file with mode: 0644]
source/blender/blenkernel/intern/verse_session.c [new file with mode: 0644]
source/blender/blenkernel/nla_private.h
source/blender/blenlib/BLI_arithb.h [new file with mode: 0644]
source/blender/blenlib/BLI_array.h [new file with mode: 0644]
source/blender/blenlib/BLI_cellalloc.h [new file with mode: 0644]
source/blender/blenlib/BLI_edgehash.h
source/blender/blenlib/BLI_editVert.h
source/blender/blenlib/BLI_ghash.h
source/blender/blenlib/BLI_mempool.h
source/blender/blenlib/SConscript
source/blender/blenlib/intern/BLI_cellalloc.c [new file with mode: 0644]
source/blender/blenlib/intern/BLI_ghash.c
source/blender/blenlib/intern/BLI_mempool.c
source/blender/blenlib/intern/edgehash.c
source/blender/blenlib/intern/math_vector_inline.c
source/blender/blenlib/intern/pbvh.c
source/blender/blenlib/intern/scanfill.c
source/blender/blenloader/intern/readfile.c
source/blender/blenloader/intern/writefile.c
source/blender/blenpluginapi/SConscript
source/blender/bmesh/CMakeLists.txt [new file with mode: 0644]
source/blender/bmesh/SConscript [new file with mode: 0644]
source/blender/bmesh/bmesh.h [new file with mode: 0644]
source/blender/bmesh/bmesh_error.h [new file with mode: 0644]
source/blender/bmesh/bmesh_filters.h [new file with mode: 0644]
source/blender/bmesh/bmesh_iterators.h [new file with mode: 0644]
source/blender/bmesh/bmesh_marking.h [new file with mode: 0644]
source/blender/bmesh/bmesh_operator_api.h [new file with mode: 0644]
source/blender/bmesh/bmesh_operators.h [new file with mode: 0644]
source/blender/bmesh/bmesh_queries.h [new file with mode: 0644]
source/blender/bmesh/bmesh_walkers.h [new file with mode: 0644]
source/blender/bmesh/editmesh_tools.c [moved from source/blender/editors/mesh/editmesh_tools.c with 59% similarity]
source/blender/bmesh/intern/bmesh_construct.c [new file with mode: 0644]
source/blender/bmesh/intern/bmesh_eulers.c [new file with mode: 0644]
source/blender/bmesh/intern/bmesh_filters.c [new file with mode: 0644]
source/blender/bmesh/intern/bmesh_interp.c [new file with mode: 0644]
source/blender/bmesh/intern/bmesh_iterators.c [new file with mode: 0644]
source/blender/bmesh/intern/bmesh_marking.c [new file with mode: 0644]
source/blender/bmesh/intern/bmesh_mesh.c [new file with mode: 0644]
source/blender/bmesh/intern/bmesh_mods.c [new file with mode: 0644]
source/blender/bmesh/intern/bmesh_opdefines.c [new file with mode: 0644]
source/blender/bmesh/intern/bmesh_operators.c [new file with mode: 0644]
source/blender/bmesh/intern/bmesh_operators_private.h [new file with mode: 0644]
source/blender/bmesh/intern/bmesh_polygon.c [new file with mode: 0644]
source/blender/bmesh/intern/bmesh_private.h [new file with mode: 0644]
source/blender/bmesh/intern/bmesh_queries.c [new file with mode: 0644]
source/blender/bmesh/intern/bmesh_structure.c [new file with mode: 0644]
source/blender/bmesh/intern/bmesh_structure.h [new file with mode: 0644]
source/blender/bmesh/intern/bmesh_to_editmesh.c [new file with mode: 0644]
source/blender/bmesh/intern/bmesh_walkers.c [new file with mode: 0644]
source/blender/bmesh/intern/editmesh_to_bmesh.c [new file with mode: 0644]
source/blender/bmesh/intern/in-progress/BME_conversions.c [new file with mode: 0644]
source/blender/bmesh/operators/bmesh_dupeops.c [new file with mode: 0644]
source/blender/bmesh/operators/connectops.c [new file with mode: 0644]
source/blender/bmesh/operators/createops.c [new file with mode: 0644]
source/blender/bmesh/operators/dissolveops.c [new file with mode: 0644]
source/blender/bmesh/operators/edgesplitop.c [new file with mode: 0644]
source/blender/bmesh/operators/extrudeops.c [new file with mode: 0644]
source/blender/bmesh/operators/join_triangles.c [new file with mode: 0644]
source/blender/bmesh/operators/mesh_conv.c [new file with mode: 0644]
source/blender/bmesh/operators/mirror.c [new file with mode: 0644]
source/blender/bmesh/operators/primitiveops.c [new file with mode: 0644]
source/blender/bmesh/operators/removedoubles.c [new file with mode: 0644]
source/blender/bmesh/operators/subdivideop.c [new file with mode: 0644]
source/blender/bmesh/operators/subdivideop.h [new file with mode: 0644]
source/blender/bmesh/operators/triangulateop.c [new file with mode: 0644]
source/blender/bmesh/operators/utils.c [new file with mode: 0644]
source/blender/bmesh/tools/BME_bevel.c [new file with mode: 0644]
source/blender/bmesh/tools/BME_dupe_ops.c [new file with mode: 0644]
source/blender/bmesh/tools/BME_duplicate.c [new file with mode: 0644]
source/blender/bmesh/tools/BME_extrude.c [new file with mode: 0644]
source/blender/bmesh/tools/BME_weld.c [new file with mode: 0644]
source/blender/editors/CMakeLists.txt
source/blender/editors/armature/editarmature.c
source/blender/editors/armature/meshlaplacian.c
source/blender/editors/armature/poseobject.c
source/blender/editors/armature/reeb.c
source/blender/editors/curve/editcurve.c
source/blender/editors/curve/editfont.c
source/blender/editors/include/ED_mesh.h
source/blender/editors/include/ED_util.h
source/blender/editors/include/ED_uvedit.h
source/blender/editors/include/ED_view3d.h
source/blender/editors/include/UI_resources.h
source/blender/editors/interface/interface_handlers.c
source/blender/editors/interface/resources.c
source/blender/editors/mesh/SConscript
source/blender/editors/mesh/bmesh_select.c [new file with mode: 0644]
source/blender/editors/mesh/bmesh_selecthistory.c [new file with mode: 0644]
source/blender/editors/mesh/bmesh_tools.c [new file with mode: 0644]
source/blender/editors/mesh/bmeshutils.c [new file with mode: 0644]
source/blender/editors/mesh/editbmesh_add.c [new file with mode: 0644]
source/blender/editors/mesh/editbmesh_bvh.c [new file with mode: 0644]
source/blender/editors/mesh/editbmesh_bvh.h [new file with mode: 0644]
source/blender/editors/mesh/editface.c
source/blender/editors/mesh/editmesh.c [deleted file]
source/blender/editors/mesh/editmesh_add.c [deleted file]
source/blender/editors/mesh/editmesh_lib.c [deleted file]
source/blender/editors/mesh/editmesh_loop.c [deleted file]
source/blender/editors/mesh/editmesh_mods.c [deleted file]
source/blender/editors/mesh/loopcut.c
source/blender/editors/mesh/mesh_data.c
source/blender/editors/mesh/mesh_intern.h
source/blender/editors/mesh/mesh_ops.c
source/blender/editors/mesh/meshtools.c
source/blender/editors/metaball/mball_edit.c
source/blender/editors/object/SConscript
source/blender/editors/object/object_constraint.c
source/blender/editors/object/object_edit.c
source/blender/editors/object/object_hook.c
source/blender/editors/object/object_lattice.c
source/blender/editors/object/object_relations.c
source/blender/editors/object/object_transform.c
source/blender/editors/object/object_vgroup.c
source/blender/editors/physics/particle_edit.c
source/blender/editors/physics/particle_object.c
source/blender/editors/render/SConscript
source/blender/editors/render/render_shading.c
source/blender/editors/screen/Makefile
source/blender/editors/screen/SConscript
source/blender/editors/screen/screen_edit.c
source/blender/editors/screen/screen_ops.c
source/blender/editors/sculpt_paint/paint_image.c
source/blender/editors/sculpt_paint/paint_utils.c
source/blender/editors/sculpt_paint/paint_vertex.c
source/blender/editors/sculpt_paint/sculpt.c
source/blender/editors/space_buttons/SConscript
source/blender/editors/space_image/Makefile
source/blender/editors/space_image/SConscript
source/blender/editors/space_image/image_buttons.c
source/blender/editors/space_image/image_header.c
source/blender/editors/space_image/space_image.c
source/blender/editors/space_info/Makefile
source/blender/editors/space_info/SConscript
source/blender/editors/space_info/info_stats.c
source/blender/editors/space_node/SConscript
source/blender/editors/space_view3d/SConscript
source/blender/editors/space_view3d/drawarmature.c
source/blender/editors/space_view3d/drawmesh.c
source/blender/editors/space_view3d/drawobject.c
source/blender/editors/space_view3d/view3d_buttons.c
source/blender/editors/space_view3d/view3d_draw.c
source/blender/editors/space_view3d/view3d_edit.c
source/blender/editors/space_view3d/view3d_header.c
source/blender/editors/space_view3d/view3d_select.c
source/blender/editors/space_view3d/view3d_snap.c
source/blender/editors/space_view3d/view3d_view.c
source/blender/editors/transform/SConscript
source/blender/editors/transform/transform.c
source/blender/editors/transform/transform.h
source/blender/editors/transform/transform_constraints.c
source/blender/editors/transform/transform_conversions.c
source/blender/editors/transform/transform_generics.c
source/blender/editors/transform/transform_manipulator.c
source/blender/editors/transform/transform_ops.c
source/blender/editors/transform/transform_orientations.c
source/blender/editors/transform/transform_snap.c
source/blender/editors/util/ed_util.c
source/blender/editors/util/editmode_undo.c
source/blender/editors/uvedit/SConscript
source/blender/editors/uvedit/uvedit_draw.c
source/blender/editors/uvedit/uvedit_intern.h
source/blender/editors/uvedit/uvedit_ops.c
source/blender/editors/uvedit/uvedit_parametrizer.c
source/blender/editors/uvedit/uvedit_parametrizer.h
source/blender/editors/uvedit/uvedit_unwrap_ops.c
source/blender/gpu/gpu_buffers.h
source/blender/gpu/intern/gpu_buffers.c
source/blender/ikplugin/intern/itasc_plugin.cpp
source/blender/makesdna/DNA_customdata_types.h
source/blender/makesdna/DNA_key_types.h
source/blender/makesdna/DNA_mesh_types.h
source/blender/makesdna/DNA_meshdata_types.h
source/blender/makesdna/DNA_object_types.h
source/blender/makesdna/DNA_userdef_types.h
source/blender/makesdna/intern/SConscript
source/blender/makesrna/SConscript
source/blender/makesrna/intern/SConscript
source/blender/makesrna/intern/rna_animviz.c
source/blender/makesrna/intern/rna_image_api.c
source/blender/makesrna/intern/rna_main_api.c
source/blender/makesrna/intern/rna_mesh.c
source/blender/makesrna/intern/rna_mesh_api.c
source/blender/makesrna/intern/rna_modifier.c
source/blender/makesrna/intern/rna_nla.c
source/blender/makesrna/intern/rna_object.c
source/blender/makesrna/intern/rna_pose_api.c
source/blender/makesrna/intern/rna_scene.c
source/blender/makesrna/intern/rna_userdef.c
source/blender/makesrna/intern/rna_wm_api.c
source/blender/python/BPY_menus.c [new file with mode: 0644]
source/blender/python/BPY_menus.h [new file with mode: 0644]
source/blender/python/Makefile
source/blender/python/epy_doc_gen.py [new file with mode: 0644]
source/blender/python/generic/BGL.c [moved from source/blender/python/generic/bgl.c with 97% similarity]
source/blender/python/generic/BGL.h [moved from source/blender/python/generic/bgl.h with 88% similarity]
source/blender/python/generic/Geometry.c
source/blender/python/generic/Geometry.h
source/blender/python/generic/Mathutils.c
source/blender/python/generic/Mathutils.h
source/blender/python/generic/bpy_internal_import.c
source/blender/python/generic/bpy_internal_import.h
source/blender/python/generic/euler.c
source/blender/python/generic/euler.h
source/blender/python/generic/matrix.c
source/blender/python/generic/matrix.h
source/blender/python/generic/quat.c
source/blender/python/generic/quat.h
source/blender/python/generic/vector.c
source/blender/python/generic/vector.h
source/blender/python/intern/bpy_interface.c
source/blender/python/intern/bpy_operator.h
source/blender/python/intern/bpy_operator_wrap.c
source/blender/python/intern/bpy_operator_wrap.h
source/blender/python/intern/bpy_ui.c [new file with mode: 0644]
source/blender/python/intern/bpy_ui.h [new file with mode: 0644]
source/blender/python/rna_dump.py
source/blender/python/simple_enum_gen.py
source/blender/readblenfile/intern/BLO_readblenfile.c
source/blender/render/intern/include/raycounter.h
source/blender/render/intern/include/rayobject.h
source/blender/render/intern/raytrace/reorganize.h
source/blender/render/intern/source/convertblender.c
source/blender/render/intern/source/pointdensity.c
source/blender/render/intern/source/rayobject_blibvh.c
source/blender/render/intern/source/rayobject_instance.c
source/blender/render/intern/source/rayobject_octree.c
source/blender/render/intern/source/rayobject_raycounter.c
source/blender/render/intern/source/shadeoutput.c
source/blender/render/intern/source/strand.c
source/blender/windowmanager/intern/wm_init_exit.c
source/blender/windowmanager/intern/wm_operators.c
source/creator/CMakeLists.txt
source/creator/creator.c
source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
source/gameengine/Converter/BL_ArmatureActuator.cpp
source/gameengine/Converter/BL_ArmatureActuator.h
source/gameengine/Converter/BL_ArmatureChannel.cpp
source/gameengine/Converter/BL_ArmatureChannel.h
source/gameengine/Converter/BL_ArmatureConstraint.cpp
source/gameengine/Converter/BL_ArmatureConstraint.h
source/gameengine/Converter/BL_BlenderDataConversion.cpp
source/gameengine/GameLogic/SCA_BasicEventManager.cpp
source/gameengine/GameLogic/SCA_BasicEventManager.h
source/gameengine/Ketsji/KX_ArmatureSensor.cpp
source/gameengine/Ketsji/KX_ArmatureSensor.h
source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
source/gameengine/PyDoc/Makefile [new file with mode: 0644]
source/gameengine/PyDoc/PhysicsConstraints.py [deleted file]
source/gameengine/PyDoc/VideoTexture.py [deleted file]
source/gameengine/Rasterizer/RAS_OpenGLRasterizer/ARB_multitexture.h [new file with mode: 0644]
source/gameengine/Rasterizer/RAS_OpenGLRasterizer/EXT_separate_specular_color.h [new file with mode: 0644]
source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
source/gameengine/Rasterizer/RAS_OpenGLRasterizer/glext.h [new file with mode: 0644]
source/gameengine/Rasterizer/RAS_OpenGLRasterizer/mkglext.py [new file with mode: 0644]
tools/Blender.py
tools/btools.py
tools/mstoolkit.py [changed mode: 0644->0755]

index 7e432bf7dfae1442d45caf58d47570f13e001dc4..bfb36ce7ceedfa20a3254a6b90bf94e0b5a73ef5 100644 (file)
@@ -585,7 +585,7 @@ if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'win64-vc', 'linuxcross'):
                        dllsources.append('${BF_SDL_LIBPATH}/SDL.dll')
 
        if env['WITH_BF_PYTHON']:
-               if env['BF_DEBUG']:
+               if env['BF_DEBUG'] and not env["BF_NO_PYDEBUG"]:
                        dllsources.append('${BF_PYTHON_LIBPATH}/${BF_PYTHON_DLL}_d.dll')
                else:
                        dllsources.append('${BF_PYTHON_LIBPATH}/${BF_PYTHON_DLL}.dll')
index 4799f91647cd3e6503217cfe8d56f2da61575bc2..e1d20fa8ce0be2bc3140405a7106344cea997cb6 100644 (file)
@@ -164,6 +164,7 @@ CC = 'cl.exe'
 CXX = 'cl.exe'
 
 CCFLAGS = ['/nologo', '/Ob1', '/J', '/W3', '/Gd', '/wd4244', '/wd4305', '/wd4800', '/wd4065', '/wd4267']
+#CCFLAGS += ['/GL']
 CXXFLAGS = ['/EHsc']
 BGE_CXXFLAGS = ['/O2', '/EHsc', '/GR', '/fp:fast', '/arch:SSE']
 
@@ -180,8 +181,8 @@ CXX_WARN = []
 
 LLIBS = ['ws2_32', 'vfw32', 'winmm', 'kernel32', 'user32', 'gdi32', 'comdlg32', 'advapi32', 'shfolder', 'shell32', 'ole32', 'oleaut32', 'uuid']
 
-PLATFORM_LINKFLAGS = ['/SUBSYSTEM:CONSOLE','/MACHINE:IX86','/INCREMENTAL:NO','/NODEFAULTLIB:"msvcprt.lib"','/NODEFAULTLIB:"msvcprtd.lib"','/NODEFAULTLIB:"glut32.lib"','/NODEFAULTLIB:"libc.lib"','/NODEFAULTLIB:"libcd.lib"','/NODEFAULTLIB:"libcpd.lib"','/NODEFAULTLIB:"libcp.lib"','/NODEFAULTLIB:"msvcrt.lib"', '/NODEFAULTLIB:"msvcrtd.lib"', '/NODEFAULTLIB:"msvcmrt.lib"', '/NODEFAULTLIB:"msvcurt.lib"', '/LARGEADDRESSAWARE']
-
+PLATFORM_LINKFLAGS = ['/SUBSYSTEM:CONSOLE','/MACHINE:IX86','/INCREMENTAL:YES','/NODEFAULTLIB:"msvcprt.lib"','/NODEFAULTLIB:"msvcprtd.lib"','/NODEFAULTLIB:"glut32.lib"','/NODEFAULTLIB:"libc.lib"','/NODEFAULTLIB:"libcd.lib"','/NODEFAULTLIB:"libcpd.lib"','/NODEFAULTLIB:"libcp.lib"','/NODEFAULTLIB:"msvcrt.lib"', '/NODEFAULTLIB:"msvcrtd.lib"', '/NODEFAULTLIB:"msvcmrt.lib"', '/NODEFAULTLIB:"msvcurt.lib"', '/LARGEADDRESSAWARE']
+#PLATFORM_LINKFLAGS += ['/LTCG']
 # # Todo
 # BF_PROFILE_CCFLAGS = ['-pg', '-g ']
 # BF_PROFILE_LINKFLAGS = ['-pg']
diff --git a/intern/SoundSystem/CMakeLists.txt b/intern/SoundSystem/CMakeLists.txt
new file mode 100644 (file)
index 0000000..9a370af
--- /dev/null
@@ -0,0 +1,42 @@
+# $Id$
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+# The Original Code is Copyright (C) 2006, Blender Foundation
+# All rights reserved.
+#
+# The Original Code is: all of this file.
+#
+# Contributor(s): Jacques Beaurain.
+#
+# ***** END GPL LICENSE BLOCK *****
+
+SET(INC . intern ../moto/include ../string dummy openal sdl)
+
+IF(WITH_OPENAL)
+  FILE(GLOB SRC dummy/*.cpp intern/*.cpp openal/*.cpp sdl/*.cpp)
+  INCLUDE_DIRECTORIES(${OPENAL_INC} ${SDL_INC})
+  STRING(REGEX MATCH ".*ramework.*" FRAMEWORK ${OPENAL_INC})
+  IF(FRAMEWORK)
+    ADD_DEFINITIONS(-DAPPLE_FRAMEWORK_FIX)
+  ENDIF(FRAMEWORK)
+ELSE(WITH_OPENAL)
+  FILE(GLOB SRC dummy/*.cpp intern/*.cpp)
+  ADD_DEFINITIONS(-DNO_SOUND)
+ENDIF(WITH_OPENAL)
+
+BLENDERLIB(bf_soundsystem "${SRC}" "${INC}")
+#, libtype=['core','player'], priority = [20,140] )
diff --git a/intern/SoundSystem/Makefile b/intern/SoundSystem/Makefile
new file mode 100644 (file)
index 0000000..4d346f6
--- /dev/null
@@ -0,0 +1,70 @@
+# -*- mode: gnumakefile; tab-width: 8; indent-tabs-mode: t; -*-
+# vim: tabstop=8
+#
+# $Id$
+#
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+# All rights reserved.
+#
+# The Original Code is: all of this file.
+#
+# Contributor(s): GSR
+#
+# ***** END GPL LICENSE BLOCK *****
+#
+#
+
+include nan_definitions.mk
+
+LIBNAME = SoundSystem
+SOURCEDIR = intern/SoundSystem
+DIR = $(OCGDIR)/$(SOURCEDIR)
+DIRS = intern
+DIRS += dummy
+
+ifneq ($(NAN_NO_OPENAL),true)
+  ifeq ($(OS),windows)
+      DIRS += openal sdl
+  endif
+  ifeq ($(OS),darwin)
+      DIRS += openal
+  endif
+  ifeq ($(OS),$(findstring $(OS), "linux freebsd solaris"))
+    DIRS += openal sdl
+  endif
+  ifeq ($(OS), irix)
+    DIRS += sdl
+  endif
+else
+  export CPPFLAGS += -DNO_SOUND
+endif
+
+include nan_subdirs.mk
+
+install: $(ALL_OR_DEBUG)
+       @[ -d $(NAN_SOUNDSYSTEM) ] || mkdir $(NAN_SOUNDSYSTEM)
+       @[ -d $(NAN_SOUNDSYSTEM)/include ] || mkdir $(NAN_SOUNDSYSTEM)/include
+       @[ -d $(NAN_SOUNDSYSTEM)/lib/$(DEBUG_DIR) ] || mkdir $(NAN_SOUNDSYSTEM)/lib/$(DEBUG_DIR)
+       @../tools/cpifdiff.sh $(DIR)/$(DEBUG_DIR)libSoundSystem.a $(NAN_SOUNDSYSTEM)/lib/$(DEBUG_DIR)
+ifeq ($(OS),darwin)
+       ranlib $(NAN_SOUNDSYSTEM)/lib/$(DEBUG_DIR)libSoundSystem.a
+endif
+       @../tools/cpifdiff.sh *.h $(NAN_SOUNDSYSTEM)/include/
+
+
diff --git a/intern/SoundSystem/SConscript b/intern/SoundSystem/SConscript
new file mode 100644 (file)
index 0000000..256b790
--- /dev/null
@@ -0,0 +1,20 @@
+#!/usr/bin/python
+
+Import ('env')
+
+sources = env.Glob('dummy/*.cpp') + env.Glob('intern/*.cpp')
+
+incs = '. intern ../moto/include ../string dummy openal sdl'
+defs = ''
+if env['WITH_BF_OPENAL']:
+       sources += env.Glob('openal/*.cpp') + env.Glob('sdl/*.cpp')
+       incs += ' ' + env['BF_OPENAL_INC']
+       incs += ' ' + env['BF_SDL_INC']
+       defs = 'USE_OPENAL'
+else:
+       defs = 'NO_SOUND'
+
+if not env['WITH_BF_SDL']:
+       defs += ' DISABLE_SDL'
+
+env.BlenderLib ('bf_soundsystem', sources, Split(incs), Split(defs), libtype=['intern','player'], priority = [25,135] )
diff --git a/intern/SoundSystem/SND_C-api.h b/intern/SoundSystem/SND_C-api.h
new file mode 100644 (file)
index 0000000..f8e439a
--- /dev/null
@@ -0,0 +1,354 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#ifndef        SND_BLENDER_H
+#define SND_BLENDER_H
+
+#ifdef __cplusplus
+extern "C" { 
+#endif
+
+#include "SoundDefines.h"
+
+#define SND_DECLARE_HANDLE(name) typedef struct name##__ { int unused; } *name
+
+SND_DECLARE_HANDLE(SND_AudioDeviceInterfaceHandle);
+SND_DECLARE_HANDLE(SND_SceneHandle);
+SND_DECLARE_HANDLE(SND_ObjectHandle);
+SND_DECLARE_HANDLE(SND_ListenerHandle);
+
+/**
+ * set the specified type 
+ */
+extern void SND_SetDeviceType(int device_type);
+
+/**
+ * get an audiodevice
+ */
+extern SND_AudioDeviceInterfaceHandle SND_GetAudioDevice(void);
+
+/**
+ * and let go of it
+ */
+extern void SND_ReleaseDevice(void);
+
+/**
+ * check if playback is desired
+ */
+extern int SND_IsPlaybackWanted(SND_SceneHandle scene);
+
+/**
+ *     add memlocation to cache
+ */
+extern int SND_AddSample(SND_SceneHandle scene,
+                                                const char* filename,
+                                                void* memlocation,
+                                                int size);
+
+/**
+ *     remove all samples
+ */
+extern void    SND_RemoveAllSamples(SND_SceneHandle scene);
+
+/**
+ *  forces the object to check its buffer, and fix it if it's wrong
+ */
+extern int SND_CheckBuffer(SND_SceneHandle scene, SND_ObjectHandle object);
+
+/**
+  * Creates a scene, initializes it and returns a handle to that scene.
+  *
+  *    @param audiodevice: handle to the audiodevice.
+  */
+extern SND_SceneHandle SND_CreateScene(SND_AudioDeviceInterfaceHandle audiodevice);
+
+/**
+  * Stops all sounds, suspends the scene (so all resources will be freed) and deletes the scene.
+  *
+  *    @param scene: handle to the soundscene.
+  */
+extern void    SND_DeleteScene(SND_SceneHandle scene); 
+
+/**
+  * Adds a soundobject to the scene, gets the buffer the sample is loaded into.
+  *
+  *    @param scene: handle to the soundscene.
+  * @param object: handle to soundobject.
+  */
+extern void    SND_AddSound(SND_SceneHandle scene, SND_ObjectHandle object);
+
+/**
+  * Removes a soundobject from the scene.
+  *
+  *    @param scene: handle to the soundscene.
+  * @param object: handle to soundobject.
+  */
+extern void    SND_RemoveSound(SND_SceneHandle scene, SND_ObjectHandle object);
+
+/**
+  * Removes all soundobjects from the scene.
+  *
+  *    @param scene: handle to the soundscene.
+  */
+extern void    SND_RemoveAllSounds(SND_SceneHandle scene);
+
+/**
+  * Stopss all soundobjects in the scene.
+  *
+  *    @param scene: handle to the soundscene.
+  */
+extern void SND_StopAllSounds(SND_SceneHandle scene);
+
+/**
+  * Updates the listener, checks the status of all soundobjects, builds a list of all active
+  * objects, updates the active objects.
+  *
+  *    @param audiodevice: handle to the audiodevice.
+  *    @param scene: handle to the soundscene.
+  */
+extern void    SND_Proceed(SND_AudioDeviceInterfaceHandle audiodevice, SND_SceneHandle scene);
+
+/**
+  * Returns a handle to the listener.
+  *
+  *    @param scene: handle to the soundscene.
+  */
+extern SND_ListenerHandle SND_GetListener(SND_SceneHandle scene);
+
+/**
+  * Sets the gain of the listener.
+  *
+  *    @param scene: handle to the soundscene.
+  * @param gain: factor the gain gets multiplied with.
+  */
+extern void SND_SetListenerGain(SND_SceneHandle scene, double gain);
+
+/**
+  * Sets a scaling to exaggerate or deemphasize the Doppler (pitch) shift resulting from the
+  * calculation.
+  * @attention $f' = dopplerfactor * f * frac{dopplervelocity - listener_velocity}{dopplervelocity + object_velocity}$
+  *    @attention f:  frequency in sample (soundobject)
+  * @attention f': effective Doppler shifted frequency
+  *
+  *    @param object: handle to soundobject.
+  * @param dopplerfactor: the dopplerfactor.
+  */
+extern void    SND_SetDopplerFactor(SND_SceneHandle scene, double dopplerfactor);
+
+/**
+  * Sets the value of the propagation speed relative to which the source velocities are interpreted.
+  * @attention $f' = dopplerfactor * f * frac{dopplervelocity - listener_velocity}{dopplervelocity + object_velocity}$
+  *    @attention f:  frequency in sample (soundobject)
+  * @attention f': effective Doppler shifted frequency
+  *
+  *    @param object: handle to soundobject.
+  * @param dopplervelocity: the dopplervelocity.
+  */
+extern void    SND_SetDopplerVelocity(SND_SceneHandle scene, double dopplervelocity);
+
+/**
+  * Creates a new soundobject and returns a handle to it.
+  */
+extern SND_ObjectHandle        SND_CreateSound(void);
+
+/**
+  * Deletes a soundobject.
+  *
+  *    @param object: handle to soundobject.
+  */
+extern void    SND_DeleteSound(SND_ObjectHandle object);
+
+/**
+  * Sets a soundobject to SND_MUST_PLAY, so with the next proceed it will be updated and played.
+  *
+  *    @param object: handle to soundobject.
+  */
+extern void    SND_StartSound(SND_SceneHandle scene, SND_ObjectHandle object);
+
+/**
+  * Sets a soundobject to SND_MUST_STOP, so with the next proceed it will be stopped.
+  *
+  *    @param object: handle to soundobject.
+  */
+extern void    SND_StopSound(SND_SceneHandle scene, SND_ObjectHandle object);
+
+/**
+  * Sets a soundobject to SND_MUST_PAUSE, so with the next proceed it will be paused.
+  *
+  *    @param object: handle to soundobject.
+  */
+extern void    SND_PauseSound(SND_SceneHandle scene, SND_ObjectHandle object);
+
+/**
+  * Sets the name of the sample to reference the soundobject to it.
+  *
+  *    @param object: handle to soundobject.
+  * @param samplename: the name of the sample
+  */
+extern void    SND_SetSampleName(SND_ObjectHandle object, char* samplename);
+
+/**
+  * Sets the gain of a soundobject.
+  *
+  *    @param object: handle to soundobject.
+  * @param gain: factor the gain gets multiplied with.
+  */
+extern void    SND_SetGain(SND_ObjectHandle object, double gain);
+
+/**
+  * Sets the minimum gain of a soundobject.
+  *
+  *    @param object: handle to soundobject.
+  * @param minimumgain: lower threshold for the gain.
+  */
+extern void    SND_SetMinimumGain(SND_ObjectHandle object, double minimumgain);
+
+/**
+  * Sets the maximum gain of a soundobject.
+  *
+  *    @param object: handle to soundobject.
+  * @param maximumgain: upper threshold for the gain.
+  */
+extern void    SND_SetMaximumGain(SND_ObjectHandle object, double maximumgain);
+
+/**
+  * Sets the rollofffactor. The        rollofffactor is a per-Source parameter the application 
+  * can use to increase or decrease    the range of a source by decreasing or increasing the
+  * attenuation, respectively. The default value is 1. The implementation is free to optimize
+  * for a rollofffactor value of 0, which indicates that the application does not wish any
+  * distance attenuation on the respective Source.
+  *
+  *    @param object: handle to soundobject.
+  * @param rollofffactor: the rollofffactor.
+  */
+extern void    SND_SetRollOffFactor(SND_ObjectHandle object, double rollofffactor);
+
+/**
+  * Sets the referencedistance at which the listener will experience gain.
+  * @attention G_dB = gain - 20 * log10(1 + rollofffactor * (dist - referencedistance)/referencedistance);
+  *
+  *    @param object: handle to soundobject.
+  * @param distance: the reference distance.
+  */
+extern void    SND_SetReferenceDistance(SND_ObjectHandle object, double referencedistance);
+
+/**
+  * Sets the pitch of a soundobject.
+  *
+  *    @param object: handle to soundobject.
+  * @param pitch: pitchingfactor: 2.0 for doubling the frequency, 0.5 for half the frequency.
+  */
+extern void    SND_SetPitch(SND_ObjectHandle object, double pitch);
+
+/**
+  * Sets the position a soundobject.
+  *
+  *    @param object: handle to soundobject.
+  * @param position: position[3].
+  */
+extern void SND_SetPosition(SND_ObjectHandle object, double* position);
+
+/**
+  * Sets the velocity of a soundobject.
+  *
+  *    @param object: handle to soundobject.
+  * @param velocity: velocity[3].
+  */
+extern void SND_SetVelocity(SND_ObjectHandle object, double* velocity);
+
+/**
+  * Sets the orientation of a soundobject.
+  *
+  *    @param object: handle to soundobject.
+  * @param orientation: orientation[9].
+  */
+extern void SND_SetOrientation(SND_ObjectHandle object, double* orientation);
+
+/**
+  * Sets the loopmode of a soundobject.
+  *
+  *    @param object: handle to soundobject.
+  * @param loopmode    type of the loop (SND_LOOP_OFF, SND_LOOP_NORMAL, SND_LOOP_BIDIRECTIONAL);
+ */
+extern void SND_SetLoopMode(SND_ObjectHandle object, int loopmode);
+
+/**
+  * Sets the looppoints of a soundobject.
+  *
+  *    @param object: handle to soundobject.
+  * @param loopstart   startpoint of the loop
+  * @param loopend             endpoint of the loop
+ */
+extern void SND_SetLoopPoints(SND_ObjectHandle object, unsigned int loopstart, unsigned int loopend);
+
+/**
+  * Gets the gain of a soundobject.
+  *
+  *    @param object: handle to soundobject.
+  */
+extern float SND_GetGain(SND_ObjectHandle object);
+
+/**
+  * Gets the pitch of a soundobject.
+  *
+  *    @param object: handle to soundobject.
+  */
+extern float SND_GetPitch(SND_ObjectHandle object);
+
+/**
+  * Gets the looping of a soundobject.
+  * 0: SND_LOOP_OFF
+  * 1: SND_LOOP_NORMAL
+  * 2: SND_LOOP_BIDIRECTIONAL
+  *
+  *    @param object: handle to soundobject.
+  */
+extern int SND_GetLoopMode(SND_ObjectHandle object);
+
+/**
+  * Gets the playstate of a soundobject.
+  *    SND_UNKNOWN = -1
+  *    SND_INITIAL
+  *    SND_MUST_PLAY
+  *    SND_PLAYING
+  *    SND_MUST_STOP
+  *    SND_STOPPED
+  *    SND_MUST_PAUSE
+  *    SND_PAUSED
+  *    SND_MUST_BE_DELETED
+  *
+  *    @param object: handle to soundobject.
+  */
+extern int SND_GetPlaystate(SND_ObjectHandle object);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/intern/SoundSystem/SND_CDObject.h b/intern/SoundSystem/SND_CDObject.h
new file mode 100644 (file)
index 0000000..c79f62d
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * SND_CDObject.h
+ *
+ * Implementation for CD playback
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __SND_CDOBJECT_H
+#define __SND_CDOBJECT_H
+
+#include "SND_Object.h"
+
+class SND_CDObject : public SND_Object
+{
+private:
+
+       /**
+        * Private to enforce singleton
+        */
+       SND_CDObject();
+       SND_CDObject(const SND_CDObject&);
+
+       static SND_CDObject*    m_instance;
+       MT_Scalar                               m_gain;                 /* the gain of the object */
+       int                                             m_playmode;             /* the way CD is played back (all, random, track, trackloop) */
+       int                                             m_track;                /* the track for 'track' and 'trackloop' */
+       int                                             m_playstate;    /* flag for current state of object */
+       bool                                    m_modified;
+       bool                                    m_used;                 /* flag for checking if we used the cd, if not don't 
+                                                                                               call the stop cd at the end */
+
+public:
+       static bool     CreateSystem();
+       static bool DisposeSystem();
+       static SND_CDObject* Instance();
+
+       ~SND_CDObject();
+       
+       void SetGain(MT_Scalar gain);
+       void SetPlaymode(int playmode);
+       void SetTrack(int track);
+       void SetPlaystate(int playstate);
+       void SetModified(bool modified);
+       void SetUsed();
+       bool GetUsed();
+
+       bool IsModified() const;
+
+       int                     GetTrack() const;
+       MT_Scalar       GetGain() const;
+       int                     GetPlaymode() const;
+       int                     GetPlaystate() const;
+       
+};
+
+#endif //__SND_CDOBJECT_H
+
diff --git a/intern/SoundSystem/SND_DependKludge.h b/intern/SoundSystem/SND_DependKludge.h
new file mode 100644 (file)
index 0000000..06d4ec9
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * SND_DependKludge.h
+ *
+ * who needs what?
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef HAVE_CONFIG_H
+
+#ifndef NO_SOUND
+
+#if defined (_WIN32) && !defined(FREE_WINDOWS)
+#   define USE_OPENAL
+#elif defined (__linux__) || (__FreeBSD__) || defined(__APPLE__) || defined(__sun)
+#      define USE_OPENAL
+#else
+#      ifdef USE_OPENAL
+#              undef USE_OPENAL
+#      endif
+#endif
+
+#endif /* NO_SOUND */
+
+#endif /* HAVE_CONFIG_H */
diff --git a/intern/SoundSystem/SND_DeviceManager.h b/intern/SoundSystem/SND_DeviceManager.h
new file mode 100644 (file)
index 0000000..708db03
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * SND_DeviceManager.h
+ *
+ * singleton for creating, switching and deleting audiodevices
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __SND_DEVICEMANAGER_H
+#define __SND_DEVICEMANAGER_H
+
+#include "SND_IAudioDevice.h"
+
+class SND_DeviceManager
+{
+public :
+
+       /**
+        * a subscription is needed before instances are given away
+        * applications must call subscribe first, get an instance, and
+        * when they are finished with sound, unsubscribe
+        */
+       static void Subscribe();
+       static void Unsubscribe();
+
+       static SND_IAudioDevice* Instance();
+       static void     SetDeviceType(int device_type);
+
+private :
+
+       /**
+        * Private to enforce singleton
+        */
+       SND_DeviceManager();
+       SND_DeviceManager(const SND_DeviceManager&);
+       ~SND_DeviceManager();
+       
+       static SND_IAudioDevice* m_instance;
+
+       /**
+        * The type of device to be created on a call
+        * to Instance().
+        */
+       static int m_device_type;
+
+       /**
+        * Remember the number of subscriptions.
+        * if 0, delete the device
+        */
+       static int m_subscriptions;
+};
+
+#endif //__SND_DEVICEMANAGER_H
+
diff --git a/intern/SoundSystem/SND_IAudioDevice.h b/intern/SoundSystem/SND_IAudioDevice.h
new file mode 100644 (file)
index 0000000..d6b3936
--- /dev/null
@@ -0,0 +1,343 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#ifndef SND_IAUDIODEVICE
+#define SND_IAUDIODEVICE
+
+#include "SND_SoundObject.h"
+#include "SND_CDObject.h"
+#include "SND_WaveCache.h"
+#include "SND_WaveSlot.h"
+#include "MT_Matrix3x3.h"
+
+class SND_IAudioDevice
+{
+public:
+
+       /**
+        * constructor
+        */
+       SND_IAudioDevice() {};
+
+       /**
+        * destructor
+        */
+       virtual ~SND_IAudioDevice() {};
+
+       /**
+        * check to see if initialization was successfull
+        *
+        * @return indication of succes
+        */
+       virtual bool IsInitialized()=0;
+
+       /**
+        * get the wavecache (which does sample (un)loading)
+        *
+        * @return pointer to the wavecache
+        */
+       virtual SND_WaveCache* GetWaveCache() const =0;
+
+       /**
+        * loads a sample into the device
+        *
+        * @param samplename    the name of the sample
+        * @param memlocation   pointer where the sample is stored
+        * @param size                  size of the sample in memory
+        *
+        * @return pointer to the slot with sample data
+        */
+       virtual SND_WaveSlot* LoadSample(const STR_String& samplename,
+                                                                        void* memlocation,
+                                                                        int size)=0;
+
+       /**
+        * remove a sample from the wavecache
+        *
+        * @param filename      pointer to filename
+        */
+//     virtual void RemoveSample(const char* filename)=0;
+       
+       /**
+        * remove all samples from the wavecache
+        */
+       virtual void RemoveAllSamples()=0;
+
+       /**
+        * get a new id from the device
+        *
+        * @param pObject       pointer to soundobject
+        *
+        * @return indication of success
+        */
+       virtual bool GetNewId(SND_SoundObject* pObject)=0;
+       
+       /**
+        * clear an id
+        *
+        * @param pObject       pointer to soundobject
+        */
+       virtual void ClearId(SND_SoundObject* pObject)=0;
+       
+       /**
+        * initialize the listener
+        */
+       virtual void InitListener()=0;
+       
+       /**
+        * set the value of the propagation speed relative to which the 
+        * source velocities are interpreted.
+        * f' = DOPPLER_FACTOR * f * (DOPPLER_VELOCITY - Vl) / (DOPPLER_VELOCITY + Vo)
+        * f:  frequency in sample (soundobject)
+     * f': effective Doppler shifted frequency
+        * Vl: velocity listener
+        * Vo: velocity soundobject
+        *
+        * @param dopplervelocity       scaling factor for doppler effect
+        */
+       virtual void SetDopplerVelocity(MT_Scalar dopplervelocity) const =0;
+       
+       /**
+        * set a scaling to exaggerate or deemphasize the Doppler (pitch) 
+        * shift resulting from the calculation.
+        * f' = DOPPLER_FACTOR * f * (DOPPLER_VELOCITY - Listener_velocity )/(DOPPLER_VELOCITY + object_velocity )
+        *
+        * @param dopplerfactor scaling factor for doppler effect
+        */
+       virtual void SetDopplerFactor(MT_Scalar dopplerfactor) const =0;
+       
+       /**
+        * set the roll-off factor
+        *
+        * @param rollofffactor a global volume scaling factor
+        */
+       virtual void SetListenerRollOffFactor(MT_Scalar rollofffactor) const =0;
+
+       /**
+        * make the context the current one
+        */
+       virtual void MakeCurrent() const =0;
+
+       /**
+        * update the device
+        */
+       virtual void NextFrame() const =0;
+
+       /**
+        * set the volume of the listener.
+        *
+        * @param gain  the mastergain
+        */
+       virtual void SetListenerGain(float gain) const =0;
+
+       /**
+        * connect the buffer with the source
+        *
+        * @param id            the id of the object
+        * @param buffer        the buffer the sample is stored in
+        */
+       virtual void SetObjectBuffer(int id, unsigned int buffer)=0; 
+
+       /**
+        * pause playback of the cd
+        * @param id    the id of the object
+        *
+        * @return the state the object is in
+        */
+       virtual int GetPlayState(int id) =0;
+
+       /**
+        * play a sound belonging to an object.
+        *
+        * @param id    the id of the object
+        */
+       virtual void PlayObject(int id) =0;
+       
+       /**
+        * stop a sound belonging to an object.
+        *
+        * @param id    the id of the object
+        */
+       virtual void StopObject(int id) const =0;
+       
+       /**
+        * stop all sounds.
+        */
+       virtual void StopAllObjects()=0;
+       
+       /**
+        * pause the sound belonging to an object.
+        *
+        * @param id    the id of the object
+        */
+       virtual void PauseObject(int id) const =0;
+
+       /**
+        * set the sound to looping or non-looping.
+        *
+        * @param id    the id of the object
+        * @param loopmode      type of looping (no loop, normal, bidirectional)
+        */
+       virtual void SetObjectLoop(int id, unsigned int loopmode) const =0;
+       
+       /**
+        * set the looppoints of a sound
+        *
+        * @param id    the id of the object
+        * @param loopstart     the startpoint of the loop (in samples)
+        * @param loopend       the endpoint of the loop (in samples)
+        */
+       virtual void SetObjectLoopPoints(int id, unsigned int loopstart, unsigned int loopend) const =0;
+
+       /**
+        * set the pitch of the sound.
+        *
+        * @param id    the id of the object
+        * @param pitch the pitch
+        */
+       virtual void SetObjectPitch(int id, MT_Scalar pitch) const =0;
+       
+       /**
+        * set the gain of the sound.
+        *
+        * @param id    the id of the object
+        * @param gain  the gain
+        */
+       virtual void SetObjectGain(int id, MT_Scalar gain) const =0;
+       
+       /**
+        * ROLLOFF_FACTOR is per-Source parameter the application can use to increase or decrease
+        * the range of a source by decreasing or increasing the attenuation, respectively. The 
+        * default value is 1. The implementation is free to optimize for a ROLLOFF_FACTOR value 
+        * of 0, which indicates that the application does not wish any distance attenuation on 
+        * the respective Source. 
+        *
+        * @param id            the id of the object
+        * @param rolloff       a per-source volume scaling factor
+        */
+       virtual void SetObjectRollOffFactor(int id, MT_Scalar rolloff) const =0;
+
+       /**
+        * min_gain indicates the minimal gain which is always guaranteed for this sound
+        *
+        * @param id            the id of the object
+        * @param mingain       the minimum gain of the object
+        */
+       virtual void SetObjectMinGain(int id, MT_Scalar mingain) const =0;
+
+       /**
+        * max_gain indicates the maximal gain which is always guaranteed for this sound
+        *
+        * @param id            the id of the object
+        * @param maxgain       the maximum gain of the object
+        */
+       virtual void SetObjectMaxGain(int id, MT_Scalar maxgain) const =0;
+       /**
+        * set the distance at which the Listener will experience gain.
+     * G_dB = GAIN - 20*log10(1 + ROLLOFF_FACTOR*(dist-REFERENCE_DISTANCE)/REFERENCE_DISTANCE );
+        *
+        * @param id                            the id of the object
+        * @param referencedistance     the distance at which the listener will start hearing
+        */
+       virtual void SetObjectReferenceDistance(int id, MT_Scalar referencedistance) const =0;
+
+       /**
+        * set the position, velocity and orientation of a sound.
+        *
+        * @param id                    the id of the object
+        * @param position              the position of the object
+        * @param velocity              the velocity of the object
+        * @param orientation   the orientation of the object
+        * @param lisposition   the position of the listener
+        * @param rollofffactor the rollofffactor of the object
+        */
+       virtual void SetObjectTransform(int id,
+                                                                       const MT_Vector3& position,
+                                                                       const MT_Vector3& velocity,
+                                                                       const MT_Matrix3x3& orientation,        
+                                                                       const MT_Vector3& lisposition,
+                                                                       const MT_Scalar& rollofffactor) const =0;
+
+       /**
+        * make a sound 2D
+        *
+        * @param id    the id of the object
+        */
+       virtual void ObjectIs2D(int id) const =0;
+
+       /**
+        * tell the device we want cd suppport
+        */
+       virtual void UseCD() const =0;
+       
+       /**
+        * start playback of the cd
+        *
+        * @param track the tracknumber to start playback from
+        */
+       virtual void PlayCD(int track) const =0;
+
+       /**
+        * pause playback of the cd (true == pause, false == resume)
+        */
+       virtual void PauseCD(bool pause) const =0;
+
+       /**
+        * stop playback of the cd
+        */
+       virtual void StopCD() const =0;
+
+       /**
+        * set the playbackmode of the cd
+        * SND_CD_ALL           play all tracks
+        * SND_CD_TRACK         play one track
+        * SND_CD_TRACKLOOP     play one track looped
+        * SND_CD_RANDOM        play all tracks in random order
+        *
+        * @param playmode      playmode
+        */
+       virtual void SetCDPlaymode(int playmode) const =0;
+       
+       /**
+        * set the volume playback of the cd
+        *
+        * @param gain  the gain
+        */
+       virtual void SetCDGain(MT_Scalar gain) const =0;
+
+       virtual void StartUsingDSP() =0;
+       virtual float* GetSpectrum() =0;
+       virtual void StopUsingDSP() =0;
+
+protected:
+
+       virtual void RevokeSoundObject(SND_SoundObject* pObject)=0;
+};
+
+#endif //SND_IAUDIODEVICE
+
diff --git a/intern/SoundSystem/SND_Object.h b/intern/SoundSystem/SND_Object.h
new file mode 100644 (file)
index 0000000..f238279
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * SND_Object.h
+ *
+ * Abstract sound object
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __SND_OBJECT_H
+#define __SND_OBJECT_H
+
+#include "GEN_List.h"
+#include "MT_Matrix3x3.h"
+#include "SoundDefines.h"
+
+/**
+ *   SND_Object is an interface class for soundobjects, listeners and other
+ *   kinds of sound related thingies. 
+ */
+
+class SND_Object : public GEN_Link
+{
+public:
+       SND_Object() {};
+       virtual ~SND_Object() {};
+};
+
+#endif //__SND_OBJECT_H
+
diff --git a/intern/SoundSystem/SND_Scene.h b/intern/SoundSystem/SND_Scene.h
new file mode 100644 (file)
index 0000000..bb3ff93
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * SND_Scene.h
+ *
+ * The scene for sounds.
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifdef WIN32
+#pragma warning (disable:4786) // get rid of stupid stl-visual compiler debug warning
+#endif //WIN32
+
+#ifndef __SND_SCENE_H
+#define __SND_SCENE_H
+
+#include "SoundDefines.h"
+#include "SND_SoundObject.h"
+#include "SND_CDObject.h"
+#include "SND_SoundListener.h"
+#include "SND_WaveSlot.h"
+
+#include "MT_Vector3.h"
+#include "MT_Matrix3x3.h"
+#include "STR_String.h"
+
+#include <set>
+
+
+class SND_Scene
+{
+       std::set<class SND_SoundObject*>        m_soundobjects;
+
+       GEN_List                                        m_activeobjects;
+       class SND_IAudioDevice*         m_audiodevice;
+       class SND_WaveCache*            m_wavecache;
+       class SND_SoundListener         m_listener;
+       bool                                            m_audio;                        // to check if audio works
+       bool                                            m_audioplayback;        // to check if audioplayback is wanted
+
+       void                                    UpdateListener();
+       void                                    BuildActiveList(MT_Scalar curtime);
+       void                                    UpdateActiveObects();
+       void                                    UpdateCD();
+
+public:
+       SND_Scene(SND_IAudioDevice* adi);
+       ~SND_Scene();
+
+       bool                            IsPlaybackWanted();
+
+       void                            AddActiveObject(SND_SoundObject* pObject, MT_Scalar curtime);
+       void                            RemoveActiveObject(SND_SoundObject* pObject);
+       void                            DeleteObjectWhenFinished(SND_SoundObject* pObject);
+
+       void                            Proceed();
+
+       int                                     LoadSample(const STR_String& samplename,
+                                                                  void* memlocation,
+                                                                  int size);
+       void                            RemoveAllSamples();
+       bool                            CheckBuffer(SND_SoundObject* pObject);
+       bool                            IsSampleLoaded(STR_String& samplename);
+
+       void                            AddObject(SND_SoundObject* pObject);
+       bool                            SetCDObject(SND_CDObject* cdobject);
+       void                            DeleteObject(SND_SoundObject* pObject);
+       void                            RemoveAllObjects();
+       void                            StopAllObjects();
+       int                                     GetObjectStatus(SND_SoundObject* pObject) const;
+
+       void                            SetListenerTransform(const MT_Vector3& pos,
+                                                                                        const MT_Vector3& vel,
+                                                                                        const MT_Matrix3x3& mat);
+
+       SND_SoundListener*      GetListener();
+};
+
+#endif //__SND_SCENE_H
+
diff --git a/intern/SoundSystem/SND_SoundListener.h b/intern/SoundSystem/SND_SoundListener.h
new file mode 100644 (file)
index 0000000..2f6a6e8
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * SND_SoundListener.h
+ *
+ * A SoundListener is for sound what a camera is for vision.
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __SND_SOUNDLISTENER_H
+#define __SND_SOUNDLISTENER_H
+
+#include "SND_Object.h"
+
+class SND_SoundListener : public SND_Object
+{
+public:
+       SND_SoundListener();
+       virtual ~SND_SoundListener();
+
+       void SetStateFlag(unsigned int stateflags);
+       void SetGain(MT_Scalar gain);
+       void SetPosition(const MT_Vector3& pos);
+       void SetVelocity(const MT_Vector3& vel);
+       void SetOrientation(const MT_Matrix3x3& ori);
+       void SetDopplerFactor(MT_Scalar dopplerfactor);
+       void SetDopplerVelocity(MT_Scalar dopplervelocity);
+       void SetScale(MT_Scalar scale);
+
+       void SetModified(bool modified);
+       bool IsModified() const;
+
+       unsigned int    GetStateFlags() const;
+       MT_Scalar               GetGain() const;
+       MT_Vector3              GetPosition() const;
+       MT_Vector3              GetVelocity() const;
+       MT_Matrix3x3    GetOrientation();
+
+       MT_Scalar               GetDopplerFactor() const;
+       MT_Scalar               GetDopplerVelocity() const;
+       MT_Scalar               GetScale() const;
+       
+private:
+       void*                   m_listener;
+       bool                    m_modified;
+
+       MT_Scalar               m_gain;                         /* overall gain */
+       MT_Vector3              m_position;                     /* position; left/right, up/down, in/out */
+       MT_Vector3              m_velocity;                     /* velocity of the listener */
+       MT_Matrix3x3    m_orientation;          /* orientation of the listener */
+
+       MT_Scalar               m_dopplerfactor;        /* scaling factor for the Doppler (pitch) shift */
+       MT_Scalar               m_dopplervelocity;      /* factor for the reference velocity (for Dopplereffect) */
+       MT_Scalar               m_scale;
+};
+
+#endif //__SND_SOUNDLISTENER_H
+
diff --git a/intern/SoundSystem/SND_SoundObject.h b/intern/SoundSystem/SND_SoundObject.h
new file mode 100644 (file)
index 0000000..7bd43fb
--- /dev/null
@@ -0,0 +1,159 @@
+/*
+ * SND_SoundObject.h
+ *
+ * Implementation of the abstract sound object
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __SND_SOUNDOBJECT_H
+#define __SND_SOUNDOBJECT_H
+
+#include "SND_Object.h"
+#include "STR_String.h"
+
+/**
+ *  SND_SoundObject is a class for api independent sounddata storage conected to an actuator
+ */
+
+class SND_SoundObject : public SND_Object
+{
+private:
+       STR_String                      m_samplename;           /* name of the sample */
+       STR_String                      m_objectname;           /* name of the object */
+       unsigned int            m_buffer;
+       
+       bool                            m_active;                       /* is the object active or not? */
+       int                                     m_id;
+       MT_Scalar                       m_lifespan;                     /* the lifespan of the sound seconds */
+       MT_Scalar                       m_timestamp;
+
+       MT_Scalar                       m_length;                       /* length of the sample in seconds */
+
+       MT_Scalar                       m_gain;                         /* the gain of the object */
+       MT_Scalar                       m_rollofffactor;        /* the scaling factor to increase or decrease the range
+                                                                                               of a source by decreasing or increasing the
+                                                                                               attenuation, respectively */
+       MT_Scalar                       m_referencedistance;/* the distance at which the listener will experience
+                                                                                               gain */
+       MT_Scalar                       m_mingain;                      /* indicates the minimal gain which is always guaranteed
+                                                                                               for this source */
+       MT_Scalar                       m_maxgain;                      /* indicates the maximal gain which is always guaranteed
+                                                                                               for this source */
+
+       MT_Scalar                       m_pitch;                        /* the pitch of the object */
+       MT_Vector3                      m_position;                     /* position; left/right, up/down, in/out */
+       MT_Vector3                      m_velocity;                     /* velocity of the object */
+       MT_Matrix3x3            m_orientation;          /* orientation of the object */
+       unsigned int            m_loopmode;                     /* loop normal or bidirectional? */
+       unsigned int            m_loopstart;            /* start of looppoint in samples! */
+       unsigned int            m_loopend;                      /* end of looppoint in samples! */
+       bool                            m_is3d;                         /* is the object 3D or 2D? */
+       int                                     m_playstate;            /* flag for current state of object */
+       bool                            m_modified;
+       unsigned int            m_running;
+       bool                            m_highpriority;         /* may the sound be ditched when we run out of voices? */
+
+public:
+
+       SND_SoundObject();
+       ~SND_SoundObject();
+
+       void SetBuffer(unsigned int buffer);
+       void SetActive(bool active);
+       
+       void StartSound();
+       void StopSound();
+       void PauseSound();
+       void DeleteWhenFinished();
+
+       void SetObjectName(STR_String objectname);
+       void SetSampleName(STR_String samplename);
+       void SetLength(MT_Scalar length);
+       
+       void SetPitch(MT_Scalar pitch);
+       void SetGain(MT_Scalar gain);
+       void SetMinGain(MT_Scalar mingain);
+       void SetMaxGain(MT_Scalar maxgain);
+       void SetRollOffFactor(MT_Scalar rollofffactor);
+       void SetReferenceDistance(MT_Scalar distance);
+       void SetPosition(const MT_Vector3& pos);
+       void SetVelocity(const MT_Vector3& vel);
+       void SetOrientation(const MT_Matrix3x3& orient);
+       void SetLoopMode(unsigned int loopmode);
+       void SetLoopStart(unsigned int loopstart);
+       void SetLoopEnd(unsigned int loopend);
+       void Set3D(bool threedee);
+       void SetPlaystate(int playstate);
+       void SetHighPriority(bool priority);
+
+       void SetId(int id);
+       void SetLifeSpan();
+       void SetTimeStamp(MT_Scalar timestamp);
+
+       void SetModified(bool modified);
+
+       bool IsLifeSpanOver(MT_Scalar curtime) const;
+       bool IsActive() const;
+       bool IsModified() const;
+       bool IsHighPriority() const;
+
+       void InitRunning();
+       bool IsRunning() const;
+       void AddRunning();
+
+       int                                     GetId() const;
+       MT_Scalar                       GetLifeSpan() const;
+       MT_Scalar                       GetTimestamp() const;
+
+       unsigned int            GetBuffer();
+       const STR_String&       GetSampleName();
+       const STR_String&       GetObjectName();
+
+       MT_Scalar                       GetLength() const;
+       MT_Scalar                       GetGain() const;
+       MT_Scalar                       GetPitch() const;
+
+       MT_Scalar                       GetMinGain() const;
+       MT_Scalar                       GetMaxGain() const;
+       MT_Scalar                       GetRollOffFactor() const;
+       MT_Scalar                       GetReferenceDistance() const;
+       
+       MT_Vector3                      GetPosition() const;
+       MT_Vector3                      GetVelocity() const;
+       MT_Matrix3x3            GetOrientation() const;
+       unsigned int            GetLoopMode() const;
+       unsigned int            GetLoopStart() const;
+       unsigned int            GetLoopEnd() const;
+       bool                            Is3D() const;
+       int                                     GetPlaystate() const;
+       
+};
+
+#endif //__SND_SOUNDOBJECT_H
+
diff --git a/intern/SoundSystem/SND_Utils.h b/intern/SoundSystem/SND_Utils.h
new file mode 100644 (file)
index 0000000..82b7c69
--- /dev/null
@@ -0,0 +1,111 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#ifndef        SND_UTILS_H
+#define SND_UTILS_H
+
+#include "SND_WaveSlot.h"
+
+#ifdef __cplusplus
+extern "C"
+{ 
+#endif
+
+typedef struct
+{
+       unsigned char   riff[4];
+       signed int              size;
+       unsigned char   type[4];
+} WavFileHeader;
+
+typedef struct
+{
+       unsigned short  format;
+       unsigned short  numberofchannels;
+       unsigned int    samplerate;
+       unsigned int    bytespersec;
+       unsigned short  blockalignment;
+       unsigned short  bitrate;
+} WavFmtHeader;
+
+typedef struct
+{
+       unsigned short  size;
+       unsigned short  samplesperblock;
+} WavFmtExHeader;
+
+typedef struct
+{
+       unsigned int            Manufacturer;
+       unsigned int            Product;
+       unsigned int            SamplePeriod;
+       unsigned int            Note;
+       unsigned int            FineTune;
+       unsigned int            SMPTEFormat;
+       unsigned int            SMPTEOffest;
+       unsigned int            loops;
+       unsigned int            SamplerData;
+       struct
+       {
+               unsigned int    Identifier;
+               unsigned int    Type;
+               unsigned int    Start;
+               unsigned int    End;
+               unsigned int    Fraction;
+               unsigned int    Count;
+       } Loop[1];
+} WavSampleHeader;
+
+typedef struct
+{
+       unsigned char   id[4];
+       unsigned int    size;
+} WavChunkHeader;
+
+/**  
+ *     loads a sample and returns a pointer
+ */
+extern void* SND_LoadSample(char *filename);
+
+extern bool SND_IsSampleValid(const STR_String& name, void* memlocation);
+extern unsigned int SND_GetSampleFormat(void* sample);
+extern unsigned int SND_GetNumberOfChannels(void* sample);
+extern unsigned int SND_GetSampleRate(void* sample);
+extern unsigned int SND_GetBitRate(void* sample);
+extern unsigned int SND_GetNumberOfSamples(void* sample, unsigned int sample_length);
+extern unsigned int SND_GetHeaderSize(void* sample, unsigned int sample_length);
+extern unsigned int SND_GetExtraChunk(void* sample);
+
+extern void SND_GetSampleInfo(signed char* sample, SND_WaveSlot* waveslot);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/intern/SoundSystem/SND_WaveCache.h b/intern/SoundSystem/SND_WaveCache.h
new file mode 100644 (file)
index 0000000..2c45779
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * SND_WaveCache.h
+ *
+ * abstract wavecache, a way to organize samples
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifdef WIN32
+#pragma warning (disable:4786) // get rid of stupid stl-visual compiler debug warning
+#endif //WIN32
+
+#ifndef __SND_WAVECACHE_H
+#define __SND_WAVECACHE_H
+
+#include "SND_WaveSlot.h"
+#include "SoundDefines.h"
+#include "SND_SoundObject.h"
+#include <map>
+
+class SND_WaveCache
+{
+public:
+       SND_WaveCache();
+       virtual ~SND_WaveCache();
+
+       SND_WaveSlot*                   GetWaveSlot(const STR_String& samplename);
+
+       void                                    RemoveAllSamples();
+       void                                    RemoveSample(const STR_String& samplename, int buffer);
+
+private:
+       std::map<STR_String, SND_WaveSlot*> m_samplecache;
+
+       SND_WaveSlot*                   m_bufferList[NUM_BUFFERS];
+
+       void                                    FreeSamples();
+};
+
+#endif //__SND_WAVECACHE_H
+
diff --git a/intern/SoundSystem/SND_WaveSlot.h b/intern/SoundSystem/SND_WaveSlot.h
new file mode 100644 (file)
index 0000000..75cddfa
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * SND_WaveSlot.cpp
+ *
+ * class for storing sample related information
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __SND_WAVESLOT_H
+#define __SND_WAVESLOT_H
+
+#include "STR_String.h"
+
+class SND_WaveSlot
+{
+       STR_String              m_samplename;
+       bool                    m_loaded;
+       void*                   m_data;
+       unsigned int    m_buffer;
+       unsigned int    m_sampleformat;
+       unsigned int    m_numberofchannels;
+       unsigned int    m_samplerate;
+       unsigned int    m_bitrate;
+       unsigned int    m_numberofsamples;
+       unsigned int    m_filesize;
+
+public:
+
+       SND_WaveSlot(): m_loaded(false),
+                                       m_data(NULL),
+                                       m_buffer(0),
+                                       m_sampleformat(0),
+                                       m_numberofchannels(0),
+                                       m_samplerate(0),
+                                       m_bitrate(0),
+                                       m_numberofsamples(0),
+                                       m_filesize(0)
+                                       {};
+       ~SND_WaveSlot();
+
+       void SetSampleName(STR_String samplename);
+       void SetLoaded(bool loaded);
+       void SetData(void* data);
+       void SetBuffer(unsigned int buffer);
+       void SetSampleFormat(unsigned int sampleformat);
+       void SetNumberOfChannels(unsigned int numberofchannels);
+       void SetSampleRate(unsigned int samplerate);
+       void SetBitRate(unsigned int bitrate);
+       void SetNumberOfSamples(unsigned int numberofsamples);
+       void SetFileSize(unsigned int filesize);
+       
+
+       const STR_String&       GetSampleName();
+       bool                            IsLoaded() const;
+       void*                           GetData();
+       unsigned int            GetBuffer() const;
+       unsigned int            GetSampleFormat() const;
+       unsigned int            GetNumberOfChannels() const;
+       unsigned int            GetSampleRate() const;
+       unsigned int            GetBitRate() const;
+       unsigned int            GetNumberOfSamples() const;
+       unsigned int            GetFileSize() const;
+
+};
+
+#endif //__SND_WAVESLOT_H
+
diff --git a/intern/SoundSystem/SND_test/Makefile b/intern/SoundSystem/SND_test/Makefile
new file mode 100644 (file)
index 0000000..279eeac
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# $Id$
+#
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+# All rights reserved.
+#
+# The Original Code is: all of this file.
+#
+# Contributor(s): none yet.
+#
+# ***** END GPL LICENSE BLOCK *****
+#
+#
+
+LIBNAME = soundsystem
+DIR = $(OCGDIR)/intern/SoundSystem
+ALLTARGETS = $(OBJS) $(DIR)/$(DEBUG_DIR)SoundSystem
+
+include nan_compile.mk
+
+CPPFLAGS += $(NAN_LEVEL_1_WARNINGS)
+
+CPPFLAGS += -I$(NAN_MOTO)/include
+CPPFLAGS += -I.. -I../SND_BlenderWaveCache -I../SND_OpenAL
+
+TESTLIB = $(OCGDIR)/gameengine/OpenALSoundSystem/$(DEBUG_DIR)libOpenALSoundSystem.a
+TESTLIB += $(OCGDIR)/gameengine/BlenderWaveCache/$(DEBUG_DIR)libBlenderWaveCache.a
+TESTLIB += $(OCGDIR)/intern/SoundSystem/$(DEBUG_DIR)libsoundsystem.a
+TESTLIB += $(NAN_OPENAL)/lib/libopenal.a
+
+$(DIR)/$(DEBUG_DIR)SoundSystem: $(OBJS) $(TESTLIB)
+       $(CC) $(LDFLAGS) -o $@ $(OBJS) $(TESTLIB) -lm -pthread -ldl -lstdc++
diff --git a/intern/SoundSystem/SND_test/SND_test.c b/intern/SoundSystem/SND_test/SND_test.c
new file mode 100644 (file)
index 0000000..0d19dc2
--- /dev/null
@@ -0,0 +1,154 @@
+/*  SND_test.c   nov 2000
+*  
+*  testfile for the SND module
+* 
+* janco verduin
+*
+* $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+*/
+
+#include "SND_C-api.h"
+#include "BlenderWaveCacheCApi.h"
+#include "OpenALC-Api.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#if defined(WIN32)
+#include <io.h>
+#else
+#include <unistd.h>
+#endif
+#include <fcntl.h>
+
+static int buf[3];
+
+float oPos[3]={3.0, 0.0,-1.0};
+float oVel[3]={0.0, 0.0, 1.0};
+float oOri[6]={0.0, 0.0, 1.0, 0.0, 1.0, 0.0};
+
+void* ReadFile(char *filename)
+{
+       int file, filelen;
+       void *data = NULL;
+
+#if defined(WIN32)     
+       file = open(filename, O_BINARY|O_RDONLY);
+#else
+       file = open(filename, 0|O_RDONLY);
+#endif
+
+       if (file == -1) {
+               printf("can't open file.\n");
+               printf("press q for quit.\n");
+
+       }
+       else {
+               filelen = lseek(file, 0, SEEK_END);
+               lseek(file, 0, SEEK_SET);
+               
+               if (filelen != 0){
+                       data = malloc(filelen);
+                       if (read(file, data, filelen) != filelen) {
+                               free(data);
+                               data = NULL;
+                       }
+               }
+               close(file);
+               
+       }
+       return (data);
+}
+
+int main(int argc, char* argv[])
+{
+       int ch;
+       char* samplename = NULL;
+       void* sampleinmemory = NULL;
+       SND_CacheHandle wavecache = NULL;
+       SND_SceneHandle scene = NULL;
+       SND_ObjectHandle object = NULL;
+       
+       wavecache = SND_GetWaveCache();
+       scene = SND_CreateOpenALScene(wavecache);
+
+       samplename = "2.wav";
+       sampleinmemory = ReadFile(samplename);
+       
+       if (sampleinmemory) {
+
+               object = SND_CreateObject();
+               SND_AddMemoryLocation(samplename, sampleinmemory);
+               SND_SetSampleName(object, samplename);
+               SND_AddObject(scene, object);
+               printf("go your gang...\n");
+               printf("1: play\n");
+               printf("2: stop\n");
+               printf("q: quit\n");
+       }
+       do
+       {
+               ch = getchar();
+               ch = toupper(ch);
+               switch (ch)
+               {
+               case '1':
+                       {
+                               SND_SetPitch(object, 1.0);
+                               SND_SetGain(object, 1.0);
+                               SND_StartSound(object);
+                               break;
+                       }
+               case '2':
+                       {
+                               SND_StopSound(object);
+                               break;
+                       }
+               default:
+                       break;
+               }
+
+               SND_Proceed(scene);
+
+       } while (ch != 'Q');
+       
+       if (object) {
+               
+               SND_RemoveObject(scene, object);
+               SND_DeleteObject(object);
+       }
+       
+       SND_DeleteScene(scene);
+       SND_DeleteCache();
+       
+       return 0;
+       
+}
diff --git a/intern/SoundSystem/SoundDefines.h b/intern/SoundSystem/SoundDefines.h
new file mode 100644 (file)
index 0000000..5238507
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ * SoundDefines.h
+ *
+ * this is where all kinds of defines are stored
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __SOUNDDEFINES_H
+#define __SOUNDDEFINES_H
+
+/* the types of devices */
+enum
+{
+       snd_e_dummydevice = 0,
+       snd_e_openaldevice
+};
+
+/* general stuff */
+#define NUM_BUFFERS                                            128
+#define NUM_SOURCES                                            24 /* 24 is the limit for openal on windows, was 16 in 2.47 and previous */
+
+/* openal related stuff */
+#define AL_LOOPING                                             0x1007
+
+/* activelist defines */
+enum
+{
+       SND_REMOVE_ACTIVE_OBJECT = 0,
+       SND_ADD_ACTIVE_OBJECT,
+       SND_DO_NOTHING
+};
+
+/* playstate flags */
+enum
+{
+       SND_UNKNOWN = -1,
+       SND_INITIAL,
+       SND_MUST_PLAY,
+       SND_PLAYING,
+       SND_MUST_STOP,
+       SND_STOPPED,
+       SND_MUST_PAUSE,
+       SND_PAUSED,
+       SND_MUST_RESUME,
+       SND_MUST_STOP_WHEN_FINISHED,
+       SND_MUST_BE_DELETED
+};
+
+/* loopmodes */
+enum
+{
+       SND_LOOP_OFF = 0,
+       SND_LOOP_NORMAL,
+       SND_LOOP_BIDIRECTIONAL
+};
+
+
+/* cd playstate flags */
+enum
+{
+       SND_CD_ALL = 0,
+       SND_CD_TRACK,
+       SND_CD_TRACKLOOP
+};
+
+/* sample types */
+enum
+{
+       SND_WAVE_FORMAT_UNKNOWN = 0,
+       SND_WAVE_FORMAT_PCM,
+       SND_WAVE_FORMAT_ADPCM,
+       SND_WAVE_FORMAT_ALAW = 6,
+       SND_WAVE_FORMAT_MULAW,
+       SND_WAVE_FORMAT_DIALOGIC_OKI_ADPCM = 17,
+       SND_WAVE_FORMAT_CONTROL_RES_VQLPC = 34,
+       SND_WAVE_FORMAT_GSM_610 = 49,
+       SND_WAVE_FORMAT_MPEG3 = 85
+};
+
+#endif //__SOUNDDEFINES_H
+
similarity index 61%
rename from source/blender/collada/Makefile
rename to intern/SoundSystem/dummy/Makefile
index f2fed004a2538f027e271ff9be2f6372ea1f4a42..829135dde98eaae55f716ee8a2e5631e58adeb13 100644 (file)
 # along with this program; if not, write to the Free Software Foundation,
 # Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #
-# The Original Code is Copyright (C) 2008 Blender Foundation.
+# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
 # All rights reserved.
 #
+# The Original Code is: all of this file.
+#
 # Contributor(s): none yet.
 #
 # ***** END GPL LICENSE BLOCK *****
 #
 #
 
-LIBNAME = bf_collada
-DIR = $(OCGDIR)/blender/bf_collada
+LIBNAME = DummySoundSystem
+DIR = $(OCGDIR)/intern/$(LIBNAME)
 
 include nan_compile.mk
 
-CCFLAGS += $(LEVEL_1_C_WARNINGS)
+CCFLAGS += $(LEVEL_1_CPP_WARNINGS)
 
-CPPFLAGS += -I../makesdna -I../blenlib -I../blenkernel -I../editors/include
-CPPFLAGS += -I../windowmanager -I../makesrna
-CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
-CPPFLAGS += -I$(BF_OPENCOLLADA)/include/COLLADABaseUtils
-CPPFLAGS += -I$(BF_OPENCOLLADA)/include/COLLADAFrameWork
-CPPFLAGS += -I$(BF_OPENCOLLADA)/include/COLLADAStreamWriter
-CPPFLAGS += -I$(BF_OPENCOLLADA)/include/COLLADASaxFrameworkLoader
+CPPFLAGS += -I$(NAN_STRING)/include    
+CPPFLAGS += -I$(NAN_MOTO)/include
+CPPFLAGS += -I../intern
+CPPFLAGS += -I..
+CPPFLAGS += -I.
diff --git a/intern/SoundSystem/dummy/SND_DummyDevice.cpp b/intern/SoundSystem/dummy/SND_DummyDevice.cpp
new file mode 100644 (file)
index 0000000..672c73e
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ * SND_DummyDevice derived from SND_IAudioDevice
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef WIN32
+#pragma warning (disable:4786) // get rid of stupid stl-visual compiler debug warning
+#endif //WIN32
+
+#include "SND_DummyDevice.h"
+
+SND_DummyDevice::SND_DummyDevice()
+{
+}
+
+SND_DummyDevice::~SND_DummyDevice()
+{
+#ifdef ONTKEVER
+       printf("SND_DummyDevice destructor");
+#endif
+}
+
+
diff --git a/intern/SoundSystem/dummy/SND_DummyDevice.h b/intern/SoundSystem/dummy/SND_DummyDevice.h
new file mode 100644 (file)
index 0000000..988f731
--- /dev/null
@@ -0,0 +1,93 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#ifndef SND_DUMMYDEVICE
+#define SND_DUMMYDEVICE
+
+#include "SND_AudioDevice.h"
+
+class SND_DummyDevice : public SND_AudioDevice
+{
+public:
+       SND_DummyDevice();
+       ~SND_DummyDevice();
+
+       bool Init() { return false; }
+
+       SND_WaveSlot* LoadSample(const STR_String& samplename,
+                                                        void* memlocation,
+                                                        int size) { return NULL; }
+
+       void InitListener() {};
+       void SetListenerGain(float gain) const {};
+       void SetDopplerVelocity(MT_Scalar dopplervelocity) const {};
+       void SetDopplerFactor(MT_Scalar dopplerfactor) const {};
+       void SetListenerRollOffFactor(MT_Scalar rollofffactor) const {};
+
+       void MakeCurrent() const {};
+
+       void NextFrame() const {};
+
+       void SetObjectBuffer(int id, unsigned int buffer) {}; 
+
+       int GetPlayState(int id) { return SND_UNKNOWN; }
+       void PlayObject(int id) {};
+       void StopObject(int id) const {};
+       void StopAllObjects() {};
+       void PauseObject(int id) const {};
+
+       void SetObjectLoop(int id, unsigned int loopmode) const {};
+       void SetObjectLoopPoints(int id, unsigned int loopstart, unsigned int loopend) const {};
+       void SetObjectPitch(int id, MT_Scalar pitch) const {};
+       void SetObjectGain(int id, MT_Scalar gain) const {};
+       void SetObjectMinGain(int id, MT_Scalar mingain) const {};
+       void SetObjectMaxGain(int id, MT_Scalar maxgain) const {};
+       void SetObjectRollOffFactor(int id, MT_Scalar rolloff) const {};
+       void SetObjectReferenceDistance(int id, MT_Scalar distance) const {};
+
+       void SetObjectTransform(int id,
+                                                       const MT_Vector3& position,
+                                                       const MT_Vector3& velocity,
+                                                       const MT_Matrix3x3& orientation,        
+                                                       const MT_Vector3& lisposition,
+                                                       const MT_Scalar& rollofffactor) const {};
+       void ObjectIs2D(int id) const {};
+
+       void PlayCD(int track) const {};
+       void PauseCD(bool pause) const {};
+       void StopCD() const {};
+       void SetCDPlaymode(int playmode) const {};
+       void SetCDGain(MT_Scalar gain) const {};
+
+       void StartUsingDSP()    {};
+       float* GetSpectrum()    { return NULL; }
+       void StopUsingDSP()             {};
+};
+
+#endif //SND_DUMMYDEVICE
+
diff --git a/intern/SoundSystem/intern/Makefile b/intern/SoundSystem/intern/Makefile
new file mode 100644 (file)
index 0000000..7684b6b
--- /dev/null
@@ -0,0 +1,44 @@
+#
+# $Id$
+#
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+# All rights reserved.
+#
+# The Original Code is: all of this file.
+#
+# Contributor(s): none yet.
+#
+# ***** END GPL LICENSE BLOCK *****
+#
+#
+
+LIBNAME = SoundSystem
+DIR = $(OCGDIR)/intern/SoundSystem
+
+include nan_compile.mk
+
+CCFLAGS += $(LEVEL_1_CPP_WARNINGS)
+
+CPPFLAGS += -I$(NAN_STRING)/include    
+CPPFLAGS += -I$(NAN_MOTO)/include
+CPPFLAGS += -I../../../source/blender/include
+CPPFLAGS += -I../dummy
+CPPFLAGS += -I../openal
+CPPFLAGS += -I..
+CPPFLAGS += -I.
diff --git a/intern/SoundSystem/intern/SND_AudioDevice.cpp b/intern/SoundSystem/intern/SND_AudioDevice.cpp
new file mode 100644 (file)
index 0000000..4a5c0e2
--- /dev/null
@@ -0,0 +1,242 @@
+/**
+ * $Id$
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "SND_AudioDevice.h"
+#include "SND_SoundObject.h"
+
+#ifdef WIN32
+// This warning tells us about truncation of __long__ stl-generated names.
+// It can occasionally cause DevStudio to have internal compiler warnings.
+#pragma warning( disable : 4786 )     
+#endif
+
+
+SND_AudioDevice::SND_AudioDevice()
+{
+       m_wavecache = NULL;
+       m_audio = false;
+
+       for (int i = 0; i < NUM_SOURCES; i++)
+       {
+               m_idObjectArray[i] = new SND_IdObject();
+               m_idObjectArray[i]->SetId(i);
+               m_idObjectArray[i]->SetSoundObject(NULL);
+               m_idObjectList.addTail(m_idObjectArray[i]);
+       }
+}
+
+
+
+SND_AudioDevice::~SND_AudioDevice()
+{
+       for (int i = 0; i < NUM_SOURCES; i++)
+       {
+               delete m_idObjectArray[i];
+               m_idObjectArray[i] = NULL;
+       }
+
+       if (m_wavecache)
+       {
+               delete m_wavecache;
+               m_wavecache = NULL;
+       }
+}
+
+
+
+bool SND_AudioDevice::IsInitialized()
+{
+       return m_audio;
+}
+
+
+
+SND_WaveCache* SND_AudioDevice::GetWaveCache() const
+{
+       return m_wavecache;
+}
+
+
+
+/* seeks an unused id and returns it */
+bool SND_AudioDevice::GetNewId(SND_SoundObject* pObject)
+{
+#ifdef ONTKEVER
+       printf("SND_AudioDevice::GetNewId\n");
+#endif
+
+       bool result = false;
+
+       // first, get the oldest (the first) idobject
+       SND_IdObject* pIdObject = (SND_IdObject*)m_idObjectList.getHead();
+
+       if (pIdObject->isTail())
+       {
+       }
+       else
+       {
+               // find the first id object which doesn't have a high priority soundobject
+               bool ThisSoundMustStay = false;
+               bool OutOfIds = false;
+
+               do
+               {
+                       // if no soundobject present, it's seat may be taken
+                       if (pIdObject->GetSoundObject())
+                       {
+                               // and also if it ain't highprio
+                               if (pIdObject->GetSoundObject()->IsHighPriority())
+                               {
+                                       ThisSoundMustStay = true;
+                                       pIdObject = (SND_IdObject*)pIdObject->getNext();
+                                       
+                                       // if the last one is a priority sound too, then there are no id's left
+                                       // and we won't add any new sounds
+                                       if (pIdObject->isTail())
+                                               OutOfIds = true;
+                               }
+                               else
+                               {
+                                       ThisSoundMustStay = false;
+                               }
+                       }
+                       else
+                       {
+                               ThisSoundMustStay = false;
+                       }
+
+               } while (ThisSoundMustStay && !OutOfIds);
+
+               if (!OutOfIds)
+               {
+                       SND_SoundObject* oldobject = pIdObject->GetSoundObject();
+                       
+                       // revoke the old object if present
+                       if (oldobject)
+                       {
+#ifdef ONTKEVER
+                               printf("oldobject: %x\n", oldobject);
+#endif
+                               RevokeSoundObject(oldobject);
+                       }
+                       
+                       // set the new soundobject into the idobject
+                       pIdObject->SetSoundObject(pObject);
+                       
+                       // set the id into the soundobject
+                       int id = pIdObject->GetId();
+                       pObject->SetId(id);
+                       
+                       // connect the new id to the buffer the sample is stored in
+                       SetObjectBuffer(id, pObject->GetBuffer());
+                       
+                       // remove the idobject from the list and add it in the back again
+                       pIdObject->remove();
+                       m_idObjectList.addTail(pIdObject);
+                       
+                       result = true;
+               }
+       }
+
+       return result;
+}
+
+
+
+void SND_AudioDevice::ClearId(SND_SoundObject* pObject)
+{
+#ifdef ONTKEVER
+       printf("SND_AudioDevice::ClearId\n");
+#endif
+
+       if (pObject)
+       {
+               int id = pObject->GetId();
+               
+               if (id != -1)
+               {
+                       // lets get the idobject belonging to the soundobject
+                       SND_IdObject* pIdObject = m_idObjectArray[id];
+                       SND_SoundObject* oldobject = pIdObject->GetSoundObject();
+                       
+                       if (oldobject)
+                       {
+                               RevokeSoundObject(oldobject);
+
+                               // clear the idobject from the soundobject
+                               pIdObject->SetSoundObject(NULL);
+                       }
+
+                       // remove the idobject and place it in front
+                       pIdObject->remove();
+                       m_idObjectList.addHead(pIdObject);
+               }
+       }
+}
+
+
+
+void SND_AudioDevice::RevokeSoundObject(SND_SoundObject* pObject)
+{
+#ifdef ONTKEVER
+       printf("SND_AudioDevice::RevokeSoundObject\n");
+#endif
+
+       // stop the soundobject
+       int id = pObject->GetId();
+
+       if (id >= 0 && id < NUM_SOURCES)
+       {
+               StopObject(id);
+
+               // remove the object from the 'activelist'
+               pObject->SetActive(false);
+
+#ifdef ONTKEVER
+               printf("pObject->remove();\n");
+#endif
+       }
+
+       // make sure its id is invalid
+       pObject->SetId(-1);
+}
+
+/*
+void SND_AudioDevice::RemoveSample(const char* filename)
+{
+       if (m_wavecache)
+               m_wavecache->RemoveSample(filename);
+}
+*/
+
+void SND_AudioDevice::RemoveAllSamples()
+{
+       if (m_wavecache)
+               m_wavecache->RemoveAllSamples();
+}
+
diff --git a/intern/SoundSystem/intern/SND_AudioDevice.h b/intern/SoundSystem/intern/SND_AudioDevice.h
new file mode 100644 (file)
index 0000000..54e8fee
--- /dev/null
@@ -0,0 +1,115 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#ifndef SND_AUDIODEVICE
+#define SND_AUDIODEVICE
+
+#include "SND_IAudioDevice.h"
+#include "SoundDefines.h"
+#include "SND_IdObject.h"
+
+class SND_AudioDevice : public SND_IAudioDevice
+{
+public:
+       SND_AudioDevice();
+       virtual ~SND_AudioDevice();
+
+       virtual bool IsInitialized();
+
+       SND_WaveCache* GetWaveCache() const;
+
+       bool GetNewId(SND_SoundObject* pObject);
+       void ClearId(SND_SoundObject* pObject);
+
+       void UseCD() const {};
+
+       /* to be implemented in derived class
+
+       virtual SND_WaveSlot* LoadSample(const STR_String& samplename,
+                                                                        void* memlocation,
+                                                                        int size) =0;
+       */
+//     void RemoveSample(const char* filename);
+       void RemoveAllSamples();
+
+       /* to be implemented in derived class
+
+       virtual void InitListener()=0;
+       virtual void SetListenerGain(float gain) const =0;
+       virtual void SetDopplerVelocity(MT_Scalar dopplervelocity) const =0;
+       virtual void SetDopplerFactor(MT_Scalar dopplerfactor) const =0;
+       virtual void SetListenerRollOffFactor(MT_Scalar rollofffactor) const =0;
+       
+       virtual void MakeCurrent() const =0;
+
+       virtual void UpdateDevice() const =0;
+
+       virtual void SetObjectBuffer(int id, unsigned int buffer)=0; 
+       virtual int GetPlayState(int id)=0;
+       virtual void PlayObject(int id)=0;
+       virtual void StopObject(int id) const =0;
+       virtual void StopAllObjects()=0;
+       virtual void PauseObject(int id) const =0;
+
+       virtual void SetObjectLoop(int id, bool loop) const =0;
+       virtual void SetObjectLoopPoints(int id, unsigned int loopstart, unsigned int loopend) const =0;
+       virtual void SetObjectPitch(int id, MT_Scalar pitch) const =0;
+       virtual void SetObjectGain(int id, MT_Scalar gain) const =0;
+       virtual void SetObjectRollOffFactor(int id, MT_Scalar rolloff) const =0;
+       virtual void SetObjectMinGain(int id, MT_Scalar mingain) const =0;
+       virtual void SetObjectMaxGain(int id, MT_Scalar maxgain) const =0;
+       virtual void SetObjectReferenceDistance(int id, MT_Scalar referencedistance) const =0;
+
+       virtual void SetObjectTransform(int id,
+                                                                       const MT_Vector3& position,
+                                                                       const MT_Vector3& velocity,
+                                                                       const MT_Matrix3x3& orientation,        
+                                                                       const MT_Vector3& lisposition,
+                                                                       const MT_Scalar& rollofffactor) const =0;
+       virtual void ObjectIs2D(int id) const =0;
+
+       virtual void PlayCD(int track) const =0;
+       virtual void PauseCD(bool pause) const =0;
+       virtual void StopCD() const =0;
+       virtual void SetCDPlaymode(int playmode) const =0;
+       virtual void SetCDGain(MT_Scalar gain) const =0;
+       virtual float* GetSpectrum() =0;
+       */
+
+protected:
+       bool                                                    m_audio;
+       GEN_List                                                m_idObjectList;
+       SND_IdObject*                                   m_idObjectArray[NUM_SOURCES];
+       SND_WaveCache*                                  m_wavecache;
+
+private:
+       void             RevokeSoundObject(SND_SoundObject* pObject);
+};
+
+#endif //SND_AUDIODEVICE
+
diff --git a/intern/SoundSystem/intern/SND_C-api.cpp b/intern/SoundSystem/intern/SND_C-api.cpp
new file mode 100644 (file)
index 0000000..0984626
--- /dev/null
@@ -0,0 +1,392 @@
+/*
+ * SND_C-Api.cpp
+ *
+ * C Api for soundmodule
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "SND_C-api.h"
+#include "SND_DeviceManager.h"
+#include "SND_Scene.h"
+
+#ifdef WIN32
+#pragma warning (disable:4786) // get rid of stupid stl-visual compiler debug warning
+#endif //WIN32
+
+
+
+void SND_SetDeviceType(int device_type)
+{
+       SND_DeviceManager::SetDeviceType(device_type);
+}
+
+
+
+SND_AudioDeviceInterfaceHandle SND_GetAudioDevice()
+{
+       SND_IAudioDevice* audiodevice = NULL;
+
+       SND_DeviceManager::Subscribe();
+       audiodevice = SND_DeviceManager::Instance();
+
+       if (!audiodevice->IsInitialized())
+       {
+               SND_DeviceManager::SetDeviceType(snd_e_dummydevice);
+               audiodevice = SND_DeviceManager::Instance();
+       }
+
+       return (SND_AudioDeviceInterfaceHandle)audiodevice;
+}
+
+
+
+void SND_ReleaseDevice()
+{
+       SND_DeviceManager::Unsubscribe();
+}
+
+
+
+int SND_IsPlaybackWanted(SND_SceneHandle scene)
+{
+       assert(scene);
+       bool result = ((SND_Scene*)scene)->IsPlaybackWanted();
+
+       return (int)result;
+}
+
+
+
+// create a scene
+SND_SceneHandle SND_CreateScene(SND_AudioDeviceInterfaceHandle audiodevice)
+{
+       // initialize sound scene and object
+       SND_Scene* scene = new SND_Scene((SND_IAudioDevice*)audiodevice);
+
+       return (SND_SceneHandle)scene; 
+}
+
+
+
+void SND_DeleteScene(SND_SceneHandle scene)
+{
+    assert(scene);
+    delete (SND_Scene*)scene;
+}
+
+
+
+int SND_AddSample(SND_SceneHandle scene,
+                                 const char* filename,
+                                 void* memlocation,
+                                 int size)
+{
+       assert(scene);
+       assert(memlocation);
+       int buffer = ((SND_Scene*)scene)->LoadSample(filename, memlocation, size);
+       
+       return buffer;
+}
+
+
+
+void SND_RemoveAllSamples(SND_SceneHandle scene)
+{
+       assert(scene);
+       ((SND_Scene*)scene)->RemoveAllSamples();
+}
+
+
+
+int SND_CheckBuffer(SND_SceneHandle scene, SND_ObjectHandle object)
+{
+       assert(scene);
+       assert(object);
+       int result = (int)((SND_Scene*)scene)->CheckBuffer((SND_SoundObject*)object);
+
+       return result;
+}
+
+
+
+void SND_AddSound(SND_SceneHandle scene, SND_ObjectHandle object)
+{
+    assert(scene);
+    assert(object);
+    ((SND_Scene*)scene)->AddObject((SND_SoundObject *)object);
+}
+
+
+
+void SND_RemoveSound(SND_SceneHandle scene, SND_ObjectHandle object)
+{
+    assert(scene);
+    assert(object);
+    ((SND_Scene*)scene)->DeleteObject((SND_SoundObject *)object);
+}
+
+
+
+void SND_RemoveAllSounds(SND_SceneHandle scene)
+{
+       assert(scene);
+    ((SND_Scene*)scene)->RemoveAllObjects();   
+}
+
+
+
+void SND_StopAllSounds(SND_SceneHandle scene)
+{
+       assert(scene);
+       ((SND_Scene*)scene)->StopAllObjects();
+}
+
+
+
+void SND_Proceed(SND_AudioDeviceInterfaceHandle audiodevice, SND_SceneHandle scene)
+{
+       assert(scene);
+       ((SND_Scene*)scene)->Proceed();
+       ((SND_IAudioDevice*)audiodevice)->NextFrame();
+}
+
+
+
+SND_ListenerHandle SND_GetListener(SND_SceneHandle scene)
+{
+       assert(scene);
+       return (SND_ListenerHandle)((SND_Scene*)scene)->GetListener();
+}
+
+
+
+void SND_SetListenerGain(SND_SceneHandle scene, double gain)
+{
+       assert(scene);
+       SND_SoundListener* listener = ((SND_Scene*)scene)->GetListener();
+       listener->SetGain((MT_Scalar)gain);
+}
+
+
+
+void SND_SetDopplerFactor(SND_SceneHandle scene, double dopplerfactor)
+{
+       assert(scene);
+       SND_SoundListener* listener = ((SND_Scene*)scene)->GetListener();
+       listener->SetDopplerFactor(dopplerfactor);
+}
+
+
+
+void SND_SetDopplerVelocity(SND_SceneHandle scene, double dopplervelocity)
+{
+       assert(scene);
+       SND_SoundListener* listener = ((SND_Scene*)scene)->GetListener();
+       listener->SetDopplerVelocity(dopplervelocity);
+}
+
+
+
+// Object instantiation
+SND_ObjectHandle SND_CreateSound()
+{
+       return (SND_ObjectHandle)new SND_SoundObject();
+}
+
+
+
+void SND_DeleteSound(SND_ObjectHandle object)
+{
+       assert(object);
+    delete (SND_SoundObject*)object;
+}
+
+
+
+// Object control
+void SND_StartSound(SND_SceneHandle scene, SND_ObjectHandle object)
+{
+       assert(scene);
+       assert(object);
+       ((SND_Scene*)scene)->AddActiveObject((SND_SoundObject*)object, 0);
+}
+
+
+
+void SND_StopSound(SND_SceneHandle scene, SND_ObjectHandle object)
+{
+       assert(scene);
+       assert(object);
+       ((SND_Scene*)scene)->RemoveActiveObject((SND_SoundObject*)object);
+}
+
+
+
+void SND_PauseSound(SND_SceneHandle scene, SND_ObjectHandle object)
+{
+       assert(scene);
+       assert(object);
+       ((SND_Scene*)scene)->RemoveActiveObject((SND_SoundObject*)object);
+}
+
+
+
+void SND_SetSampleName(SND_ObjectHandle object, char* samplename)
+{
+       assert(object);
+       STR_String name = samplename;
+       ((SND_SoundObject*)object)->SetSampleName(name);
+}
+
+
+
+void SND_SetGain(SND_ObjectHandle object, double gain)
+{
+       assert(object);
+       ((SND_SoundObject*)object)->SetGain(gain);
+}
+
+
+
+void SND_SetMinimumGain(SND_ObjectHandle object, double minimumgain)
+{
+       assert(object);
+       ((SND_SoundObject*)object)->SetMinGain(minimumgain);
+}
+
+
+
+void SND_SetMaximumGain(SND_ObjectHandle object, double maximumgain)
+{
+       assert(object);
+       ((SND_SoundObject*)object)->SetMaxGain(maximumgain);
+}
+
+
+
+void SND_SetRollOffFactor(SND_ObjectHandle object, double rollofffactor)
+{
+       assert(object);
+       ((SND_SoundObject*)object)->SetRollOffFactor(rollofffactor);
+}
+
+
+
+void SND_SetReferenceDistance(SND_ObjectHandle object, double referencedistance)
+{
+       assert(object);
+       ((SND_SoundObject*)object)->SetReferenceDistance(referencedistance);
+}
+
+
+
+void SND_SetPitch(SND_ObjectHandle object, double pitch)
+{
+       assert(object);
+       ((SND_SoundObject*)object)->SetPitch(pitch);
+}
+
+
+
+void SND_SetPosition(SND_ObjectHandle object, double* position) 
+{
+       assert(object);
+       ((SND_SoundObject*)object)->SetPosition(position);
+}
+
+
+
+void SND_SetVelocity(SND_ObjectHandle object, double* velocity)
+{
+       assert(object);
+       ((SND_SoundObject*)object)->SetVelocity(velocity);
+}
+
+
+
+void SND_SetOrientation(SND_ObjectHandle object, double* orientation)
+{
+       assert(object);
+       ((SND_SoundObject*)object)->SetOrientation(orientation);
+}
+
+
+
+void SND_SetLoopMode(SND_ObjectHandle object, int loopmode)
+{
+       assert(object);
+       ((SND_SoundObject*)object)->SetLoopMode(loopmode);
+}
+
+
+
+void SND_SetLoopPoints(SND_ObjectHandle object, unsigned int loopstart, unsigned int loopend)
+{
+       assert(object);
+       ((SND_SoundObject*)object)->SetLoopStart(loopstart);
+       ((SND_SoundObject*)object)->SetLoopEnd(loopend);
+}
+
+
+
+float SND_GetGain(SND_ObjectHandle object)
+{
+       assert(object);
+       MT_Scalar gain = ((SND_SoundObject*)object)->GetGain();
+       return (float) gain;
+}
+
+
+
+float SND_GetPitch(SND_ObjectHandle object) 
+{
+       assert(object);
+       MT_Scalar pitch = ((SND_SoundObject*)object)->GetPitch();
+       return (float) pitch;
+}
+
+
+
+int SND_GetLoopMode(SND_ObjectHandle object) 
+{
+       assert(object);
+       return ((SND_SoundObject*)object)->GetLoopMode();
+}
+
+
+
+int SND_GetPlaystate(SND_ObjectHandle object) 
+{
+       assert(object);
+       return ((SND_SoundObject*)object)->GetPlaystate();
+}
diff --git a/intern/SoundSystem/intern/SND_CDObject.cpp b/intern/SoundSystem/intern/SND_CDObject.cpp
new file mode 100644 (file)
index 0000000..089e0d5
--- /dev/null
@@ -0,0 +1,182 @@
+/*
+ * SND_CDObject.cpp
+ *
+ * Implementation for CD playback
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "SND_CDObject.h"
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+SND_CDObject* SND_CDObject::m_instance = NULL;
+
+bool SND_CDObject::CreateSystem()
+{
+       bool result = false;
+
+       if (!m_instance)
+       {
+               m_instance = new SND_CDObject();
+               result = true;
+       }
+
+       return result;
+}
+
+
+
+bool SND_CDObject::DisposeSystem()
+{
+       bool result = false;
+
+       if (m_instance)
+       {
+               delete m_instance;
+               m_instance = NULL;
+               result = true;
+       }
+
+       return result;
+}
+
+
+
+SND_CDObject* SND_CDObject::Instance()
+{
+       return m_instance;
+}
+
+
+
+SND_CDObject::SND_CDObject()
+{
+       m_gain = 1;
+       m_playmode = SND_CD_ALL;
+       m_track = 1;
+       m_playstate = SND_STOPPED;
+       m_used = false;
+
+       // don't set the cd standard on modified:
+       // if not used, we don't wanna touch it (performance)
+       m_modified = false;
+}
+
+
+
+SND_CDObject::~SND_CDObject()
+{
+}
+
+
+
+void SND_CDObject::SetGain(MT_Scalar gain)
+{
+       m_gain = gain;
+       m_modified = true;
+}
+
+
+
+void SND_CDObject::SetPlaymode(int playmode)
+{
+       m_playmode = playmode;
+}
+
+
+
+void SND_CDObject::SetPlaystate(int playstate)
+{
+       m_playstate = playstate;
+}
+
+
+
+void SND_CDObject::SetTrack(int track)
+{
+       m_track = track;
+}
+
+
+
+int SND_CDObject::GetTrack() const
+{
+       return m_track;
+}
+
+
+
+MT_Scalar SND_CDObject::GetGain() const
+{
+       return m_gain;
+}
+
+
+int SND_CDObject::GetPlaystate() const
+{
+       return m_playstate;
+}
+
+
+
+bool SND_CDObject::IsModified() const
+{
+       return m_modified;
+}
+
+
+
+void SND_CDObject::SetModified(bool modified)
+{
+       m_modified = modified;
+}
+
+
+
+int SND_CDObject::GetPlaymode() const
+{
+       return m_playmode;
+}
+
+
+
+void SND_CDObject::SetUsed()
+{
+       m_used = true;
+}
+
+
+
+bool SND_CDObject::GetUsed()
+{
+       return m_used;
+}
+
diff --git a/intern/SoundSystem/intern/SND_DeviceManager.cpp b/intern/SoundSystem/intern/SND_DeviceManager.cpp
new file mode 100644 (file)
index 0000000..c4bc887
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+ * SND_DeviceManager.h
+ *
+ * singleton for creating, switching and deleting audiodevices
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "SND_DeviceManager.h"
+#include "SND_DependKludge.h"
+#include "SND_DummyDevice.h"
+#ifdef USE_OPENAL
+#include "SND_OpenALDevice.h"
+#endif
+
+SND_IAudioDevice* SND_DeviceManager::m_instance = NULL;
+int SND_DeviceManager::m_subscriptions = 0;
+
+#ifdef USE_OPENAL
+int SND_DeviceManager::m_device_type = snd_e_openaldevice;
+#else
+int SND_DeviceManager::m_device_type = snd_e_dummydevice;
+#endif
+
+void SND_DeviceManager::Subscribe()
+{
+       ++m_subscriptions;
+}
+
+
+
+void SND_DeviceManager::Unsubscribe()
+{
+       --m_subscriptions;
+
+       // only release memory if there is a m_instance but no subscriptions left
+       if (m_subscriptions == 0 && m_instance)
+       {
+               delete m_instance;
+               m_instance = NULL;
+       }
+       
+       if (m_subscriptions < 0)
+               m_subscriptions = 0;
+}
+
+
+
+SND_IAudioDevice* SND_DeviceManager::Instance()
+{
+       // only give away an instance if there are subscriptions
+       if (m_subscriptions)
+       {
+               // if there's no instance yet, set and create a new one
+               if (m_instance == NULL)
+               {
+                       SetDeviceType(m_device_type);
+               }
+
+               return m_instance;
+       }
+       else
+       {
+               return NULL;
+       }
+}
+               
+
+
+void SND_DeviceManager::SetDeviceType(int device_type)
+{
+       // if we want to change devicetype, first delete the old one
+       if (m_instance)
+       {
+               delete m_instance;
+               m_instance = NULL;
+       }
+       
+       // let's create the chosen device
+       switch (device_type)
+       {
+#ifdef USE_OPENAL
+       case snd_e_openaldevice:
+               {
+                       m_instance = new SND_OpenALDevice();
+                       m_device_type = device_type;
+                       break;
+               }
+#endif
+       default:
+               {
+                       m_instance = new SND_DummyDevice();
+                       m_device_type = device_type;
+                       break;
+               }
+       }
+}
diff --git a/intern/SoundSystem/intern/SND_IdObject.cpp b/intern/SoundSystem/intern/SND_IdObject.cpp
new file mode 100644 (file)
index 0000000..b261442
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * SND_IdObject.cpp
+ *
+ * Object for storing runtime data, like id's, soundobjects etc
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "SND_IdObject.h"
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+SND_IdObject::SND_IdObject()
+{
+}
+
+
+
+SND_IdObject::~SND_IdObject()
+{
+}
+
+
+
+SND_SoundObject* SND_IdObject::GetSoundObject()
+{
+       return m_soundObject;
+}
+
+
+
+void SND_IdObject::SetSoundObject(SND_SoundObject* pObject)
+{
+       m_soundObject = pObject;
+}
+
+
+
+int SND_IdObject::GetId()
+{
+       return m_id;
+}
+
+
+
+void SND_IdObject::SetId(int id)
+{
+       m_id = id;
+}
diff --git a/intern/SoundSystem/intern/SND_IdObject.h b/intern/SoundSystem/intern/SND_IdObject.h
new file mode 100644 (file)
index 0000000..86611b0
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * SND_IdObject.h
+ *
+ * Object for storing runtime data, like id's, soundobjects etc
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __SND_IDOBJECT_H
+#define __SND_IDOBJECT_H
+
+#include "SND_SoundObject.h"
+#include "GEN_List.h"
+#include "SoundDefines.h"
+
+class SND_IdObject : public GEN_Link
+{
+       SND_SoundObject*        m_soundObject;
+       int                                     m_id;
+
+public:
+       SND_IdObject();
+       virtual ~SND_IdObject();
+
+       SND_SoundObject*        GetSoundObject();
+       void                            SetSoundObject(SND_SoundObject* pObject);
+
+       int                                     GetId();
+       void                            SetId(int id);
+};
+
+#endif //__SND_OBJECT_H
+
diff --git a/intern/SoundSystem/intern/SND_Scene.cpp b/intern/SoundSystem/intern/SND_Scene.cpp
new file mode 100644 (file)
index 0000000..af1b43a
--- /dev/null
@@ -0,0 +1,544 @@
+/*
+* SND_Scene.cpp
+*
+* The scene for sounds.
+*
+* $Id$
+*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef WIN32
+#pragma warning (disable:4786) // Get rid of stupid stl-visual compiler debug warning
+#endif //WIN32
+
+#include "SND_Scene.h"
+#include "SND_DependKludge.h"
+#include "SND_IAudioDevice.h"
+
+#include <stdlib.h>
+#include <iostream>
+
+//static unsigned int tijd = 0;
+
+SND_Scene::SND_Scene(SND_IAudioDevice* audiodevice)
+                                        : m_audiodevice(audiodevice)
+{
+       if (m_audiodevice)
+               m_wavecache = m_audiodevice->GetWaveCache();
+
+       if (!m_wavecache || !audiodevice)
+       {
+               m_audio = false;
+       }
+       else
+       {
+               //if so, go ahead!
+               m_audio = true;
+#ifdef ONTKEVER
+               printf("SND_Scene::SND_Scene() m_audio == true\n");
+#endif
+               m_audiodevice->InitListener();
+       }
+
+       IsPlaybackWanted();
+}
+
+
+
+SND_Scene::~SND_Scene()
+{
+       StopAllObjects();
+}
+
+
+
+// check if audioplayback is wanted
+bool SND_Scene::IsPlaybackWanted()
+{
+    /* Removed the functionality for checking if noaudio was provided on */
+    /* the commandline. */
+       if (m_audiodevice && m_wavecache)
+       {
+               m_audioplayback = true;
+       }
+       else
+       {
+               StopAllObjects();
+               m_audioplayback = false;
+       }
+
+       return m_audioplayback;
+}
+
+
+
+int SND_Scene::LoadSample(const STR_String& samplename,
+                                                  void* memlocation,
+                                                  int size)
+{
+       int result = -1;
+
+       if (m_audiodevice)
+       {
+               SND_WaveSlot* waveslot = m_audiodevice->LoadSample(samplename, memlocation, size);
+
+               if (waveslot)
+                       result = waveslot->GetBuffer();
+       }
+
+       return result;
+}
+
+
+
+void SND_Scene::RemoveAllSamples()
+{
+       if (m_audio && m_audiodevice)
+               m_audiodevice->RemoveAllSamples();
+}
+
+
+
+bool SND_Scene::CheckBuffer(SND_SoundObject* pObject)
+{
+       bool result = false;
+
+       if (pObject && m_wavecache)
+       {
+               SND_WaveSlot* waveslot = m_wavecache->GetWaveSlot(pObject->GetSampleName());
+               
+               if (waveslot)
+               {
+                       pObject->SetBuffer(waveslot->GetBuffer());
+
+                       result = true;
+               }
+       }
+
+       return result;
+}
+
+
+
+bool SND_Scene::IsSampleLoaded(STR_String& samplename)
+{
+       bool result = false;
+
+       if (samplename && m_wavecache)
+       {
+               SND_WaveSlot* waveslot = m_wavecache->GetWaveSlot(samplename);
+
+               if (waveslot && waveslot->IsLoaded())
+                       result = true;
+       }
+
+       return result;
+}
+
+
+
+void SND_Scene::AddObject(SND_SoundObject* pObject)
+{
+       if (m_audio)
+       {
+               STR_String samplename = pObject->GetSampleName();
+               SND_WaveSlot* slot = NULL;
+               
+               // don't add the object if no valid sample is referenced
+               if (samplename != "")
+               {       
+                       // check if the sample is already loaded
+                       slot = m_wavecache->GetWaveSlot(samplename);
+               }
+               
+               if (slot)
+               {
+                       pObject->SetBuffer(slot->GetBuffer());
+                       
+                       // needed for expected lifespan of the sample, but ain't necesary anymore i think
+                       MT_Scalar samplelength = slot->GetNumberOfSamples();
+                       MT_Scalar samplerate = slot->GetSampleRate();
+                       MT_Scalar soundlength = samplelength/samplerate;
+                       pObject->SetLength(soundlength);
+                       
+                       // add the object to the list
+                       m_soundobjects.insert((SND_SoundObject*)pObject);
+               }
+       }
+}
+
+
+
+void SND_Scene::SetListenerTransform(const MT_Vector3& pos,
+                                                                        const MT_Vector3& vel,
+                                                                        const MT_Matrix3x3& ori)
+{
+       if (m_audio)
+       {
+               GetListener()->SetPosition(pos);
+               GetListener()->SetVelocity(vel);
+               GetListener()->SetOrientation(ori);
+       }
+}
+
+
+
+void SND_Scene::UpdateListener()
+{
+       // process the listener if modified
+       if (m_listener.IsModified())
+       {
+               m_audiodevice->SetListenerGain(m_listener.GetGain());
+               m_audiodevice->SetDopplerVelocity(m_listener.GetDopplerVelocity());
+               m_audiodevice->SetDopplerFactor(m_listener.GetDopplerFactor());
+               m_listener.SetModified(false);
+       }
+}
+
+
+
+void SND_Scene::AddActiveObject(SND_SoundObject* pObject, MT_Scalar curtime)
+{
+       if (m_audio)
+       {
+               if (pObject)
+               {
+#ifdef ONTKEVER
+                       printf("SND_Scene::AddActiveObject\n");
+#endif
+                       
+                       // first check if the object is already on the list
+                       if (pObject->IsActive())
+                       {
+                               pObject->SetTimeStamp(curtime);
+                               pObject->StartSound();
+                       }
+                       else
+                       {       
+                               pObject->SetTimeStamp(curtime);
+                               
+                               // compute the expected lifespan
+                               pObject->SetLifeSpan();
+                               
+                               // lets give the new active-to-be object an id
+                               if (m_audiodevice->GetNewId(pObject))
+                               {
+                                       // and add the object
+                                       m_activeobjects.addTail(pObject);
+                                       pObject->StartSound();
+                                       pObject->SetActive(true);
+                               }
+                       }
+               }
+       }
+}
+
+
+
+void SND_Scene::RemoveActiveObject(SND_SoundObject* pObject)
+{
+       if (m_audio)
+       {
+               if (pObject)
+               {
+#ifdef ONTKEVER
+                       printf("SND_Scene::RemoveActiveObject\n");
+#endif
+                       // if inactive, remove it from the list
+                       if (pObject->IsActive())
+                       {       
+                               // first make sure it is stopped
+                               m_audiodevice->ClearId(pObject);
+                       }
+               }
+       }
+}
+
+
+
+void SND_Scene::UpdateActiveObects()
+{
+//     ++tijd;
+
+       SND_SoundObject* pObject;
+       // update only the objects that need to be updated
+       for (pObject = (SND_SoundObject*)m_activeobjects.getHead();
+                                       !pObject->isTail();
+                                       pObject = (SND_SoundObject*)pObject->getNext())
+       {
+               int id = pObject->GetId();
+               
+               if (id >= 0)
+               {
+                       if (pObject->Is3D())
+                       {
+                               // Get the global positions and velocity vectors
+                               // of the listener and soundobject
+                               MT_Vector3 op = pObject->GetPosition();
+                               MT_Vector3 lp = m_listener.GetPosition();
+                               MT_Vector3 position = op - lp;
+                               
+                               // Calculate relative velocity in global coordinates
+                               // of the sound with respect to the listener.
+                               MT_Vector3 ov = pObject->GetVelocity();
+                               MT_Vector3 lv = m_listener.GetVelocity();
+                               MT_Vector3 velocity = ov - lv;
+                               
+                               // Now map the object position and velocity into 
+                               // the local coordinates of the listener.
+                               MT_Matrix3x3 lo = m_listener.GetOrientation();
+                               
+                               MT_Vector3 local_sound_pos = position * lo;
+                               MT_Vector3 local_sound_vel = velocity * lo;
+                               
+                               m_audiodevice->SetObjectTransform(
+                                       id,
+                                       local_sound_pos,
+                                       local_sound_vel,
+                                       pObject->GetOrientation(), // make relative to listener! 
+                                       lp,
+                                       pObject->GetRollOffFactor());
+                       }
+                       else
+                       {
+                               m_audiodevice->ObjectIs2D(id);
+                       }
+                       
+                       // update the situation
+                       if (pObject->IsModified())
+                       {
+                               m_audiodevice->SetObjectPitch(id, pObject->GetPitch());
+                               m_audiodevice->SetObjectGain(id, pObject->GetGain());
+                               m_audiodevice->SetObjectMinGain(id, pObject->GetMinGain());
+                               m_audiodevice->SetObjectMaxGain(id, pObject->GetMaxGain());
+                               m_audiodevice->SetObjectReferenceDistance(id, pObject->GetReferenceDistance());
+                               m_audiodevice->SetObjectRollOffFactor(id, pObject->GetRollOffFactor());
+                               m_audiodevice->SetObjectLoop(id, pObject->GetLoopMode());
+                               m_audiodevice->SetObjectLoopPoints(id, pObject->GetLoopStart(), pObject->GetLoopEnd());
+                               pObject->SetModified(false);
+                       }
+
+                       pObject->AddRunning();
+
+#ifdef ONTKEVER                                
+                       STR_String naam = pObject->GetObjectName();
+                       STR_String sample = pObject->GetSampleName();
+                       
+                       int id = pObject->GetId();
+                       int buffer = pObject->GetBuffer();
+                       
+                       float gain = pObject->GetGain();
+                       float pitch = pObject->GetPitch();
+                       float timestamp = pObject->GetTimestamp();
+                       
+                       printf("naam: %s, sample: %s \n", naam.Ptr(), sample.Ptr());
+                       printf("id: %d, buffer: %d \n", id, buffer);
+                       printf("gain: %f, pitch: %f, ts: %f \n\n", gain, pitch, timestamp);
+#endif
+#ifdef USE_OPENAL
+                       // ok, properties Set. now see if it must play
+                       switch (pObject->GetPlaystate()){
+                       case SND_MUST_PLAY:
+                               m_audiodevice->PlayObject(id);
+                               pObject->SetPlaystate(SND_PLAYING);
+                               break;
+                       case SND_MUST_STOP:
+                               RemoveActiveObject(pObject);
+                               break;
+                       case SND_MUST_PAUSE:
+                               m_audiodevice->PauseObject(id);
+                               pObject->SetPlaystate(SND_PAUSED);
+                               break;
+                       }
+#endif
+
+                       // check to see if the sound is still playing
+                       // if not: release its id
+                       int playstate = m_audiodevice->GetPlayState(id);
+#ifdef ONTKEVER
+                       if (playstate != 2)
+                               printf("%d - ",playstate);
+#endif
+
+                       if ((playstate == SND_STOPPED) && !pObject->GetLoopMode())
+                       {
+                               RemoveActiveObject(pObject);
+                       }
+               }
+       }
+}
+
+
+
+void SND_Scene::UpdateCD()
+{
+       if (m_audiodevice)
+       {
+               SND_CDObject* pCD = SND_CDObject::Instance();
+
+               if (pCD)
+               {
+                       int playstate = pCD->GetPlaystate();
+                       
+                       switch (playstate)
+                       {
+                       case SND_MUST_PLAY:
+                               {
+                                       // initialize the cd only when you need it
+                                       m_audiodevice->SetCDGain(pCD->GetGain());
+                                       m_audiodevice->SetCDPlaymode(pCD->GetPlaymode());
+                                       m_audiodevice->PlayCD(pCD->GetTrack());
+                                       pCD->SetPlaystate(SND_PLAYING);
+                                       pCD->SetUsed();
+                                       break;
+                               }
+                       case SND_MUST_PAUSE:
+                               {
+                                       m_audiodevice->PauseCD(true);
+                                       pCD->SetPlaystate(SND_PAUSED);
+                                       break;
+                               }
+                       case SND_MUST_RESUME:
+                               {
+                                       m_audiodevice->PauseCD(false);
+                                       pCD->SetPlaystate(SND_PLAYING);
+                                       break;
+                               }
+                       case SND_MUST_STOP:
+                               {
+                                       m_audiodevice->StopCD();
+                                       pCD->SetPlaystate(SND_STOPPED);
+                                       break;
+                               }
+                       default:
+                               {
+                               }
+                       }
+                       
+                       // this one is only for realtime modifying settings
+                       if (pCD->IsModified())
+                       {
+                               m_audiodevice->SetCDGain(pCD->GetGain());
+                               pCD->SetModified(false);
+                       }
+               }
+       }
+}
+
+
+
+void SND_Scene::Proceed()
+{
+       if (m_audio && m_audioplayback)
+       {
+               m_audiodevice->MakeCurrent();
+
+               UpdateListener();
+               UpdateActiveObects();
+               UpdateCD();
+
+//             m_audiodevice->UpdateDevice();
+       }
+}
+
+
+void SND_Scene::DeleteObject(SND_SoundObject* pObject) 
+{
+#ifdef ONTKEVER
+       printf("SND_Scene::DeleteObject\n");
+#endif
+       
+       if (pObject)
+       {
+               if (m_audiodevice)
+                       m_audiodevice->ClearId(pObject);
+               
+               // must remove object from m_activeList
+               std::set<SND_SoundObject*>::iterator set_it;
+               set_it = m_soundobjects.find(pObject);
+               
+               if (set_it != m_soundobjects.end())
+                       m_soundobjects.erase(set_it);
+               
+               // release the memory
+               delete pObject;
+               pObject = NULL;
+       }
+}
+
+
+
+void SND_Scene::RemoveAllObjects()
+{
+#ifdef ONTKEVER
+       printf("SND_Scene::RemoveAllObjects\n");
+#endif
+
+       StopAllObjects();
+
+       std::set<SND_SoundObject*>::iterator it = m_soundobjects.begin();
+
+       while (it != m_soundobjects.end())
+       {
+               delete (*it);
+               it++;
+       }
+
+       m_soundobjects.clear();
+}
+
+
+
+void SND_Scene::StopAllObjects()
+{
+       if (m_audio)
+       {
+#ifdef ONTKEVER
+               printf("SND_Scene::StopAllObjects\n");
+#endif
+               
+               SND_SoundObject* pObject;
+               
+               for (pObject = (SND_SoundObject*)m_activeobjects.getHead();
+               !pObject->isTail();
+               pObject = (SND_SoundObject*)pObject->getNext())
+               {
+                       m_audiodevice->ClearId(pObject);
+               }
+       }
+}
+
+
+
+SND_SoundListener* SND_Scene::GetListener()
+{
+       return &m_listener;
+}
diff --git a/intern/SoundSystem/intern/SND_SoundListener.cpp b/intern/SoundSystem/intern/SND_SoundListener.cpp
new file mode 100644 (file)
index 0000000..26163e8
--- /dev/null
@@ -0,0 +1,185 @@
+/*
+ * SND_SoundListener.cpp
+ *
+ * A SoundListener is for sound what a camera is for vision.
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "SND_SoundListener.h"
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+SND_SoundListener::SND_SoundListener()
+{
+       m_modified = true;
+       m_gain = 1.0;
+       m_dopplerfactor = 1.0;
+       m_dopplervelocity = 1.0;
+       m_scale = 1.0;
+       m_position[0] = 0.0;
+       m_position[1] = 0.0;
+       m_position[2] = 0.0;
+       m_velocity[0] = 0.0;
+       m_velocity[1] = 0.0;
+       m_velocity[2] = 0.0;
+       m_orientation[0][0] = 1.0;
+       m_orientation[0][1] = 0.0;
+       m_orientation[0][2] = 0.0;
+       m_orientation[1][0] = 0.0;
+       m_orientation[1][1] = 1.0;
+       m_orientation[1][2] = 0.0;
+       m_orientation[2][0] = 0.0;
+       m_orientation[2][1] = 0.0;
+       m_orientation[2][2] = 1.0;
+}
+
+
+SND_SoundListener::~SND_SoundListener()
+{
+       ; /* intentionally empty */
+
+}
+
+
+
+void SND_SoundListener::SetGain(MT_Scalar gain)
+{
+       m_gain = gain;
+       m_modified = true;
+}
+
+
+
+void SND_SoundListener::SetPosition (const MT_Vector3& pos)
+{
+       m_position = pos;
+}
+
+
+
+void SND_SoundListener::SetVelocity(const MT_Vector3& vel)
+{
+       m_velocity = vel;
+}
+
+
+
+void SND_SoundListener::SetOrientation(const MT_Matrix3x3& ori)
+{
+       m_orientation = ori;
+}
+
+
+
+void SND_SoundListener::SetDopplerFactor(MT_Scalar dopplerfactor)
+{
+       m_dopplerfactor = dopplerfactor;
+       m_modified = true;
+}
+
+
+
+void SND_SoundListener::SetDopplerVelocity(MT_Scalar dopplervelocity)
+{
+       m_dopplervelocity = dopplervelocity;
+       m_modified = true;
+}
+
+
+
+void SND_SoundListener::SetScale(MT_Scalar scale)
+{
+       m_scale = scale;
+       m_modified = true;
+}
+
+
+
+MT_Scalar SND_SoundListener::GetGain() const
+{
+       return m_gain;
+}
+
+
+
+MT_Vector3 SND_SoundListener::GetPosition() const
+{
+       return m_position;
+}
+
+
+
+MT_Vector3 SND_SoundListener::GetVelocity() const
+{
+       return m_velocity;
+}
+
+
+
+MT_Matrix3x3 SND_SoundListener::GetOrientation()
+{
+       return m_orientation;
+}
+
+
+
+MT_Scalar SND_SoundListener::GetDopplerFactor() const
+{
+       return m_dopplerfactor;
+}
+
+
+
+MT_Scalar SND_SoundListener::GetDopplerVelocity() const
+{
+       return m_dopplervelocity;
+}
+
+
+
+MT_Scalar SND_SoundListener::GetScale() const
+{
+       return m_scale;
+}
+
+
+
+bool SND_SoundListener::IsModified() const
+{
+       return m_modified;      
+}
+
+
+
+void SND_SoundListener::SetModified(bool modified)
+{
+       m_modified = modified;
+}
diff --git a/intern/SoundSystem/intern/SND_SoundObject.cpp b/intern/SoundSystem/intern/SND_SoundObject.cpp
new file mode 100644 (file)
index 0000000..7a244b5
--- /dev/null
@@ -0,0 +1,508 @@
+/*
+ * SND_SoundObject.cpp
+ *
+ * Implementation of the abstract sound object
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "SND_SoundObject.h"
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+SND_SoundObject::SND_SoundObject()// : m_modified(true)
+{
+       m_samplename = "";
+       m_length = 0;
+       m_buffer = 0;
+
+       m_gain = 0.0;
+       m_pitch = 1.0;
+
+       m_mingain = 0.0;
+       m_maxgain = 1.0;
+       m_rollofffactor = 1.0;
+       m_referencedistance = 1.0;
+       
+       m_position[0] = 0.0;
+       m_position[1] = 0.0;
+       m_position[2] = 0.0;
+       m_velocity[0] = 0.0;
+       m_velocity[1] = 0.0;
+       m_velocity[2] = 0.0;
+       m_orientation[0][0] = 1.0;
+       m_orientation[0][1] = 0.0;
+       m_orientation[0][2] = 0.0;
+       m_orientation[1][0] = 0.0;
+       m_orientation[1][1] = 1.0;
+       m_orientation[1][2] = 0.0;
+       m_orientation[2][0] = 0.0;
+       m_orientation[2][1] = 0.0;
+       m_orientation[2][2] = 1.0;
+       
+       m_loopstart = 0;
+       m_loopend = 0;
+       m_loopmode = SND_LOOP_NORMAL;
+       m_is3d = true;
+       m_playstate = SND_INITIAL;
+       m_active = false;
+       m_id = -1;
+       m_lifespan = 0;
+       m_timestamp = 0;
+       m_modified = true;
+       m_running = 0;
+       m_highpriority = false;
+}
+
+
+
+SND_SoundObject::~SND_SoundObject()
+{
+}
+
+
+
+void SND_SoundObject::StartSound()
+{
+       if (m_id >= 0)
+               m_playstate = SND_MUST_PLAY;
+}
+
+
+
+void SND_SoundObject::StopSound()
+{
+       if (m_id >= 0)
+               m_playstate = SND_MUST_STOP;
+}
+
+
+
+void SND_SoundObject::PauseSound()
+{
+       if (m_id >= 0)
+               m_playstate = SND_MUST_PAUSE;
+}
+
+
+
+void SND_SoundObject::DeleteWhenFinished()
+{
+       m_playstate = SND_MUST_BE_DELETED;
+}
+
+
+
+void SND_SoundObject::SetGain(MT_Scalar gain)
+{
+       m_gain = gain;
+       m_modified = true;
+}
+
+
+
+void SND_SoundObject::SetMinGain(MT_Scalar mingain)
+{
+       m_mingain = mingain;
+       m_modified = true;
+}
+
+
+
+void SND_SoundObject::SetMaxGain(MT_Scalar maxgain)
+{
+       m_maxgain = maxgain;
+       m_modified = true;
+}
+
+
+
+void SND_SoundObject::SetRollOffFactor(MT_Scalar rollofffactor)
+{
+       m_rollofffactor = rollofffactor;
+       m_modified = true;
+}
+
+
+
+void SND_SoundObject::SetReferenceDistance(MT_Scalar referencedistance)
+{
+       m_referencedistance = referencedistance;
+       m_modified = true;
+}
+
+
+
+void SND_SoundObject::SetPitch(MT_Scalar pitch)
+{
+       m_pitch = pitch;
+       m_modified = true;
+}
+
+
+
+void SND_SoundObject::SetLoopMode(unsigned int loopmode)
+{
+       m_loopmode = loopmode;
+       m_modified = true;
+}
+
+
+
+void SND_SoundObject::SetLoopStart(unsigned int loopstart)
+{
+       m_loopstart = loopstart;
+       m_modified = true;
+}
+
+
+
+void SND_SoundObject::SetLoopEnd(unsigned int loopend)
+{
+       m_loopend = loopend;
+       m_modified = true;
+}
+
+
+
+void SND_SoundObject::Set3D(bool threedee)
+{
+       m_is3d = threedee;
+}
+
+
+
+void SND_SoundObject::SetLifeSpan()
+{
+       m_lifespan = m_length / m_pitch;
+}
+
+
+
+bool SND_SoundObject::IsLifeSpanOver(MT_Scalar curtime) const
+{
+       bool result = false;
+
+       if ((curtime - m_timestamp) > m_lifespan)
+               result = true;
+
+       return result;
+}
+
+
+
+void SND_SoundObject::SetActive(bool active)
+{
+       m_active = active;
+
+       if (!active)
+       {
+               m_playstate = SND_STOPPED;
+               (this)->remove();
+       }
+}
+
+
+
+void SND_SoundObject::SetBuffer(unsigned int buffer)
+{
+       m_buffer = buffer;
+}
+
+
+
+void SND_SoundObject::SetObjectName(STR_String objectname)
+{
+       m_objectname = objectname;
+}
+
+
+
+void SND_SoundObject::SetSampleName(STR_String samplename)
+{
+       m_samplename = samplename;
+}
+
+
+
+void SND_SoundObject::SetLength(MT_Scalar length)
+{
+       m_length = length;
+}
+
+
+
+void SND_SoundObject::SetPosition(const MT_Vector3& pos)
+{
+       m_position = pos;
+}
+
+
+
+void SND_SoundObject::SetVelocity(const MT_Vector3& vel)
+{
+       m_velocity = vel;
+}
+
+
+
+void SND_SoundObject::SetOrientation(const MT_Matrix3x3& orient)
+{
+       m_orientation = orient;
+}
+
+
+
+void SND_SoundObject::SetPlaystate(int playstate)
+{
+       m_playstate = playstate;
+}
+
+
+
+void SND_SoundObject::SetId(int id)
+{
+       m_id = id;
+}
+
+
+
+void SND_SoundObject::SetTimeStamp(MT_Scalar timestamp)
+{
+       m_timestamp = timestamp;
+}
+
+
+
+void SND_SoundObject::SetHighPriority(bool priority)
+{
+       m_highpriority = priority;
+}
+
+
+
+bool SND_SoundObject::IsHighPriority() const
+{
+       return m_highpriority;
+}
+
+
+
+bool SND_SoundObject::IsActive()const
+{
+       return m_active;
+}
+
+
+
+int SND_SoundObject::GetId()const
+{
+       return m_id;
+}
+
+
+
+MT_Scalar SND_SoundObject::GetLifeSpan()const
+{
+       return m_lifespan;
+}
+
+
+
+MT_Scalar SND_SoundObject::GetTimestamp()const
+{
+       return m_timestamp;
+}
+
+
+
+unsigned int SND_SoundObject::GetBuffer()
+{
+       return m_buffer;
+}
+
+
+
+const STR_String& SND_SoundObject::GetSampleName()
+{
+       return m_samplename; 
+}
+
+
+
+const STR_String& SND_SoundObject::GetObjectName()
+{
+       return m_objectname;
+}
+
+
+
+MT_Scalar SND_SoundObject::GetLength() const
+{
+       return m_length;
+}
+
+
+
+MT_Scalar SND_SoundObject::GetGain() const
+{
+       return m_gain;
+}
+
+
+
+MT_Scalar SND_SoundObject::GetPitch() const
+{
+       return m_pitch;
+}
+
+
+
+MT_Scalar SND_SoundObject::GetMinGain() const
+{
+       return m_mingain;
+}
+
+
+
+MT_Scalar SND_SoundObject::GetMaxGain() const
+{
+       return m_maxgain;
+}
+
+
+
+MT_Scalar SND_SoundObject::GetRollOffFactor() const
+{
+       return m_rollofffactor;
+}
+
+
+
+MT_Scalar SND_SoundObject::GetReferenceDistance() const
+{
+       return m_referencedistance;
+}
+
+
+
+MT_Vector3 SND_SoundObject::GetPosition() const
+{
+       return m_position;
+}
+
+
+
+MT_Vector3 SND_SoundObject::GetVelocity() const
+{
+       return m_velocity;
+}
+
+
+
+MT_Matrix3x3 SND_SoundObject::GetOrientation() const
+{
+       return m_orientation;
+}
+
+
+
+unsigned int SND_SoundObject::GetLoopMode() const
+{
+       return m_loopmode;
+}
+
+
+
+unsigned int SND_SoundObject::GetLoopStart() const
+{
+       return m_loopstart;
+}
+
+
+
+unsigned int SND_SoundObject::GetLoopEnd() const
+{
+       return m_loopend;
+}
+
+
+
+bool SND_SoundObject::Is3D() const
+{
+       return m_is3d;
+}
+
+
+
+int SND_SoundObject::GetPlaystate() const
+{
+       return m_playstate;
+}
+
+
+
+bool SND_SoundObject::IsModified() const
+{
+       return m_modified;
+}
+
+
+
+void SND_SoundObject::SetModified(bool modified)
+{
+       m_modified = modified;
+}
+
+
+
+void SND_SoundObject::InitRunning()
+{
+       m_running = 0;
+}
+
+
+
+bool SND_SoundObject::IsRunning() const
+{
+       bool result = false;
+
+       if (m_running > 100)
+               result = true;
+
+       return result;
+}
+
+
+
+void SND_SoundObject::AddRunning()
+{
+       ++m_running;
+}
diff --git a/intern/SoundSystem/intern/SND_Utils.cpp b/intern/SoundSystem/intern/SND_Utils.cpp
new file mode 100644 (file)
index 0000000..dbc3135
--- /dev/null
@@ -0,0 +1,424 @@
+/*
+ * SND_Utils.cpp
+ *
+ * Util functions for soundthingies
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "SND_Utils.h"
+#include "SoundDefines.h"
+#include "SND_DependKludge.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <math.h>
+#include <string.h>
+
+#if defined(_WIN32)
+#include <io.h>
+#define open _open
+#define read _read
+#define close _close
+#define write _write
+#define lseek _lseek
+#else
+#include <unistd.h>
+#endif
+
+#define BUFFERSIZE 32
+
+
+/*****************************************************************************
+ * Begin of temporary Endian stuff.
+ * I think there should be a central place to handle endian conversion but for
+ * the time being it suffices. Note that the defines come from the Blender
+ * source.
+ *****************************************************************************/
+typedef enum
+{
+       SND_endianBig = 0,
+       SND_endianLittle
+} SND_TEndian;
+
+#if defined(__BIG_ENDIAN__) || defined(__sparc) || defined(__sparc__)
+const SND_TEndian SND_fEndian = SND_endianBig;
+#else
+const SND_TEndian SND_fEndian = SND_endianLittle;
+#endif
+
+/* This one swaps the bytes in a short */
+#define SWITCH_SHORT(a) { \
+    char s_i, *p_i; \
+    p_i= (char *)&(a); \
+    s_i=p_i[0]; \
+    p_i[0] = p_i[1]; \
+    p_i[1] = s_i; }
+
+/* This one rotates the bytes in an int */
+#define SWITCH_INT(a) { \
+    char s_i, *p_i; \
+    p_i= (char *)&(a); \
+    s_i=p_i[0]; p_i[0]=p_i[3]; p_i[3]=s_i; \
+    s_i=p_i[1]; p_i[1]=p_i[2]; p_i[2]=s_i; }
+/*****************************************************************************
+ * End of temporary Endian stuff.
+ *****************************************************************************/
+
+
+/* loads a file */
+void* SND_LoadSample(char *filename)
+{
+       int file, filelen, buffersize = BUFFERSIZE;
+       void* data = NULL;
+
+#if defined(WIN32)     
+       file = open(filename, O_BINARY|O_RDONLY);
+#else
+       file = open(filename, 0|O_RDONLY);
+#endif
+
+       if (file == -1)
+       {
+               //printf("can't open file.\n");
+               //printf("press q for quit.\n");
+       }
+       else
+       {
+               filelen = lseek(file, 0, SEEK_END);
+               lseek(file, 0, SEEK_SET);
+               
+               if (filelen != 0)
+               {
+                       data = malloc(buffersize);
+
+                       if (read(file, data, buffersize) != buffersize)
+                       {
+                               free(data);
+                               data = NULL;
+                       }
+               }
+               close(file);
+               
+       }
+       return (data);
+}
+
+
+
+bool SND_IsSampleValid(const STR_String& name, void* memlocation)
+{
+       bool result = false;
+       bool loadedsample = false;
+       char buffer[BUFFERSIZE];
+       
+       if (!memlocation)
+       {
+               STR_String samplename = name;
+               memlocation = SND_LoadSample(samplename.Ptr());
+               
+               if (memlocation)
+                       loadedsample = true;
+       }
+       
+       if (memlocation)
+       {
+               memcpy(&buffer, memlocation, BUFFERSIZE);
+               
+               if(!(memcmp(buffer, "RIFF", 4) && memcmp(&(buffer[8]), "WAVEfmt ", 8)))
+               {
+                       /* This was endian unsafe. See top of the file for the define. */
+                       short shortbuf = *((short *) &buffer[20]);
+                       if (SND_fEndian == SND_endianBig) SWITCH_SHORT(shortbuf);
+
+                       if (shortbuf == SND_WAVE_FORMAT_PCM)
+                               result = true;
+               }
+       }
+       if (loadedsample)
+       {
+               free(memlocation);
+               memlocation = NULL;
+       }
+
+       return result;
+}
+
+
+
+/* checks if the passed pointer is a valid sample */
+static bool CheckSample(void* sample)
+{
+       bool valid = false;
+       char buffer[32];
+    
+       memcpy(buffer, sample, 16);
+
+       if(!(memcmp(buffer, "RIFF", 4) && memcmp(&(buffer[8]), "WAVEfmt ", 8)))
+       {
+               valid = true;
+       }
+       
+       return valid;
+}
+
+
+
+/* gets the type of the sample (0 == unknown, 1 == PCM etc */
+unsigned int SND_GetSampleFormat(void* sample)
+{
+       short sampletype = 0;
+
+       if (CheckSample(sample))
+       {
+               memcpy(&sampletype, ((char*)sample) + 20, 2);
+       }
+       /* This was endian unsafe. See top of the file for the define. */
+       if (SND_fEndian == SND_endianBig) SWITCH_SHORT(sampletype);
+
+       return (unsigned int)sampletype;
+}
+
+
+
+/* gets the number of channels in a sample */
+unsigned int SND_GetNumberOfChannels(void* sample)
+{
+       short numberofchannels = 0;
+
+       if (CheckSample(sample))
+       {
+               memcpy(&numberofchannels, ((char*)sample) + 22, 2);
+       }
+       /* This was endian unsafe. See top of the file for the define. */
+       if (SND_fEndian == SND_endianBig) SWITCH_SHORT(numberofchannels);
+
+       return (unsigned int)numberofchannels;
+}
+
+
+
+/* gets the samplerate of a sample */
+unsigned int SND_GetSampleRate(void* sample)
+{
+       unsigned int samplerate = 0;
+       
+       if (CheckSample(sample))
+       {
+               memcpy(&samplerate, ((char*)sample) + 24, 4);
+       }
+       /* This was endian unsafe. See top of the file for the define. */
+       if (SND_fEndian == SND_endianBig) SWITCH_INT(samplerate);
+
+       return samplerate;
+}
+
+
+
+/* gets the bitrate of a sample */
+unsigned int SND_GetBitRate(void* sample)
+{
+       short bitrate = 0;
+
+       if (CheckSample(sample))
+       {
+               memcpy(&bitrate, ((char*)sample) + 34, 2);
+       }
+       /* This was endian unsafe. See top of the file for the define. */
+       if (SND_fEndian == SND_endianBig) SWITCH_SHORT(bitrate);
+
+       return (unsigned int)bitrate;
+}
+
+
+
+/* gets the length of the actual sample data (without the header) */
+unsigned int SND_GetNumberOfSamples(void* sample, unsigned int sample_length)
+{
+       unsigned int chunklength, length = 0, offset;
+       unsigned short block_align;
+       if (CheckSample(sample))
+       {
+               memcpy(&chunklength, ((char*)sample) + 16, 4);
+               memcpy(&block_align, ((char*)sample) + 32, 2); /* always 2 or 4 it seems */
+               
+               /* This was endian unsafe. See top of the file for the define. */
+               if (SND_fEndian == SND_endianBig)
+               {
+                       SWITCH_INT(chunklength);
+                       SWITCH_SHORT(block_align);
+               }
+                               
+               offset = 16 + chunklength + 4;
+
+               /* This seems very unsafe, what if data is never found (f.i. corrupt file)... */
+               // lets find "data"
+               while (memcmp(((char*)sample) + offset, "data", 4))
+               {
+                       offset += block_align;
+                       
+                       if (offset+block_align > sample_length) /* save us from crashing */
+                               return 0;
+               }
+               offset += 4;
+               memcpy(&length, ((char*)sample) + offset, 4);
+
+               /* This was endian unsafe. See top of the file for the define. */
+               if (SND_fEndian == SND_endianBig) SWITCH_INT(length);
+       }
+
+       return length;
+}
+
+
+
+/* gets the size of the entire header (file - sampledata) */
+unsigned int SND_GetHeaderSize(void* sample, unsigned int sample_length)
+{
+       unsigned int chunklength, headersize = 0, offset = 16;
+       unsigned short block_align;
+       if (CheckSample(sample))
+       {
+               memcpy(&chunklength, ((char*)sample) + offset, 4);
+               memcpy(&block_align, ((char*)sample) + 32, 2); /* always 2 or 4 it seems */
+               
+               /* This was endian unsafe. See top of the file for the define. */
+               if (SND_fEndian == SND_endianBig)
+               {
+                       SWITCH_INT(chunklength);
+                       SWITCH_SHORT(block_align);
+               }
+               offset = offset + chunklength + 4;
+
+               // lets find "data"
+               while (memcmp(((char*)sample) + offset, "data", 4))
+               {
+                       offset += block_align;
+                       
+                       if (offset+block_align > sample_length) /* save us from crashing */
+                               return 0;
+               }
+               headersize = offset + 8;
+       }
+
+       return headersize;
+}
+
+
+unsigned int SND_GetExtraChunk(void* sample)
+{
+       unsigned int extrachunk = 0, chunklength, offset = 16;
+       char data[4];
+
+       if (CheckSample(sample))
+       {
+               memcpy(&chunklength, ((char*)sample) + offset, 4);
+               offset = offset + chunklength + 4;
+               memcpy(data, ((char*)sample) + offset, 4);
+
+               // lets find "cue"
+               while (memcmp(data, "cue", 3))
+               {
+                       offset += 4;
+                       memcpy(data, ((char*)sample) + offset, 4);
+               }
+       }
+
+       return extrachunk;
+}
+
+
+
+void SND_GetSampleInfo(signed char* sample, SND_WaveSlot* waveslot)
+{      
+       WavFileHeader   fileheader;
+       WavFmtHeader    fmtheader;
+       WavFmtExHeader  fmtexheader;
+       WavSampleHeader sampleheader;
+       WavChunkHeader  chunkheader;
+       
+       if (CheckSample(sample))
+       {
+               memcpy(&fileheader, sample, sizeof(WavFileHeader));
+               fileheader.size = SND_GetHeaderSize(sample, waveslot->GetFileSize());
+               if (fileheader.size) { /* this may fail for corrupt files */
+                       sample += sizeof(WavFileHeader);
+                       fileheader.size = ((fileheader.size+1) & ~1) - 4;
+
+                       while ((fileheader.size > 0) && (memcpy(&chunkheader, sample, sizeof(WavChunkHeader))))
+                       {
+                               sample += sizeof(WavChunkHeader);
+                               if (!memcmp(chunkheader.id, "fmt ", 4))
+                               {
+                                       memcpy(&fmtheader, sample, sizeof(WavFmtHeader));
+                                       waveslot->SetSampleFormat(fmtheader.format);
+
+                                       if (fmtheader.format == 0x0001)
+                                       {
+                                               waveslot->SetNumberOfChannels(fmtheader.numberofchannels);
+                                               waveslot->SetBitRate(fmtheader.bitrate);
+                                               waveslot->SetSampleRate(fmtheader.samplerate);
+                                               sample += chunkheader.size;
+                                       } 
+                                       else
+                                       {
+                                               memcpy(&fmtexheader, sample, sizeof(WavFmtExHeader));
+                                               sample += chunkheader.size;
+                                       }
+                               }
+                               else if (!memcmp(chunkheader.id, "data", 4))
+                               {
+                                       if (fmtheader.format == 0x0001)
+                                       {
+                                               waveslot->SetNumberOfSamples(chunkheader.size);
+                                               sample += chunkheader.size;
+                                       }
+                                       else if (fmtheader.format == 0x0011)
+                                       {
+                                               //IMA ADPCM
+                                       }
+                                       else if (fmtheader.format == 0x0055)
+                                       {
+                                               //MP3 WAVE
+                                       }
+                               }
+                               else if (!memcmp(chunkheader.id, "smpl", 4))
+                               {
+                                       memcpy(&sampleheader, sample, sizeof(WavSampleHeader));
+                                       //loop = sampleheader.loops;
+                                       sample += chunkheader.size;
+                               }
+                               else
+                                       sample += chunkheader.size;
+
+                               sample += chunkheader.size & 1;
+                               fileheader.size -= (((chunkheader.size + 1) & ~1) + 8);
+                       }
+               }
+       }
+}
diff --git a/intern/SoundSystem/intern/SND_WaveCache.cpp b/intern/SoundSystem/intern/SND_WaveCache.cpp
new file mode 100644 (file)
index 0000000..a678bd5
--- /dev/null
@@ -0,0 +1,138 @@
+/*
+ * SND_WaveCache.cpp
+ *
+ * abstract wavecache, a way to organize samples
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef WIN32
+#pragma warning (disable:4786) // Get rid of stupid stl-visual compiler debug warning
+#endif //WIN32
+
+#include "SND_WaveCache.h"
+#include <stdio.h>
+
+#ifdef __APPLE__
+# include <sys/malloc.h>
+#else
+# ifdef __FreeBSD__
+#  include <stdlib.h>
+# else
+#  include <malloc.h>
+# endif
+#endif
+
+SND_WaveCache::SND_WaveCache()
+{
+       // do the buffer administration
+       for (int i = 0; i < NUM_BUFFERS; i++)
+               m_bufferList[i] = NULL;
+}
+
+
+
+SND_WaveCache::~SND_WaveCache()
+{
+       // clean up the mess
+       FreeSamples();
+       RemoveAllSamples();
+}
+
+
+
+SND_WaveSlot* SND_WaveCache::GetWaveSlot(const STR_String& samplename)
+{
+       SND_WaveSlot* waveslot = NULL;
+
+       std::map<STR_String, SND_WaveSlot*>::iterator find_result = m_samplecache.find(samplename);
+               
+       // let's see if we have already loaded this sample
+       if (find_result != m_samplecache.end())
+       {
+               waveslot = (*find_result).second;
+       }
+       else
+       {
+               // so the sample wasn't loaded, so do it here
+               for (int bufnum = 0; bufnum < NUM_BUFFERS; bufnum++)
+               {
+                       // find an empty buffer
+                       if (m_bufferList[bufnum] == NULL)
+                       {
+                               waveslot = new SND_WaveSlot();
+                               waveslot->SetSampleName(samplename);
+                               waveslot->SetBuffer(bufnum);
+                               m_bufferList[bufnum] = waveslot;
+                               break;
+                       }
+               }
+               m_samplecache.insert(std::pair<STR_String, SND_WaveSlot*>(samplename, waveslot));
+       }
+
+       return waveslot;
+}
+
+
+
+void SND_WaveCache::RemoveAllSamples()
+{
+       // remove all samples
+       m_samplecache.clear();
+
+       // reset the list of buffers
+       for (int i = 0; i < NUM_BUFFERS; i++)
+               m_bufferList[i] = NULL;
+}
+
+
+
+void SND_WaveCache::RemoveSample(const STR_String& samplename, int buffer)
+{
+       m_samplecache.erase(samplename);
+       m_bufferList[buffer] = NULL;
+}
+
+
+
+void SND_WaveCache::FreeSamples()
+{
+       // iterate through the bufferlist and delete the waveslot if present
+       for (int i = 0; i < NUM_BUFFERS; i++)
+       {
+               if (m_bufferList[i])
+               {
+                       delete m_bufferList[i];
+                       m_bufferList[i] = NULL;
+               }
+       }
+}
diff --git a/intern/SoundSystem/intern/SND_WaveSlot.cpp b/intern/SoundSystem/intern/SND_WaveSlot.cpp
new file mode 100644 (file)
index 0000000..43b2bb5
--- /dev/null
@@ -0,0 +1,180 @@
+/**
+ * $Id$
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "SND_WaveSlot.h"
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+SND_WaveSlot::~SND_WaveSlot()
+{
+#ifdef ONTKEVER
+       printf("neeeeeee...\n");
+#endif
+}
+
+
+
+void SND_WaveSlot::SetSampleName(STR_String samplename)
+{
+       m_samplename = samplename;
+}
+
+
+
+void SND_WaveSlot::SetLoaded(bool loaded)
+{
+       m_loaded = loaded;
+}
+
+
+
+void SND_WaveSlot::SetData(void* data)
+{
+       m_data = data;
+}
+
+
+
+void SND_WaveSlot::SetBuffer(unsigned int buffer)
+{
+       m_buffer = buffer;
+}
+
+
+
+void SND_WaveSlot::SetSampleFormat(unsigned int sampleformat)
+{
+       m_sampleformat = sampleformat;
+}
+
+
+
+void SND_WaveSlot::SetNumberOfChannels(unsigned int numberofchannels)
+{
+       m_numberofchannels = numberofchannels;
+}
+
+
+
+void SND_WaveSlot::SetSampleRate(unsigned int samplerate)
+{
+       m_samplerate = samplerate;
+}
+
+
+
+void SND_WaveSlot::SetBitRate(unsigned int bitrate)
+{
+       m_bitrate = bitrate;
+}
+
+
+
+void SND_WaveSlot::SetNumberOfSamples(unsigned int numberofsamples)
+{
+       m_numberofsamples = numberofsamples;
+}
+
+
+
+void SND_WaveSlot::SetFileSize(unsigned int filesize)
+{
+       m_filesize = filesize;
+}
+
+
+
+const STR_String& SND_WaveSlot::GetSampleName()
+{
+       return m_samplename;
+}
+
+
+
+bool SND_WaveSlot::IsLoaded() const
+{
+       return m_loaded;
+}
+
+
+
+void* SND_WaveSlot::GetData()
+{
+       return m_data;
+}
+
+
+
+unsigned int SND_WaveSlot::GetBuffer() const
+{
+       return m_buffer;
+}
+
+
+
+unsigned int SND_WaveSlot::GetSampleFormat() const
+{
+       return m_sampleformat;
+}
+
+
+
+unsigned int SND_WaveSlot::GetNumberOfChannels() const
+{
+       return m_numberofchannels;
+}
+
+
+
+unsigned int SND_WaveSlot::GetSampleRate() const
+{
+       return m_samplerate;
+}
+
+
+
+unsigned int SND_WaveSlot::GetBitRate() const
+{
+       return m_bitrate;
+}
+
+
+
+unsigned int SND_WaveSlot::GetNumberOfSamples() const
+{
+       return m_numberofsamples;
+}
+
+
+
+unsigned int SND_WaveSlot::GetFileSize() const
+{
+       return m_filesize;
+}
diff --git a/intern/SoundSystem/make/msvc_6_0/SoundSystem.dsp b/intern/SoundSystem/make/msvc_6_0/SoundSystem.dsp
new file mode 100644 (file)
index 0000000..1bd973d
--- /dev/null
@@ -0,0 +1,206 @@
+# Microsoft Developer Studio Project File - Name="SoundSystem" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Static Library" 0x0104\r
+\r
+CFG=SoundSystem - Win32 Release\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "SoundSystem.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "SoundSystem.mak" CFG="SoundSystem - Win32 Release"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "SoundSystem - Win32 Release" (based on "Win32 (x86) Static Library")\r
+!MESSAGE "SoundSystem - Win32 Debug" (based on "Win32 (x86) Static Library")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=cl.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "SoundSystem - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "..\..\..\..\obj\windows\intern\soundsystem"\r
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\soundsystem"\r
+# PROP Target_Dir ""\r
+LINK32=link.exe -lib\r
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c \r
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../" /I "../../../../../lib/windows/string/include" /I "../../../../../lib/windows/moto/include" /I "../../dummy" /I "../../openal" /I "..\..\..\string" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c\r
+# ADD BASE RSC /l 0x409 /d "NDEBUG"\r
+# ADD RSC /l 0x409 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LIB32=link.exe -lib\r
+# ADD BASE LIB32 /nologo\r
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\soundsystem\libSoundSystem.lib"\r
+# Begin Special Build Tool\r
+SOURCE="$(InputPath)"\r
+PostBuild_Cmds=ECHO Copying header files       XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\SoundSystem\include\*.h   ECHO Copying lib        XCOPY /Y ..\..\..\..\obj\windows\intern\soundsystem\*.lib ..\..\..\..\..\lib\windows\SoundSystem\lib\*.a        ECHO Done\r
+# End Special Build Tool\r
+\r
+!ELSEIF  "$(CFG)" == "SoundSystem - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "SoundSystem___Win32_Debug"\r
+# PROP BASE Intermediate_Dir "SoundSystem___Win32_Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "..\..\..\..\obj\windows\intern\soundsystem\debug"\r
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\soundsystem\debug"\r
+# PROP Target_Dir ""\r
+LINK32=link.exe -lib\r
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c\r
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "../../" /I "../../../../../lib/windows/string/include" /I "../../../../../lib/windows/moto/include" /I "../../dummy" /I "../../openal" /I "..\..\..\string" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG"\r
+# ADD RSC /l 0x409 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LIB32=link.exe -lib\r
+# ADD BASE LIB32 /nologo\r
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\soundsystem\debug\libSoundSystem.lib"\r
+# Begin Special Build Tool\r
+SOURCE="$(InputPath)"\r
+PostBuild_Cmds=ECHO Copying header files       XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\SoundSystem\include\*.h   ECHO Copying lib        XCOPY /Y ..\..\..\..\obj\windows\intern\soundsystem\debug\*.lib ..\..\..\..\..\lib\windows\SoundSystem\lib\debug\*.a    ECHO Done\r
+# End Special Build Tool\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "SoundSystem - Win32 Release"\r
+# Name "SoundSystem - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\intern\SND_AudioDevice.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE="..\..\intern\SND_C-api.cpp"\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\intern\SND_CDObject.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\intern\SND_DeviceManager.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\intern\SND_IdObject.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\intern\SND_Scene.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\intern\SND_SoundListener.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\intern\SND_SoundObject.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\intern\SND_Utils.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\intern\SND_WaveCache.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\intern\SND_WaveSlot.cpp\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\intern\SND_AudioDevice.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE="..\..\SND_C-api.h"\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\SND_CDObject.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\SND_DependKludge.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\SND_DeviceManager.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\SND_IAudioDevice.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\intern\SND_IdObject.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\SND_Object.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\SND_Scene.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\SND_SoundListener.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\SND_SoundObject.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\SND_Utils.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\SND_WaveCache.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\SND_WaveSlot.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\SoundDefines.h\r
+# End Source File\r
+# End Group\r
+# End Target\r
+# End Project\r
diff --git a/intern/SoundSystem/make/msvc_6_0/dummy/DummySoundSystem.dsp b/intern/SoundSystem/make/msvc_6_0/dummy/DummySoundSystem.dsp
new file mode 100644 (file)
index 0000000..2bf372d
--- /dev/null
@@ -0,0 +1,103 @@
+# Microsoft Developer Studio Project File - Name="DummySoundSystem" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Static Library" 0x0104\r
+\r
+CFG=DummySoundSystem - Win32 Release\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "DummySoundSystem.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "DummySoundSystem.mak" CFG="DummySoundSystem - Win32 Release"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "DummySoundSystem - Win32 Release" (based on "Win32 (x86) Static Library")\r
+!MESSAGE "DummySoundSystem - Win32 Debug" (based on "Win32 (x86) Static Library")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=cl.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "DummySoundSystem - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\dummy"\r
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\dummy"\r
+# PROP Target_Dir ""\r
+LINK32=link.exe -lib\r
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c\r
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\intern" /I "..\..\..\..\SoundSystem" /I "..\..\..\..\moto\include" /I "..\..\..\..\string" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /J /FD /c\r
+# ADD BASE RSC /l 0x409 /d "NDEBUG"\r
+# ADD RSC /l 0x409 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LIB32=link.exe -lib\r
+# ADD BASE LIB32 /nologo\r
+# ADD LIB32 /nologo /out:"..\..\..\..\..\obj\windows\intern\soundsystem\dummy\libDummySoundSystem.lib"\r
+\r
+!ELSEIF  "$(CFG)" == "DummySoundSystem - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\dummy\debug"\r
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\dummy\debug"\r
+# PROP Target_Dir ""\r
+LINK32=link.exe -lib\r
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c\r
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\intern" /I "..\..\..\..\SoundSystem" /I "..\..\..\..\moto\include" /I "..\..\..\..\string" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /J /FD /c\r
+# SUBTRACT CPP /Fr\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG"\r
+# ADD RSC /l 0x409 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LIB32=link.exe -lib\r
+# ADD BASE LIB32 /nologo\r
+# ADD LIB32 /nologo /out:"..\..\..\..\..\obj\windows\intern\soundsystem\dummy\debug\libDummySoundSystem.lib"\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "DummySoundSystem - Win32 Release"\r
+# Name "DummySoundSystem - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\dummy\SND_DummyDevice.cpp\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\dummy\SND_DummyDevice.h\r
+# End Source File\r
+# End Group\r
+# End Target\r
+# End Project\r
diff --git a/intern/SoundSystem/make/msvc_6_0/openal/OpenALSoundSystem.dsp b/intern/SoundSystem/make/msvc_6_0/openal/OpenALSoundSystem.dsp
new file mode 100644 (file)
index 0000000..ef0c10e
--- /dev/null
@@ -0,0 +1,106 @@
+# Microsoft Developer Studio Project File - Name="OpenALSoundSystem" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Static Library" 0x0104\r
+\r
+CFG=OpenALSoundSystem - Win32 Release\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "OpenALSoundSystem.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "OpenALSoundSystem.mak" CFG="OpenALSoundSystem - Win32 Release"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "OpenALSoundSystem - Win32 Release" (based on "Win32 (x86) Static Library")\r
+!MESSAGE "OpenALSoundSystem - Win32 Debug" (based on "Win32 (x86) Static Library")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=cl.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "OpenALSoundSystem - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\openal"\r
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\openal"\r
+# PROP Target_Dir ""\r
+LINK32=link.exe -lib\r
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c\r
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\intern" /I "..\..\..\..\SoundSystem" /I "..\..\..\..\SoundSystem\sdl" /I "..\..\..\..\moto\include" /I "..\..\..\..\string" /I "..\..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\..\lib\windows\sdl\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c\r
+# ADD BASE RSC /l 0x409 /d "NDEBUG"\r
+# ADD RSC /l 0x409 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LIB32=link.exe -lib\r
+# ADD BASE LIB32 /nologo\r
+# ADD LIB32 /nologo /out:"..\..\..\..\..\obj\windows\intern\soundsystem\openal\libOpenALSoundSystem.lib"\r
+\r
+!ELSEIF  "$(CFG)" == "OpenALSoundSystem - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "OpenALSoundSystem___Win32_Debug"\r
+# PROP BASE Intermediate_Dir "OpenALSoundSystem___Win32_Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\openal\debug"\r
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\openal\debug"\r
+# PROP Target_Dir ""\r
+LINK32=link.exe -lib\r
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c\r
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\intern" /I "..\..\..\..\SoundSystem" /I "..\..\..\..\SoundSystem\sdl" /I "..\..\..\..\moto\include" /I "..\..\..\..\string" /I "..\..\..\..\..\..\lib\windows\sdl\include" /I "..\..\..\..\..\..\lib\windows\openal\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG"\r
+# ADD RSC /l 0x409 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LIB32=link.exe -lib\r
+# ADD BASE LIB32 /nologo\r
+# ADD LIB32 /nologo /out:"..\..\..\..\..\obj\windows\intern\soundsystem\openal\debug\libOpenALSoundSystem.lib"\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "OpenALSoundSystem - Win32 Release"\r
+# Name "OpenALSoundSystem - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\openal\SND_OpenALDevice.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\sdl\SND_SDLCDDevice.cpp\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\openal\SND_OpenALDevice.h\r
+# End Source File\r
+# End Group\r
+# End Target\r
+# End Project\r
diff --git a/intern/SoundSystem/make/msvc_7_0/SoundSystem.vcproj b/intern/SoundSystem/make/msvc_7_0/SoundSystem.vcproj
new file mode 100644 (file)
index 0000000..f0952c5
--- /dev/null
@@ -0,0 +1,339 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="7.10"
+       Name="SoundSystem"
+       ProjectGUID="{98330220-47A6-42E0-9DE4-AD0FF5D204D6}"
+       SccProjectName=""
+       SccLocalPath="">
+       <Platforms>
+               <Platform
+                       Name="Win32"/>
+       </Platforms>
+       <Configurations>
+               <Configuration
+                       Name="Blender Debug|Win32"
+                       OutputDirectory="..\..\..\..\..\build\msvc_7\intern\soundsystem\debug"
+                       IntermediateDirectory="..\..\..\..\..\build\msvc_7\intern\soundsystem\debug"
+                       ConfigurationType="4"
+                       UseOfMFC="0"
+                       ATLMinimizesCRunTimeLibraryUsage="FALSE"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="..\..;..\..\dummy;..\..\openal;..\..\..\..\..\build\msvc_7\intern\string\include;..\..\..\..\..\build\msvc_7\intern\moto\include"
+                               PreprocessorDefinitions="_DEBUG,WIN32,_LIB"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="1"
+                               DefaultCharIsUnsigned="TRUE"
+                               UsePrecompiledHeader="2"
+                               PrecompiledHeaderFile="..\..\..\..\..\build\msvc_7\intern\soundsystem\debug\SoundSystem.pch"
+                               AssemblerListingLocation="..\..\..\..\..\build\msvc_7\intern\soundsystem\debug\"
+                               ObjectFile="..\..\..\..\..\build\msvc_7\intern\soundsystem\debug\"
+                               ProgramDataBaseFileName="..\..\..\..\..\build\msvc_7\intern\soundsystem\debug\"
+                               WarningLevel="2"
+                               SuppressStartupBanner="TRUE"
+                               DebugInformationFormat="3"
+                               CompileAs="0"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLibrarianTool"
+                               OutputFile="..\..\..\..\..\build\msvc_7\libs\intern\debug\libSoundSystem.lib"
+                               SuppressStartupBanner="TRUE"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying SND SoundSystem files library (debug target) to lib tree."
+                               CommandLine="ECHO Copying header files
+IF NOT EXIST ..\..\..\..\..\build\msvc_7\intern\SoundSystem\include MKDIR ..\..\..\..\..\build\msvc_7\intern\SoundSystem\include
+XCOPY /Y ..\..\*.h ..\..\..\..\..\build\msvc_7\intern\SoundSystem\include
+ECHO Done
+"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                               PreprocessorDefinitions="_DEBUG"
+                               Culture="1033"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="Blender Release|Win32"
+                       OutputDirectory="..\..\..\..\..\build\msvc_7\intern\soundsystem"
+                       IntermediateDirectory="..\..\..\..\..\build\msvc_7\intern\soundsystem"
+                       ConfigurationType="4"
+                       UseOfMFC="0"
+                       ATLMinimizesCRunTimeLibraryUsage="FALSE"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               InlineFunctionExpansion="1"
+                               AdditionalIncludeDirectories="..\..;..\..\dummy;..\..\openal;..\..\..\..\..\build\msvc_7\intern\string\include;..\..\..\..\..\build\msvc_7\intern\moto\include"
+                               PreprocessorDefinitions="NDEBUG,WIN32,_LIB"
+                               StringPooling="TRUE"
+                               RuntimeLibrary="0"
+                               EnableFunctionLevelLinking="TRUE"
+                               DefaultCharIsUnsigned="TRUE"
+                               UsePrecompiledHeader="2"
+                               PrecompiledHeaderFile="..\..\..\..\..\build\msvc_7\intern\soundsystem\SoundSystem.pch"
+                               AssemblerListingLocation="..\..\..\..\..\build\msvc_7\intern\soundsystem\"
+                               ObjectFile="..\..\..\..\..\build\msvc_7\intern\soundsystem\"
+                               ProgramDataBaseFileName="..\..\..\..\..\build\msvc_7\intern\soundsystem\"
+                               WarningLevel="2"
+                               SuppressStartupBanner="TRUE"
+                               CompileAs="0"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLibrarianTool"
+                               OutputFile="..\..\..\..\..\build\msvc_7\libs\intern\libSoundSystem.lib"
+                               SuppressStartupBanner="TRUE"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying SND SoundSystem files library to lib tree."
+                               CommandLine="ECHO Copying header files
+IF NOT EXIST ..\..\..\..\..\build\msvc_7\intern\SoundSystem\include MKDIR ..\..\..\..\..\build\msvc_7\intern\SoundSystem\include
+XCOPY /Y ..\..\*.h ..\..\..\..\..\build\msvc_7\intern\SoundSystem\include
+ECHO Done
+"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                               PreprocessorDefinitions="NDEBUG"
+                               Culture="1033"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="3DPlugin Release|Win32"
+                       OutputDirectory="..\..\..\..\..\build\msvc_7\intern\soundsystem\mtdll"
+                       IntermediateDirectory="..\..\..\..\..\build\msvc_7\intern\soundsystem\mtdll"
+                       ConfigurationType="4"
+                       UseOfMFC="0"
+                       ATLMinimizesCRunTimeLibraryUsage="FALSE"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               InlineFunctionExpansion="1"
+                               AdditionalIncludeDirectories="..\..;..\..\dummy;..\..\openal;..\..\..\..\..\build\msvc_7\intern\string\include;..\..\..\..\..\build\msvc_7\intern\moto\include"
+                               PreprocessorDefinitions="NDEBUG,WIN32,_LIB"
+                               StringPooling="TRUE"
+                               RuntimeLibrary="2"
+                               EnableFunctionLevelLinking="TRUE"
+                               DefaultCharIsUnsigned="TRUE"
+                               UsePrecompiledHeader="2"
+                               PrecompiledHeaderFile="..\..\..\..\..\build\msvc_7\intern\soundsystem\mtdll\SoundSystem.pch"
+                               AssemblerListingLocation="..\..\..\..\..\build\msvc_7\intern\soundsystem\mtdll\"
+                               ObjectFile="..\..\..\..\..\build\msvc_7\intern\soundsystem\mtdll\"
+                               ProgramDataBaseFileName="..\..\..\..\..\build\msvc_7\intern\soundsystem\mtdll\"
+                               WarningLevel="2"
+                               SuppressStartupBanner="TRUE"
+                               CompileAs="0"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLibrarianTool"
+                               OutputFile="..\..\..\..\..\build\msvc_7\libs\intern\mtdll\libSoundSystem.lib"
+                               SuppressStartupBanner="TRUE"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying SND SoundSystem files library to lib tree."
+                               CommandLine="ECHO Copying header files
+IF NOT EXIST ..\..\..\..\..\build\msvc_7\intern\SoundSystem\include MKDIR ..\..\..\..\..\build\msvc_7\intern\SoundSystem\include
+XCOPY /Y ..\..\*.h ..\..\..\..\..\build\msvc_7\intern\SoundSystem\include
+ECHO Done
+"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                               PreprocessorDefinitions="NDEBUG"
+                               Culture="1033"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+               <Configuration
+                       Name="3DPlugin Debug|Win32"
+                       OutputDirectory="..\..\..\..\..\build\msvc_7\intern\soundsystem\mtdll\debug"
+                       IntermediateDirectory="..\..\..\..\..\build\msvc_7\intern\soundsystem\mtdll\debug"
+                       ConfigurationType="4"
+                       UseOfMFC="0"
+                       ATLMinimizesCRunTimeLibraryUsage="FALSE"
+                       CharacterSet="2">
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               AdditionalIncludeDirectories="..\..;..\..\dummy;..\..\openal;..\..\..\..\..\build\msvc_7\intern\string\include;..\..\..\..\..\build\msvc_7\intern\moto\include"
+                               PreprocessorDefinitions="_DEBUG,WIN32,_LIB"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="3"
+                               DefaultCharIsUnsigned="TRUE"
+                               UsePrecompiledHeader="2"
+                               PrecompiledHeaderFile="..\..\..\..\..\build\msvc_7\intern\soundsystem\mtdll\debug\SoundSystem.pch"
+                               AssemblerListingLocation="..\..\..\..\..\build\msvc_7\intern\soundsystem\mtdll\debug\"
+                               ObjectFile="..\..\..\..\..\build\msvc_7\intern\soundsystem\mtdll\debug\"
+                               ProgramDataBaseFileName="..\..\..\..\..\build\msvc_7\intern\soundsystem\mtdll\debug\"
+                               WarningLevel="2"
+                               SuppressStartupBanner="TRUE"
+                               DebugInformationFormat="3"
+                               CompileAs="0"/>
+                       <Tool
+                               Name="VCCustomBuildTool"/>
+                       <Tool
+                               Name="VCLibrarianTool"
+                               OutputFile="..\..\..\..\..\build\msvc_7\libs\intern\mtdll\debug\libSoundSystem.lib"
+                               SuppressStartupBanner="TRUE"/>
+                       <Tool
+                               Name="VCMIDLTool"/>
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                               Description="Copying SND SoundSystem files library (debug target) to lib tree."
+                               CommandLine="ECHO Copying header files
+IF NOT EXIST ..\..\..\..\..\build\msvc_7\intern\SoundSystem\include MKDIR ..\..\..\..\..\build\msvc_7\intern\SoundSystem\include
+XCOPY /Y ..\..\*.h ..\..\..\..\..\build\msvc_7\intern\SoundSystem\include
+ECHO Done
+"/>
+                       <Tool
+                               Name="VCPreBuildEventTool"/>
+                       <Tool
+                               Name="VCPreLinkEventTool"/>
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                               PreprocessorDefinitions="_DEBUG"
+                               Culture="1033"/>
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"/>
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"/>
+                       <Tool
+                               Name="VCManagedWrapperGeneratorTool"/>
+                       <Tool
+                               Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+                       <File
+                               RelativePath="..\..\intern\SND_AudioDevice.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\intern\SND_C-api.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\intern\SND_CDObject.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\intern\SND_DeviceManager.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\intern\SND_IdObject.cpp">
+                       </File>
+                       <File
+                               RelativePath="..\..\intern\SND_Scene.cpp">
+                 &n