In this section, we ll show how to add a new environmental reverb effect to the predefined list. This new effect will be for the environment inside of a submarine .
There are very few steps needed to add a new environment. The first is perhaps the most difficult, in that you must come up with a define that matches the DSFXI3DL2Reverb structure listed previously. In dsound .h, you will find a list of these defines for the preset environments, as shown in the following example.
#define I3DL2_ENVIRONMENT_PRESET_SEWERPIPE -1000,-1000, 0.0f, 2.81f, 0.14f, 429, 0.014f, 648, 0.021f, 80.0f, 60.0f, 5000.0f
Follow these steps to create a submarine environment:
Create an I3DL2 definition for the environment. Chapter 5 and 7 will give you a lot of insight on these values, but for now, we will simply copy the sewer pipe environment and make it a submarine one. Add the following lines before the code for the envValues structure in RumpusSFX.cpp .
// Custom environment definitions. #define I3DL2_ENVIRONMENT_SUBMARINE -1000,-1000, 0.0f, 2.81f, 0.14f, 429, 0.014f, 648, 0.021f, 80.0f, 60.0f, 5000.0f2.
At the end of the envValues structure, add the define name into the structure.
I3DL2_ENVIRONMENT_PRESET_SMALLROOM, I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM, I3DL2_ENVIRONMENT_PRESET_LARGEROOM, I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL, I3DL2_ENVIRONMENT_PRESET_LARGEHALL, I3DL2_ENVIRONMENT_PRESET_PLATE, I3DL2_ENVIRONMENT_SUBMARINE
Change the value for max_environments in RumpusSFX.h from 30 to 31.
Add the submarine name to the end of the Enames structure in RumpusEnvironment.cpp .
"Small room (music)", "Medium room (music)", "Large room (music)", "Medium hall (music)", "Large hall (music)", "Plate (music)", "Submarine"
Compile and test the code. If there are any errors, double-check the previous steps.
You can add any number of new environments this way, since there is no limit.