From 71c0b3ffa8dce2eeb7e50f28479fc68704dcbcb6 Mon Sep 17 00:00:00 2001 From: Eugene Cherny <146974283+eu-ch@users.noreply.github.com> Date: Mon, 27 Nov 2023 19:39:08 +0000 Subject: [PATCH] c2wwise rewrite, fixes #123, #126, and #127 (#130) * c2wwise rewrite, fixes #126 * Fix edge case when no dac~ was in the patch, change includes layout, prevent Heavy from overriding "inline" keyword on Windows * Add support for 5.1, 7.1, and 7.1.4 channel configurations * Update Wwise docs * Fix regression that failed on compiled output-less plugins * Update Wwise docs * Fix code style issue * Wwise docs: clarify build example * Wwise docs: remove temporary info * Update Wwise docs --------- Co-authored-by: ech --- docs/03.gen.wwise.md | 221 +++---- docs/img/docs_wwise_overview.png | Bin 0 -> 24513 bytes hvcc/generators/c2wwise/c2wwise.py | 154 ++--- .../libnyquist/AudioDecoder.h | 0 .../include => Includes}/libnyquist/Common.h | 0 .../include => Includes}/libnyquist/Dither.h | 0 .../libnyquist/IMA4Util.h | 0 .../libnyquist/ModplugDecoder.h | 0 .../libnyquist/PostProcess.h | 0 .../libnyquist/RiffUtils.h | 0 .../libnyquist/WavDecoder.h | 0 .../libnyquist/WavEncoder.h | 0 .../c2wwise/templates/PremakePlugin.lua | 73 +++ .../{{name}}{{plugin_type}}.cpp | 296 +++++++++ .../{{name}}{{plugin_type}}.h | 65 ++ .../{{name}}{{plugin_type}}Factory.h | 8 + .../{{name}}{{plugin_type}}Params.cpp | 82 +++ .../{{name}}{{plugin_type}}Params.h | 38 ++ .../{{name}}{{plugin_type}}Shared.cpp | 9 + .../include => WwisePlugin/Win32}/stdafx.h | 0 .../WwisePlugin/Win32/{{name}}PluginGUI.cpp | 191 ++++++ .../WwisePlugin/Win32/{{name}}PluginGUI.h | 29 + .../libnyquist/AudioDecoder.cpp | 0 .../libnyquist/Common.cpp | 0 .../libnyquist/RiffUtils.cpp | 0 .../libnyquist/WavDecoder.cpp | 0 .../libnyquist/WavEncoder.cpp | 0 .../resource.h} | 0 .../templates/WwisePlugin/{{name}}.def | 3 + .../{{name}}.rc} | 12 +- .../{{name}}.xml} | 4 +- .../templates/WwisePlugin/{{name}}Plugin.cpp | 89 +++ .../templates/WwisePlugin/{{name}}Plugin.h | 38 ++ .../c2wwise/templates/bundle_template.json | 25 + .../c2wwise/templates/linux/Makefile | 52 -- .../Hv_{{name}}_WwiseAuthoringPlugin.cpp | 300 --------- .../Hv_{{name}}_WwiseAuthoringPlugin.def | 6 - .../Hv_{{name}}_WwiseAuthoringPlugin.h | 82 --- .../Hv_{{name}}_WwiseAuthoringPluginApp.cpp | 34 - .../Hv_{{name}}_WwiseAuthoringPluginApp.h | 22 - .../Hv_{{name}}_WwisePluginEngineParams.cpp | 77 --- .../Hv_{{name}}_WwisePluginEngineParams.h | 83 --- .../Hv_{{name}}_Wwise{{type}}PluginEngine.cpp | 247 ------- .../Hv_{{name}}_Wwise{{type}}PluginEngine.h | 65 -- .../include/Hv_{{name}}_WwisePluginIDs.h | 15 - .../Hv_{{name}}_Wwise{{type}}PluginFactory.h | 13 - .../Hv_{{name}}_WwisePluginRegister.cpp | 13 - ...v_{{name}}_Wwise{{type}}AuthPlugin.vcxproj | 469 ------------- .../Hv_{{name}}_Wwise{{type}}Engine.vcxproj | 299 --------- .../Hv_{{name}}_Wwise{{type}}Plugin.sln | 68 -- ...{name}}_Wwise{{type}}RuntimePlugin.vcxproj | 435 ------------ .../c2wwise/templates/xcode/Info.plist | 28 - .../xcode/Plugin.xcodeproj/project.pbxproj | 617 ------------------ .../c2wwise/templates/xcode/wwise.xcconfig | 1 - .../c2wwise/templates/{{name}}Config.h | 12 + hvcc/generators/ir2c/static/HvUtils.h | 2 + 56 files changed, 1094 insertions(+), 3183 deletions(-) create mode 100644 docs/img/docs_wwise_overview.png rename hvcc/generators/c2wwise/templates/{source/include => Includes}/libnyquist/AudioDecoder.h (100%) rename hvcc/generators/c2wwise/templates/{source/include => Includes}/libnyquist/Common.h (100%) rename hvcc/generators/c2wwise/templates/{source/include => Includes}/libnyquist/Dither.h (100%) rename hvcc/generators/c2wwise/templates/{source/include => Includes}/libnyquist/IMA4Util.h (100%) rename hvcc/generators/c2wwise/templates/{source/include => Includes}/libnyquist/ModplugDecoder.h (100%) rename hvcc/generators/c2wwise/templates/{source/include => Includes}/libnyquist/PostProcess.h (100%) rename hvcc/generators/c2wwise/templates/{source/include => Includes}/libnyquist/RiffUtils.h (100%) rename hvcc/generators/c2wwise/templates/{source/include => Includes}/libnyquist/WavDecoder.h (100%) rename hvcc/generators/c2wwise/templates/{source/include => Includes}/libnyquist/WavEncoder.h (100%) create mode 100644 hvcc/generators/c2wwise/templates/PremakePlugin.lua create mode 100644 hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}.cpp create mode 100644 hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}.h create mode 100644 hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}Factory.h create mode 100644 hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}Params.cpp create mode 100644 hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}Params.h create mode 100644 hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}Shared.cpp rename hvcc/generators/c2wwise/templates/{source/include => WwisePlugin/Win32}/stdafx.h (100%) create mode 100644 hvcc/generators/c2wwise/templates/WwisePlugin/Win32/{{name}}PluginGUI.cpp create mode 100644 hvcc/generators/c2wwise/templates/WwisePlugin/Win32/{{name}}PluginGUI.h rename hvcc/generators/c2wwise/templates/{source => WwisePlugin}/libnyquist/AudioDecoder.cpp (100%) rename hvcc/generators/c2wwise/templates/{source => WwisePlugin}/libnyquist/Common.cpp (100%) rename hvcc/generators/c2wwise/templates/{source => WwisePlugin}/libnyquist/RiffUtils.cpp (100%) rename hvcc/generators/c2wwise/templates/{source => WwisePlugin}/libnyquist/WavDecoder.cpp (100%) rename hvcc/generators/c2wwise/templates/{source => WwisePlugin}/libnyquist/WavEncoder.cpp (100%) rename hvcc/generators/c2wwise/templates/{source/authoring/Hv_{{name}}_WwiseResource.h => WwisePlugin/resource.h} (100%) create mode 100644 hvcc/generators/c2wwise/templates/WwisePlugin/{{name}}.def rename hvcc/generators/c2wwise/templates/{source/authoring/Hv_{{name}}_WwiseAuthoringPlugin.rc => WwisePlugin/{{name}}.rc} (94%) rename hvcc/generators/c2wwise/templates/{resources/Hv_{{name}}_Wwise{{type}}AuthPlugin.xml => WwisePlugin/{{name}}.xml} (97%) create mode 100644 hvcc/generators/c2wwise/templates/WwisePlugin/{{name}}Plugin.cpp create mode 100644 hvcc/generators/c2wwise/templates/WwisePlugin/{{name}}Plugin.h create mode 100644 hvcc/generators/c2wwise/templates/bundle_template.json delete mode 100644 hvcc/generators/c2wwise/templates/linux/Makefile delete mode 100644 hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPlugin.cpp delete mode 100644 hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPlugin.def delete mode 100644 hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPlugin.h delete mode 100644 hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPluginApp.cpp delete mode 100644 hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPluginApp.h delete mode 100644 hvcc/generators/c2wwise/templates/source/engine/Hv_{{name}}_WwisePluginEngineParams.cpp delete mode 100644 hvcc/generators/c2wwise/templates/source/engine/Hv_{{name}}_WwisePluginEngineParams.h delete mode 100644 hvcc/generators/c2wwise/templates/source/engine/Hv_{{name}}_Wwise{{type}}PluginEngine.cpp delete mode 100644 hvcc/generators/c2wwise/templates/source/engine/Hv_{{name}}_Wwise{{type}}PluginEngine.h delete mode 100644 hvcc/generators/c2wwise/templates/source/include/Hv_{{name}}_WwisePluginIDs.h delete mode 100644 hvcc/generators/c2wwise/templates/source/include/Hv_{{name}}_Wwise{{type}}PluginFactory.h delete mode 100644 hvcc/generators/c2wwise/templates/source/runtime/Hv_{{name}}_WwisePluginRegister.cpp delete mode 100644 hvcc/generators/c2wwise/templates/vs2015/Hv_{{name}}_Wwise{{type}}AuthPlugin.vcxproj delete mode 100644 hvcc/generators/c2wwise/templates/vs2015/Hv_{{name}}_Wwise{{type}}Engine.vcxproj delete mode 100644 hvcc/generators/c2wwise/templates/vs2015/Hv_{{name}}_Wwise{{type}}Plugin.sln delete mode 100644 hvcc/generators/c2wwise/templates/vs2015/Hv_{{name}}_Wwise{{type}}RuntimePlugin.vcxproj delete mode 100644 hvcc/generators/c2wwise/templates/xcode/Info.plist delete mode 100644 hvcc/generators/c2wwise/templates/xcode/Plugin.xcodeproj/project.pbxproj delete mode 100644 hvcc/generators/c2wwise/templates/xcode/wwise.xcconfig create mode 100644 hvcc/generators/c2wwise/templates/{{name}}Config.h diff --git a/docs/03.gen.wwise.md b/docs/03.gen.wwise.md index 71c69202..c4280fa4 100644 --- a/docs/03.gen.wwise.md +++ b/docs/03.gen.wwise.md @@ -2,21 +2,29 @@ ## Version Support -`hvcc` will generate a Wwise plugin project that links against a particular Wwise SDK version. +`hvcc` will generate a Wwise plugin project that can be built with Audiokinetic's build system, see [Using the Development Tools](https://www.audiokinetic.com/en/library/edge/?source=SDK&id=effectplugin_tools.html). This system can generate project files for all supported platforms, as well as package the plugin for distribution with Wwise Launcher. Please refer to the official documentation for more details. -The default is currently `2017.2.2.6553`, however if it's necessary to link against a different Wwise SDK, change the value of `wwise_sdk_version` in the c2wwise generator (found [here](https://github.com/Wasted-Audio/hvcc/blob/master/generators/c2wwise/c2wwise.py#L58)) to the required SDK version string. +## Feature Overview -## Source Generator or FX Unit +Heavy currently supports the following Wwise features: + +- Source or Effect plugins +- Using uncompressed audio to build samplers +- Input parameters are RTPC-controllable +- Output parameters can set RTPC in Wwise +- Output events can post arbitrary events in Wwise from the plugin -The type of plugin that **heavy** generates is dynamically determined depending on the [I/O channel configuration](02.getting_started.md#audio-input-output). +![Feature overview](img/docs_wwise_overview.png) + +## Source Generator or FX Unit -If an `[adc~]` object exists in the patch the generated plugin with be an FX unit. Otherwise it'll be a source generator plugin. +The type of plugin that **heavy** generates is dynamically determined depending on the [I/O channel configuration](02.getting_started.md#audio-input-output). If an `[adc~]` object exists in the patch the generated plugin with be an FX unit. Otherwise it'll be a source generator plugin. ## RTPCs The Wwise target supports both [input and output parameters](02.getting_started.md#exposing-parameters). -![rtpcs](img/docs_wwise_params.png) +![](img/docs_wwise_params.png) ### Input Parameters @@ -24,176 +32,99 @@ Exposing an input parameter will automatically generate a Slider UI in the plugi ### Output Parameters -Sending a `single float value` to an output parameters will in turn cause the corresponding Global RTPC of the same name to be set. - -This is useful for letting the plugins control other behaviours within the game system. - -**Note**: it's important that the naming of the output parameter and the global RTPC set up in Wwise are exactly the same. - -The example patch below describes a simple envelope follower: - -![authoring_plugin](img/docs_wwise_env.png) - -## Authoring Plugin Installation - -### Authoring Assets - -The Authoring plugin is what shows up in the Wwise Authoring interface, you can assign this plugin to Sound SFX objects and hook up RTPCs to its parameters. - -### Runtime Assets - -The runtime components are used by the Wwise integration engine, these are the files that will be actually used by your game or application. We provide both a dynamic plugin that can be easily loaded into development engines like Unity and Unreal, as well a static library that can be compiled directly into the Wwise Integration. +Sending a `single float value` to an output parameters will in turn cause the corresponding RTPC of the same name to be set. It will be set on the same game object. **Note**: it's important that the naming of the output parameter and the global RTPC set up in Wwise are exactly the same. -### Windows Authoring 32bit +The example patch below describes a simple envelope follower that can be used to modulate other parameters of the same voice: -Take the following files found in the `Wwise Win32` target: +![Envelope follower with an output RTPC](img/docs_wwise_env.png) -* `HV_{PATCH_NAME}_WwiseSourceAuthPlugin.dll` -* `HV_{PATCH_NAME}_WwiseSourceAuthPlugin.xml` +### Posting Wwise Events from the Plugin -And place them in the following location: +Sending any message to an output event will post a Wwise event with the same name on the same game object. This can be used, for example, to trigger events in Wwise in response to RTPC changes, or to implement a generative event triggering system. -* `C:\Program Files (x86)\Audiokinetic\Wwise 2017.1.0.6302\Authoring\Win32\Release\bin\plugins` +Note, in some situations, Heavy may only be able to send one output message per tick, e.g. posting an event and setting an RTPC at the same time won't be possible. To work around this, you can spread these actions apart with a `[delay 1]` node, for example. -### Windows Authoring 64bit +### Multi-channel plugins -Take the following files found in the `Wwise Win64` target: +The plugin supports the following channel configurations: -* `HV_{PATCH_NAME}_WwiseSourceAuthPlugin.dll` -* `HV_{PATCH_NAME}_WwiseSourceAuthPlugin.xml` +- AK_SPEAKER_SETUP_MONO +- AK_SPEAKER_SETUP_STEREO +- AK_SPEAKER_SETUP_5POINT1 +- AK_SPEAKER_SETUP_7POINT1 +- AK_SPEAKER_SETUP_DOLBY_7_1_4 -And place them in one of the following locations: +An appropriate configuration will be selected at compile time based on the number of inputs and outputs in a patch (e.g. `[adc~ 1 2 3 4 5 6]` will create a 5.1 plugin). As this information is compiled in, the plugins can only be used on busses with corresponding channel configurations and will print an error if used elsewhere. To work around this, you can enforce bus channel configuration in the 'General Settings' tab. -* `C:\Program Files (x86)\Audiokinetic\Wwise 2017.1.0.6302\Authoring\x64\Release\bin\plugins` +## Example: Building Your Plugin on Windows -### Mac OSX Authoring +### Installing Visual Studio and Required Components -The Wwise Authoring application for Mac OSX uses a Wine wrapper and therefore requires plugin binaries compiled for Windows. +To build Authoring and Engine plugins on Windows you’ll need: -Take the following files found in the `Wwise Win32` target: +- If using Visual Studio 2019: + - Desktop development with C++ workload + - MSVC v142 - VS 2019 C++ x64/x86 build tools + - C++ ATL for latest v142 build tools (x86 & x64) + - C++ MFC for latest v142 build tools (x86 & x64) + - Windows Universal CRT SDK + - Windows 10 SDK (10.0.19041.0) + - Different version can be specified in a generated + PremakePlugin.lua file +- If using Visual Studio 2022 + - Requirements are the same as for 2019, but components of version v143 must be installed instead + - *Note:* Wwise of version at least 2022.1.5 is required to build plugins with this version of Visual Studio +- Wwise 2022 or later + - Version 2021 should work, too, but it wasn't tested + - SDKs with required deployment platforms must be installed through + Wwise Launcher -* `HV_{PATCH_NAME}_WwiseSourceAuthPlugin.dll` -* `HV_{PATCH_NAME}_WwiseSourceAuthPlugin.xml` +### Converting a Pure Data Patch to C++ Code -And place them in the following location: +Let's say we've got a Pd patch HvccTestFX71.pd which was saved on a Desktop. These commands will generate code for this patch and place it in *Hvcc_Out_Dir* directory: -* `/Applications/Audiokinetic/Wwise 2017.1.0.6302/Wwise.app/Contents/SharedSupport/Wwise2016/support/wwise/drive_c/Program Files/Audiokinetic/Wwise/Authoring/Win32/Release/bin/plugins/` - -After installing the plugins the Wine cache will need to be refreshed, in a command-line application like Terminal run the following commands: - -```bash -cd "/Applications/Audiokinetic/Wwise 2017.1.0.6302/Wwise.app/Contents/SharedSupport/Wwise2017/" -``` - -```bash -CX_ROOT="/Applications/Audiokinetic/Wwise 2017.1.0.6302/Wwise.app/Contents/SharedSupport/Wwise2017/" WINEPREFIX="/Applications/Audiokinetic/Wwise 2017.1.0.6302/Wwise.app/Contents/SharedSupport/Wwise2017/support/wwise/" ./bin/wineprefixcreate --snapshot +```cmd +cd C:\Users\login\Desktop +hvcc HvccTestFX71.pd -o Hvcc_Out_Dir -g wwise -n HvccTestFX71 ``` -Note: for different versions of Wwise make sure to edit the command text to include the relevant version string (`Wwise 2017.1.0.6302`). - -## Adding a Source Plugin - -![source_plugin](img/docs_wwise_source_plug.gif) - -## Unity Integration - -### Setting up the projects - -First create a new Wwise project, add a Source plugin to a game object, create an Event to trigger it and add it to a Soundbank. - -Then create a new Unity project, add the Wwise Unity integration package, reference your Wwise authoring application and previously created project. - -Add an empty GameObject to your scene, add an AKBank and AKEvent object and initialise them with ones created in your Wwise project. - -After following the instructions below to install the plugin, make sure your soundbanks have been generated and press play in the Unity editor. - -### Windows 32bit +### Building C++ Code -From the `Wwise Windows 32bit` target take the following file: +Heavy generates a project compatible with Audiokinetic's [Development Tools](https://www.audiokinetic.com/en/library/edge/?source=SDK&id=effectplugin_tools.html), which can build the plugins for all supported platforms, see the documentation for more details. **Important:** Please close any running Wwise Authoring instance as it'll prevent the plugin from being built. -* `HV_{PATCH_NAME}_WwiseSourcePlugin.dll` +Change into the generated directory: -And place it in the following directory: - -* `{UNITY_PROJECT}/Assets/Wwise/Deployment/Plugins/Windows/x86/DSP/` - -### Windows 64bit - -From the `Wwise Windows 64bit` target take the following file: - -* `HV_{PATCH_NAME}_WwiseSourcePlugin.dll` - -And place it in the following directory: - -* `{UNITY_PROJECT}/Assets/Wwise/Deployment/Plugins/Windows/x86_64/DSP/` - -### Mac OSX - -From the `Wwise macOS 64bit` target take the following file from the `/osx/x86_64/Release/` directory: - -* `libHV_{PATCH_NAME}_WwiseSourcePlugin.bundle` - -And place it in the following directory: - -* `{UNITY_PROJECT}/Assets/Wwise/Deployment/Plugins/Mac/DSP/` - -*Note: the Mac OSX builds are 64bit only.* - -### iOS - -From the `Wwise iOS armv7a` target take the downloaded files: - -* `libHV_{PATCH_NAME}_WwiseSourcePluginFactory.h` -* `libHV_{PATCH_NAME}_WwiseSourcePlugin.a` - -And place it in the following directory: - -* `{UNITY_PROJECT}/Assets/Wwise/Deployment/Plugins/iOS/DSP/` - -## Compiling the Plugin - -Each platform has its own way of compiling the plugins. - -### Mac OSX - -An Xcode project exists in the `unity/xcode` directory and the plugin may be built manually. It can also be compiled directly from the commandline. - -```bash -$ cd unity/xcode -$ xcodebuild -project Hv_heavy_WwiseSourcePlugin.xcodeproj -target Hv_heavy_WwiseSourcePlugin -arch x86_64 +```cmd +cd Hvcc_Out_Dir\wwise ``` -The results are placed in `unity/build/macos/x86_64/Release`. - -### iOS +Generate Visual Studio project files; note, WWISEROOT environment variable can be set from Wwise Launcher by clicking on *Set Environment Variables* button in front of an installed Wwise entry: -An Xcode project exists in the `unity/xcode` directory and the plugin may be built manually. It can also be compiled directly from the commandline. - -```bash -$ cd unity/xcode -$ xcodebuild -project Hv_heavy_WwiseSourcePlugin.xcodeproj -target Hv_heavy_WwiseSourcePlugin -arch armv7s +```cmd +python %WWISEROOT%\Scripts\Build\Plugins\wp.py premake Authoring +python %WWISEROOT%\Scripts\Build\Plugins\wp.py premake Windows_vc160 ``` -The results are placed in `unity/build/macos/armv7s/Release`. - -### Linux +Build Authoring and Engine plugins in Release configurations; for Visual Studio 2022 replace vc160 with vc170: -```bash -$ cd unity/linux -$ make -j +```cmd +python %WWISEROOT%\Scripts\Build\Plugins\wp.py build -c Release -x x64 -t vc160 Authoring +python %WWISEROOT%\Scripts\Build\Plugins\wp.py build -c Release -x x64 -t vc160 Windows_vc160 ``` -The results are placed in `unity/build/linux/x86_64/release`. +At this point, the plugins should be placed in correct SDK directories and be ready for use in the Authoring app. -### Windows +### Optional: Packaging the Binaries for Wwise Launcher -A Visual Studio 2015 project exists in the `unity/vs2015` directory and the plugin may be built manually. It can also be compiled directly from the commandline. +We can go a step further and package the plugins into a bundle that can be installed conveniently from Wwise Launcher. -```bash -$ cd unity/vs2015 -$ "C:/Program Files (x86)/MSBuild/14.0/Bin/MSBuild.exe" /property:Configuration=Release /property:Platform=x64 /t:Rebuild Hv_heavy_WwiseSourcePlugin.sln /m +```cmd +python %WWISEROOT%\Scripts\Build\Plugins\wp.py package --version 2022.1.0.1 Authoring +python %WWISEROOT%\Scripts\Build\Plugins\wp.py package --version 2022.1.0.1 Windows_vc160 +python %WWISEROOT%\Scripts\Build\Plugins\wp.py generate-bundle --version 2022.1.0.1 +mkdir Bundle +copy /y bundle.json Bundle +copy /y *.tar.xz Bundle ``` -The results are placed in `unity/build/win/x64/Release`. - -Plugins for x86 may also be built by specifying `/property:Platform=x86`. +The *Bundle* directory now contains a packaged plugin you can install through Wwise Launcher, see Wwise Version -> Manage Plug-ins -> Install from directory / Install from archive. diff --git a/docs/img/docs_wwise_overview.png b/docs/img/docs_wwise_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..eaf4d2061f26ebfd4b12e99fef97573013942f7c GIT binary patch literal 24513 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 literal 0 HcmV?d00001 diff --git a/hvcc/generators/c2wwise/c2wwise.py b/hvcc/generators/c2wwise/c2wwise.py index e3db4932..aa53ab9b 100644 --- a/hvcc/generators/c2wwise/c2wwise.py +++ b/hvcc/generators/c2wwise/c2wwise.py @@ -21,7 +21,7 @@ from typing import Dict, Optional from ..copyright import copyright_manager -from ..filters import filter_plugin_id, filter_xcode_build, filter_xcode_fileref +from ..filters import filter_plugin_id class c2wwise: @@ -31,123 +31,79 @@ class c2wwise: @classmethod def compile( - cls, - c_src_dir: str, - out_dir: str, - externs: Dict, - patch_name: Optional[str] = None, - patch_meta: Optional[Dict] = None, - num_input_channels: int = 0, - num_output_channels: int = 0, - copyright: Optional[str] = None, - verbose: Optional[bool] = False + cls, + c_src_dir: str, + out_dir: str, + externs: Dict, + patch_name: Optional[str] = None, + patch_meta: Optional[Dict] = None, + num_input_channels: int = 0, + num_output_channels: int = 0, + copyright: Optional[str] = None, + verbose: Optional[bool] = False ) -> Dict: - tick = time.time() in_parameter_list = externs["parameters"]["in"] out_parameter_list = externs["parameters"]["out"] event_list = externs["events"]["in"] + out_event_list = externs["events"]["out"] table_list = externs["tables"] - - out_dir = os.path.join(out_dir, "wwise") patch_name = patch_name or "heavy" - copyright_c = copyright_manager.get_copyright_for_c(copyright) copyright_xml = copyright_manager.get_copyright_for_xml(copyright) - wwise_sdk_version = "2017.2.2.6553" + templates_dir = os.path.join(os.path.dirname(__file__), "templates") + is_source_plugin = num_input_channels == 0 + plugin_type = "Source" if is_source_plugin else "FX" + plugin_id = filter_plugin_id(patch_name) + out_dir = os.path.join(out_dir, "wwise") if not os.path.exists(out_dir): os.makedirs(out_dir) - templates_dir = os.path.join(os.path.dirname(__file__), "templates") - plugin_type = "Source" if num_input_channels == 0 else "FX" - plugin_id = filter_plugin_id(patch_name) - env = jinja2.Environment() - env.filters["xcode_build"] = filter_xcode_build - env.filters["xcode_fileref"] = filter_xcode_fileref env.loader = jinja2.FileSystemLoader( encoding="utf-8-sig", searchpath=[templates_dir]) - try: + channel_config = None + if num_output_channels == 0: + # Workaround to support patches that don't have any outputs, + # e.g. that only ever set RTPCs or post events + channel_config = "AK_SPEAKER_SETUP_MONO" + elif num_output_channels == 1: + channel_config = "AK_SPEAKER_SETUP_MONO" + elif num_output_channels == 2: + channel_config = "AK_SPEAKER_SETUP_STEREO" + elif num_output_channels == 6: + channel_config = "AK_SPEAKER_SETUP_5POINT1" + elif num_output_channels == 8: + channel_config = "AK_SPEAKER_SETUP_7POINT1" + elif num_output_channels == 12: + channel_config = "AK_SPEAKER_SETUP_DOLBY_7_1_4" + else: + raise Exception("Wwise plugins support only mono, stereo, 5.1, 7.1, " + "and 7.1.4 (Atmos) configurations, number of [dac~] channels should be appropriate") + if plugin_type == "FX": - if num_input_channels > 2: - raise Exception("Wwise FX plugins support a maximum of 2 channels (i.e. [adc~ 1] or [adc~ 1 2]).") if num_input_channels != num_output_channels: raise Exception("Wwise FX plugins require the same input/output channel" "configuration (i.e. [adc~ 1] -> [dac~ 1]).") - # copy over generated C source files - patch_src_dir = os.path.join(out_dir, "source", "heavy") + patch_src_dir = os.path.join(out_dir, "SoundEnginePlugin", "Heavy") if os.path.exists(patch_src_dir): shutil.rmtree(patch_src_dir) shutil.copytree(c_src_dir, patch_src_dir) - # template all source files - src_extns = ["h", "hpp", "c", "cpp", "xml", "def", "rc", "plist"] - for f in env.list_templates(extensions=src_extns): + src_ext_list = ["h", "hpp", "c", "cpp", "xml", "def", "rc", "lua", "json"] + for f in env.list_templates(extensions=src_ext_list): file_dir = os.path.join(out_dir, os.path.dirname(f)) file_name = os.path.basename(f) - # ignore source plugin files if type is FX - if (file_dir.endswith("plugin_source") and plugin_type != "Source"): - continue - - # ignore fx plugin files if type is Source - elif (file_dir.endswith("plugin_fx") and plugin_type != "FX"): - continue - - # static files - if file_name in ["stdafx.h", "Info.plist"]: - file_path = os.path.join(file_dir, file_name) - - if not os.path.exists(os.path.dirname(file_path)): - os.makedirs(os.path.dirname(file_path)) - - shutil.copyfile(os.path.join(templates_dir, f), file_path) - - # templated files - else: - file_name = file_name.replace("{{name}}", patch_name) - file_name = file_name.replace("{{type}}", plugin_type) - file_path = os.path.join(file_dir, file_name) - - if not os.path.exists(os.path.dirname(file_path)): - os.makedirs(os.path.dirname(file_path)) - - with open(file_path, "w") as g: - g.write(env.get_template(f).render( - name=patch_name, - parameters=in_parameter_list, - sends=out_parameter_list, - events=event_list, - tables=table_list, - pool_sizes_kb=externs["memoryPoolSizesKb"], - plugin_type=plugin_type, - plugin_id=plugin_id, - copyright=copyright_xml if file_name.endswith(".xml") else copyright_c)) - - files = [f for f in os.listdir(patch_src_dir)] - - # template all ide project files - for f in env.list_templates(extensions=["vcxproj", "sln", "pbxproj", "xcconfig"]): - - # xcode projects are structured differently to visual studio projects - if f.endswith("pbxproj"): - xcode_proj_dir = os.path.splitext(os.path.dirname(f)) - file_path = os.path.join( - out_dir, - os.path.dirname(xcode_proj_dir[0]), - f"Hv_ {patch_name}_Wwise {plugin_type}" - f" {os.path.basename(xcode_proj_dir[0])} {xcode_proj_dir[1]}", - os.path.basename(f)) - else: - file_path = f.replace("{{name}}", patch_name) - file_path = file_path.replace("{{type}}", plugin_type) - file_path = os.path.join(out_dir, file_path.replace("{{type}}", plugin_type)) + file_name = file_name.replace("{{name}}", patch_name) + file_name = file_name.replace("{{plugin_type}}", plugin_type) + file_path = os.path.join(file_dir, file_name) if not os.path.exists(os.path.dirname(file_path)): os.makedirs(os.path.dirname(file_path)) @@ -156,28 +112,18 @@ def compile( g.write(env.get_template(f).render( name=patch_name, parameters=in_parameter_list, - sends=out_parameter_list, + out_params=out_parameter_list, + out_events=out_event_list, events=event_list, tables=table_list, + pool_sizes_kb=externs["memoryPoolSizesKb"], + is_source=is_source_plugin, + num_input_channels=num_input_channels, + num_output_channels=num_output_channels, + channel_config=channel_config, plugin_type=plugin_type, plugin_id=plugin_id, - wwise_version=wwise_sdk_version, - msbuild_version="140", - files=files)) - - # linux makefile - linux_makefile = os.path.join(out_dir, "linux", "Makefile") - - if not os.path.exists(os.path.dirname(linux_makefile)): - os.makedirs(os.path.dirname(linux_makefile)) - - with open(linux_makefile, "w") as g: - g.write(env.get_template("linux/Makefile").render( - name=patch_name, - plugin_type=plugin_type, - plugin_id=plugin_id, - files=files, - wwise_version=wwise_sdk_version)) + copyright=copyright_xml if file_name.endswith(".xml") else copyright_c)) return { "stage": "c2wwise", diff --git a/hvcc/generators/c2wwise/templates/source/include/libnyquist/AudioDecoder.h b/hvcc/generators/c2wwise/templates/Includes/libnyquist/AudioDecoder.h similarity index 100% rename from hvcc/generators/c2wwise/templates/source/include/libnyquist/AudioDecoder.h rename to hvcc/generators/c2wwise/templates/Includes/libnyquist/AudioDecoder.h diff --git a/hvcc/generators/c2wwise/templates/source/include/libnyquist/Common.h b/hvcc/generators/c2wwise/templates/Includes/libnyquist/Common.h similarity index 100% rename from hvcc/generators/c2wwise/templates/source/include/libnyquist/Common.h rename to hvcc/generators/c2wwise/templates/Includes/libnyquist/Common.h diff --git a/hvcc/generators/c2wwise/templates/source/include/libnyquist/Dither.h b/hvcc/generators/c2wwise/templates/Includes/libnyquist/Dither.h similarity index 100% rename from hvcc/generators/c2wwise/templates/source/include/libnyquist/Dither.h rename to hvcc/generators/c2wwise/templates/Includes/libnyquist/Dither.h diff --git a/hvcc/generators/c2wwise/templates/source/include/libnyquist/IMA4Util.h b/hvcc/generators/c2wwise/templates/Includes/libnyquist/IMA4Util.h similarity index 100% rename from hvcc/generators/c2wwise/templates/source/include/libnyquist/IMA4Util.h rename to hvcc/generators/c2wwise/templates/Includes/libnyquist/IMA4Util.h diff --git a/hvcc/generators/c2wwise/templates/source/include/libnyquist/ModplugDecoder.h b/hvcc/generators/c2wwise/templates/Includes/libnyquist/ModplugDecoder.h similarity index 100% rename from hvcc/generators/c2wwise/templates/source/include/libnyquist/ModplugDecoder.h rename to hvcc/generators/c2wwise/templates/Includes/libnyquist/ModplugDecoder.h diff --git a/hvcc/generators/c2wwise/templates/source/include/libnyquist/PostProcess.h b/hvcc/generators/c2wwise/templates/Includes/libnyquist/PostProcess.h similarity index 100% rename from hvcc/generators/c2wwise/templates/source/include/libnyquist/PostProcess.h rename to hvcc/generators/c2wwise/templates/Includes/libnyquist/PostProcess.h diff --git a/hvcc/generators/c2wwise/templates/source/include/libnyquist/RiffUtils.h b/hvcc/generators/c2wwise/templates/Includes/libnyquist/RiffUtils.h similarity index 100% rename from hvcc/generators/c2wwise/templates/source/include/libnyquist/RiffUtils.h rename to hvcc/generators/c2wwise/templates/Includes/libnyquist/RiffUtils.h diff --git a/hvcc/generators/c2wwise/templates/source/include/libnyquist/WavDecoder.h b/hvcc/generators/c2wwise/templates/Includes/libnyquist/WavDecoder.h similarity index 100% rename from hvcc/generators/c2wwise/templates/source/include/libnyquist/WavDecoder.h rename to hvcc/generators/c2wwise/templates/Includes/libnyquist/WavDecoder.h diff --git a/hvcc/generators/c2wwise/templates/source/include/libnyquist/WavEncoder.h b/hvcc/generators/c2wwise/templates/Includes/libnyquist/WavEncoder.h similarity index 100% rename from hvcc/generators/c2wwise/templates/source/include/libnyquist/WavEncoder.h rename to hvcc/generators/c2wwise/templates/Includes/libnyquist/WavEncoder.h diff --git a/hvcc/generators/c2wwise/templates/PremakePlugin.lua b/hvcc/generators/c2wwise/templates/PremakePlugin.lua new file mode 100644 index 00000000..f7aedc68 --- /dev/null +++ b/hvcc/generators/c2wwise/templates/PremakePlugin.lua @@ -0,0 +1,73 @@ +if not _AK_PREMAKE then + error('You must use the custom Premake5 scripts by adding the following parameter: --scripts="Scripts\\Premake"', 1) +end + +local Plugin = {} +Plugin.name = "{{name}}" +Plugin.factoryheader = "../SoundEnginePlugin/{{name}}{{plugin_type}}Factory.h" +Plugin.sdk = {} +Plugin.sdk.static = {} +Plugin.sdk.shared = {} +Plugin.authoring = {} + +Plugin.sdk.static.includedirs = {} +Plugin.sdk.static.files = +{ + "**.cpp", + "**.h", + "**.hpp", + "**.c", +} +Plugin.sdk.static.excludes = +{ + "{{name}}{{plugin_type}}Shared.cpp" +} +Plugin.sdk.static.links = {} +Plugin.sdk.static.libsuffix = "{{plugin_type}}" +Plugin.sdk.static.libdirs = {} +Plugin.sdk.static.defines = {} +Plugin.sdk.static.custom = function() + filter "system:Windows" + systemversion "10.0.19041.0" +end + +Plugin.sdk.shared.includedirs = {} +Plugin.sdk.shared.files = +{ + "{{name}}{{plugin_type}}Shared.cpp", + "{{name}}{{plugin_type}}Factory.h", +} +Plugin.sdk.shared.excludes = {} +Plugin.sdk.shared.links = {} +Plugin.sdk.shared.libdirs = {} +Plugin.sdk.shared.defines = {} +Plugin.sdk.shared.custom = function() + filter "system:Windows" + systemversion "10.0.19041.0" +end + +Plugin.authoring.includedirs = +{ + "../Includes", + path.join(_AK_SDK_ROOT, "samples/Common/") +} +Plugin.authoring.files = +{ + "**.cpp", + "**.h", + "**.hpp", + "**.c", + "{{name}}.def", + "{{name}}.xml", + "{{name}}.rc", +} +Plugin.authoring.excludes = {} +Plugin.authoring.links = {} +Plugin.authoring.libdirs = {} +Plugin.authoring.defines = {} +Plugin.authoring.custom = function() + filter "system:Windows" + systemversion "10.0.19041.0" +end + +return Plugin diff --git a/hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}.cpp b/hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}.cpp new file mode 100644 index 00000000..61841232 --- /dev/null +++ b/hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}.cpp @@ -0,0 +1,296 @@ +{%- set register_send_hook = out_params|length > 0 or out_events|length > 0 -%} +{{copyright}} + +#include "{{name}}{{plugin_type}}.h" +#include "{{name}}{{plugin_type}}Params.h" +#include "../{{name}}Config.h" + +#include "Heavy/Heavy_{{name}}.hpp" + +#include +#include + +namespace {{name}}_Private +{ + typedef struct WavHeader + { + uint32_t ChunkID; // 0 + uint32_t ChunkSize; // 4 + uint32_t Format; // 8 + uint32_t Subchunk1ID; // 12 + uint32_t Subchunk1Size; // 16 + uint16_t AudioFormat; // 20 + uint16_t NumChannels; // 22 + uint32_t SampleRate; // 24 + uint32_t ByteRate; // 28 + uint16_t BlockAlign; // 32 + uint16_t BitsPerSample; // 34 + uint32_t Subchunk2ID; // 36 + uint32_t Subchunk2Size; // 40 + uint32_t Subchunk2Data; // 44 + uint32_t Subchunk3ID; // 48 + uint32_t Subchunk3Size; // 52 + // data -> 56 + } WavHeader; + + void LoadPluginMediaToHeavyTable(AK::IAkPluginContextBase* in_pWwiseCtx, HeavyContextInterface* in_pHeavyCtx, + uint32_t in_uMediaIndex, uint32_t in_uTableHash, uint32_t in_uTableSizeReceiverHash) + { + AkUInt8* pPluginData = NULL; + AkUInt32 uPluginDataSize; + in_pWwiseCtx->GetPluginMedia(in_uMediaIndex, pPluginData, uPluginDataSize); // retrieve stored plugin data + + if (pPluginData != NULL) + { + // determine wav header format + WavHeader h; + hv_memcpy(&h, pPluginData, sizeof(WavHeader)); + uint32_t offsetBytes = 0; + const uint32_t dataID = 0x61746164; // 'data' + const uint32_t factID = 0x74636166; // 'fact' + if (h.Subchunk2ID == dataID) { + offsetBytes = 44; + } + else if (h.Subchunk2ID == factID && h.Subchunk3ID == dataID) { + offsetBytes = 56; + } + + uint32_t newSizeBytes = uPluginDataSize - offsetBytes; + if (offsetBytes > 0 && newSizeBytes > 0) + { + // adjust table size + const uint32_t numSamples = newSizeBytes * 8 / h.BitsPerSample; + in_pHeavyCtx->setLengthForTable(in_uTableHash, numSamples); + + float* buffer = in_pHeavyCtx->getBufferForTable(in_uTableHash); + if (buffer != NULL && newSizeBytes > 0) { + // copy contents and notify respective receiver + hv_memcpy(buffer, (float*)(pPluginData + offsetBytes), newSizeBytes); + in_pHeavyCtx->sendFloatToReceiver(in_uTableSizeReceiverHash, (float)numSamples); + } + } + } + } + + static void SetOutRTPC(AK::IAkPluginContextBase* in_pCtx, const char* in_szRtpcName, const uint32_t& in_uNameLen, const float& in_fValue) + { + AK::FNVHash32 HashFunc; + const uint32_t RtpcID = HashFunc.Compute(in_szRtpcName, sizeof(char) * in_uNameLen); + const AkGameObjectID ObjectID = in_pCtx->GetGameObjectInfo()->GetGameObjectID(); + in_pCtx->GlobalContext()->SetRTPCValue(RtpcID, in_fValue, ObjectID, 0, AkCurveInterpolation_Linear, false); + } + +{% if out_events|length > 0 %} + static void PostOutEvent({{name}}{{plugin_type}}* in_pPlugin, const char* in_szEventName, const uint32_t& in_uNameLen) + { + AK::FNVHash32 HashFunc; + const uint32_t EventID = HashFunc.Compute(in_szEventName, sizeof(char) * in_uNameLen); + in_pPlugin->m_EventQueue.Enqueue(EventID); + } +{% endif %} + + static void OnHeavyPrint(HeavyContextInterface* in_pHeavyCtx, const char* in_szPrintName, const char* in_szMessage, const HvMessage* in_pHvMessage) + { + auto* pPlugin = reinterpret_cast<{{name}}{{plugin_type}}*>(in_pHeavyCtx->getUserData()); + pPlugin->m_pWwiseCtx->PostMonitorMessage(in_szMessage, AK::Monitor::ErrorLevel::ErrorLevel_Message); + } +{% if register_send_hook %} + static void OnSendMessageCallback(HeavyContextInterface *in_pHeavyCtx, const char *in_szSendName, uint32_t in_uSendHash, const HvMessage *in_pHvMessage) + { + auto* pPlugin = reinterpret_cast<{{name}}{{plugin_type}}*>(in_pHeavyCtx->getUserData()); + if (pPlugin != nullptr && hv_msg_isFloat(in_pHvMessage, 0)) + { + switch (in_uSendHash) + { + {%- for k, v in out_params %} + case {{v.hash}}: SetOutRTPC(pPlugin->m_pWwiseCtx, "{{k|lower}}", {{k|length}}, hv_msg_getFloat(in_pHvMessage, 0)); break; + {%- endfor %} + {%- for k, v in out_events %} + case {{v.hash}}: PostOutEvent(pPlugin, "{{k|lower}}", {{k|length}}); break; + {%- endfor %} + default: return; + } + } + } +{%- endif %} +{% if out_events|length > 0 %} + static void OnGlobalCallback(AK::IAkGlobalPluginContext* in_pContext, AkGlobalCallbackLocation in_eLocation, void* in_pCookie) + { + if (in_eLocation != AkGlobalCallbackLocation_BeginRender) + return; + auto* pPlugin = reinterpret_cast<{{name}}{{plugin_type}}*>(in_pCookie); + if (!pPlugin) + return; + + const AkGameObjectID GameObjectID = pPlugin->m_pWwiseCtx->GetGameObjectInfo()->GetGameObjectID(); + uint32_t uEventID = 0; + while (pPlugin->m_EventQueue.Dequeue(uEventID)) + { + in_pContext->PostEventSync(uEventID, GameObjectID); + } + } +{%- endif %} +} + +AK::IAkPlugin* Create{{name}}{{plugin_type}}(AK::IAkPluginMemAlloc* in_pAllocator) +{ + return AK_PLUGIN_NEW(in_pAllocator, {{name}}{{plugin_type}}()); +} + +AK::IAkPluginParam* Create{{name}}{{plugin_type}}Params(AK::IAkPluginMemAlloc* in_pAllocator) +{ + return AK_PLUGIN_NEW(in_pAllocator, {{name}}{{plugin_type}}Params()); +} + +AK_IMPLEMENT_PLUGIN_FACTORY({{name}}{{plugin_type}}, {{"AkPluginTypeSource" if is_source else "AkPluginTypeEffect"}}, {{name}}Config::CompanyID, {{name}}Config::PluginID) + +{{name}}{{plugin_type}}::{{name}}{{plugin_type}}() + : m_pWwiseCtx(nullptr) + , m_pHeavyCtx(nullptr) + , m_pParams(nullptr) + , m_uSampleRate(0) +{ +} + +AKRESULT {{name}}{{plugin_type}}::Init(AK::IAkPluginMemAlloc* in_pAllocator, ContextType* in_pContext, AK::IAkPluginParam* in_pParams, AkAudioFormat& in_rFormat) +{ + using namespace {{name}}_Private; + + m_pParams = ({{name}}{{plugin_type}}Params*)in_pParams; + m_pWwiseCtx = in_pContext; + m_uSampleRate = in_rFormat.uSampleRate; + + // Initialise Heavy context + m_pHeavyCtx = AK_PLUGIN_NEW(in_pAllocator, Heavy_{{name}}((double) m_uSampleRate, {{pool_sizes_kb.internal}}, {{pool_sizes_kb.inputQueue}}, {{pool_sizes_kb.outputQueue}})); + m_pHeavyCtx->setUserData(this); +{%- if register_send_hook %} + m_pHeavyCtx->setSendHook(&OnSendMessageCallback); +{% endif %} +#ifndef AK_OPTIMIZED + m_pHeavyCtx->setPrintHook(&OnHeavyPrint); +#endif +{% if is_source %} + // Notify pipeline of chosen output format change. + in_rFormat.channelConfig.SetStandard({{channel_config}}); + {% if num_output_channels > 0 %} + if (in_rFormat.GetNumChannels() != hv_getNumOutputChannels(m_pHeavyCtx)) + { + return AK_UnsupportedChannelConfig; + } + {% endif %} +{% else %} + {% if num_output_channels > 2 %} + // Multi-channel plugins have string channel configuration requirementkk + if (in_rFormat.channelConfig.uChannelMask != {{channel_config}}) + { + m_pWwiseCtx->PostMonitorMessage("{{name}} only supports the following channel configuration {{channel_config}}", AK::Monitor::ErrorLevel_Error); + return AK_UnsupportedChannelConfig; + } + {% else %} + if (in_rFormat.GetNumChannels() > 2) + { + m_pWwiseCtx->PostMonitorMessage("{{name}} only supports one and two channel bus configurations", AK::Monitor::ErrorLevel_Error); + return AK_UnsupportedChannelConfig; + } + {% endif %} +{% endif %} +{%- for k, v in parameters %} + hv_sendFloatToReceiver(m_pHeavyCtx, Heavy_{{name}}::Parameter::In::{{k|upper}}, m_pParams->RTPC.{{k}}); +{%- endfor %} +{% if out_events|length > 0 %} + m_EventQueue.Init(4); + m_pWwiseCtx->GlobalContext()->RegisterGlobalCallback( + {{"AkPluginTypeSource" if is_source else "AkPluginTypeEffect"}}, + {{name}}Config::CompanyID, + {{name}}Config::PluginID, + &OnGlobalCallback, + AkGlobalCallbackLocation_BeginRender, + this); +{%- endif %} +{% if tables|length > 0 %} + // Initialise tables with media + {%- for k, v in tables %} + LoadPluginMediaToHeavyTable(m_pWwiseCtx, m_pHeavyCtx, {{loop.index-1}}, {{v.hash}}, hv_stringToHash("setTableSize-{{v.display}}")); // table '{{v.display}}' + {%- endfor %} +{% endif %} + AK_PERF_RECORDING_RESET(); + + return AK_Success; +} + +AKRESULT {{name}}{{plugin_type}}::Term(AK::IAkPluginMemAlloc* in_pAllocator) +{ + using namespace {{name}}_Private; +{% if out_events|length > 0 %} + uint32_t EventID = 0; + while (m_EventQueue.Dequeue(EventID)) + { + // the queue must be empty before termination + } + m_EventQueue.Term(); + m_pWwiseCtx->GlobalContext()->UnregisterGlobalCallback(OnGlobalCallback, AkGlobalCallbackLocation_BeginRender); +{% endif %} + AK_PLUGIN_DELETE(in_pAllocator, m_pHeavyCtx); + AK_PLUGIN_DELETE(in_pAllocator, this); + return AK_Success; +} + +AKRESULT {{name}}{{plugin_type}}::Reset() +{ + return AK_Success; +} + +AKRESULT {{name}}{{plugin_type}}::GetPluginInfo(AkPluginInfo& out_rPluginInfo) +{ + out_rPluginInfo.eType = {{"AkPluginTypeSource" if is_source else "AkPluginTypeEffect"}}; + out_rPluginInfo.bIsInPlace = true; + out_rPluginInfo.bCanProcessObjects = false; + out_rPluginInfo.uBuildVersion = AK_WWISESDK_VERSION_COMBINED; + return AK_Success; +} + +void {{name}}{{plugin_type}}::Execute(AkAudioBuffer* io_pBuffer) +{ + AK_PERF_RECORDING_START("{{name}}{{plugin_type}}", 25, 30); + + // Retrieve RTPC values and send in as a message to context +{%- for k, v in parameters %} + if (m_pParams->m_paramChangeHandler.HasChanged({{loop.index-1}})) + { + hv_sendFloatToReceiver(m_pHeavyCtx, Heavy_{{name}}::Parameter::In::{{k|upper}}, m_pParams->RTPC.{{k}}); + m_pParams->m_paramChangeHandler.ResetParamChange({{loop.index-1}}); + } +{%- endfor %} +{% if not is_source %} + // zero-pad the rest of the buffer in case the numFrames is not a multiple of 4 + io_pBuffer->ZeroPadToMaxFrames(); +{%- endif %} + + // Calculate num frames to process and retrieve buffer + AkUInt16 numFramesToProcess = io_pBuffer->MaxFrames(); + float *pBuffer = (float *) io_pBuffer->GetChannel(0); +{% if is_source %} + m_pHeavyCtx->processInline(nullptr, pBuffer, numFramesToProcess); + io_pBuffer->eState = AK_DataReady; +{% else %} + // Check for channel configuration mismatch + if (io_pBuffer->NumChannels() == 1 && + ((m_pHeavyCtx->getNumInputChannels() == 2) || (m_pHeavyCtx->getNumOutputChannels() == 2))) + { + float *pTempBuffer[2] = { pBuffer, pBuffer }; + m_pHeavyCtx->process(pTempBuffer, pTempBuffer, numFramesToProcess); + } + else + { + m_pHeavyCtx->processInline(pBuffer, pBuffer, numFramesToProcess); + } +{% endif %} +{% if num_output_channels > 0 %} + io_pBuffer->uValidFrames = numFramesToProcess; +{% else %} + // Edge case - a control-only plugin was built, outputting silence + io_pBuffer->ZeroPadToMaxFrames(); +{% endif %} + AK_PERF_RECORDING_STOP("{{name}}{{plugin_type}}", 25, 30); +} + diff --git a/hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}.h b/hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}.h new file mode 100644 index 00000000..91b5003e --- /dev/null +++ b/hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}.h @@ -0,0 +1,65 @@ +{{copyright}} + +#ifndef {{name}}{{plugin_type}}_H +#define {{name}}{{plugin_type}}_H + +#include +{%- if out_events|length > 0 %} +#include +{%- endif %} + + +class HeavyContextInterface; +struct {{name}}{{plugin_type}}Params; + +class {{name}}{{plugin_type}} + : public {{"AK::IAkSourcePlugin" if is_source else "AK::IAkInPlaceEffectPlugin"}} +{ +public: + using ContextType = {{"AK::IAkSourcePluginContext" if is_source else "AK::IAkEffectPluginContext"}}; + +{% if out_events|length > 0 %} + // Note(ech): AkFifoQueue requires an allocator from AkMemoryMgr at compile time which we don't link against + // We need a queue implementation that can inject AK::IAkPluginMemAlloc at runtime to avoid using default OS allocator + struct SysAlloc + { + static AkForceInline void* Alloc(size_t in_uSize) + { + return malloc(in_uSize); + } + + static AkForceInline void Free(void* in_pAddress) + { + free(in_pAddress); + } + }; +{%- endif %} + + {{name}}{{plugin_type}}(); + ~{{name}}{{plugin_type}}() = default; + + AKRESULT Init(AK::IAkPluginMemAlloc* in_pAllocator, ContextType* in_pContext, AK::IAkPluginParam* in_pParams, AkAudioFormat& in_rFormat) override; + AKRESULT Term(AK::IAkPluginMemAlloc* in_pAllocator) override; + AKRESULT Reset() override; + AKRESULT GetPluginInfo(AkPluginInfo& out_rPluginInfo) override; + void Execute(AkAudioBuffer* io_pBuffer) override; +{%- if is_source %} + virtual AkReal32 GetDuration() const override { return 0.f; } + virtual AkReal32 GetEnvelope() const override { return 1.f; } + virtual AKRESULT StopLooping() override { return AK_Success; } +{%- else %} + AKRESULT TimeSkip(AkUInt32 in_uFrames) override { return AK_Success; } +{%- endif %} + +{% if out_events|length > 0 %} + // Holds event IDs until global callback + AkFifoQueue m_EventQueue; +{%- endif %} + + AK::IAkPluginContextBase* m_pWwiseCtx; + HeavyContextInterface *m_pHeavyCtx; // Main Heavy patch context + {{name}}{{plugin_type}}Params* m_pParams; + uint32_t m_uSampleRate; +}; + +#endif // {{name}}{{plugin_type}}_H diff --git a/hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}Factory.h b/hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}Factory.h new file mode 100644 index 00000000..881bb4da --- /dev/null +++ b/hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}Factory.h @@ -0,0 +1,8 @@ +{{copyright}} + +#ifndef {{name}}{{plugin_type}}Factory_H +#define {{name}}{{plugin_type}}Factory_H + +AK_STATIC_LINK_PLUGIN({{name}}{{plugin_type}}) + +#endif // {{name}}{{plugin_type}}Factory_H diff --git a/hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}Params.cpp b/hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}Params.cpp new file mode 100644 index 00000000..494fa566 --- /dev/null +++ b/hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}Params.cpp @@ -0,0 +1,82 @@ +{{copyright}} + +#include "{{name}}{{plugin_type}}Params.h" + +#include + +{{name}}{{plugin_type}}Params::{{name}}{{plugin_type}}Params(const {{name}}{{plugin_type}}Params& in_rParams) +{ +{% if parameters|length > 0 %} + RTPC = in_rParams.RTPC; + m_paramChangeHandler.SetAllParamChanges(); +{% endif %} +} + +AK::IAkPluginParam* {{name}}{{plugin_type}}Params::Clone(AK::IAkPluginMemAlloc* in_pAllocator) +{ + return AK_PLUGIN_NEW(in_pAllocator, {{name}}{{plugin_type}}Params(*this)); +} + +AKRESULT {{name}}{{plugin_type}}Params::Init(AK::IAkPluginMemAlloc* in_pAllocator, const void* in_pParamsBlock, AkUInt32 in_ulBlockSize) +{ + if (in_ulBlockSize == 0) + { +{%- for k, v in parameters %} + RTPC.{{k}} = {{v.attributes.default}}; +{%- endfor %} +{% if parameters|length > 0 %} + m_paramChangeHandler.SetAllParamChanges(); +{% endif %} + return AK_Success; + } + + return SetParamsBlock(in_pParamsBlock, in_ulBlockSize); +} + +AKRESULT {{name}}{{plugin_type}}Params::Term(AK::IAkPluginMemAlloc* in_pAllocator) +{ + AK_PLUGIN_DELETE(in_pAllocator, this); + return AK_Success; +} + +AKRESULT {{name}}{{plugin_type}}Params::SetParamsBlock(const void* in_pParamsBlock, AkUInt32 in_ulBlockSize) +{ + AKRESULT eResult = AK_Success; + AkUInt8* pParamsBlock = (AkUInt8*)in_pParamsBlock; + +{%- for k, v in parameters %} + RTPC.{{k}} = READBANKDATA(AkReal32, pParamsBlock, in_ulBlockSize); +{%- endfor %} + CHECKBANKDATASIZE(in_ulBlockSize, eResult); +{% if parameters|length > 0 %} + m_paramChangeHandler.SetAllParamChanges(); +{%- endif %} + + return eResult; +} + +AKRESULT {{name}}{{plugin_type}}Params::SetParam(AkPluginParamID in_paramID, const void* in_pValue, AkUInt32 in_ulParamSize) +{ + AKRESULT eResult = AK_Success; + +{% if parameters|length > 0 %} + switch (in_paramID) + { +{%- for k, v in parameters %} + case {{loop.index-1}}: + { + const float fNewValue = *((AkReal32*)in_pValue); + const bool bChanged = RTPC.{{k}} != fNewValue; + RTPC.{{k}} = fNewValue; + if (bChanged) + m_paramChangeHandler.SetParamChange({{loop.index-1}}); + } break; +{%- endfor %} + default: + eResult = AK_InvalidParameter; + break; + } +{% endif %} + + return eResult; +} diff --git a/hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}Params.h b/hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}Params.h new file mode 100644 index 00000000..ffe4a5cb --- /dev/null +++ b/hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}Params.h @@ -0,0 +1,38 @@ +{{copyright}} +{# force new line #} +#ifndef {{name}}{{plugin_type}}Params_H +#define {{name}}{{plugin_type}}Params_H + +#include +#include + +{% if parameters|length > 0 %} +struct {{name}}RTPCParams +{ + {%- for k, v in parameters %} + AkReal32 {{k}} = {{v.attributes.default}}; + {%- endfor %} +}; +{% endif %} + +struct {{name}}{{plugin_type}}Params + : public AK::IAkPluginParam +{ + {{name}}{{plugin_type}}Params() = default; + {{name}}{{plugin_type}}Params(const {{name}}{{plugin_type}}Params& in_rParams); + + ~{{name}}{{plugin_type}}Params() = default; + + IAkPluginParam* Clone(AK::IAkPluginMemAlloc* in_pAllocator) override; + AKRESULT Init(AK::IAkPluginMemAlloc* in_pAllocator, const void* in_pParamsBlock, AkUInt32 in_ulBlockSize) override; + AKRESULT Term(AK::IAkPluginMemAlloc* in_pAllocator) override; + AKRESULT SetParamsBlock(const void* in_pParamsBlock, AkUInt32 in_ulBlockSize) override; + AKRESULT SetParam(AkPluginParamID in_paramID, const void* in_pValue, AkUInt32 in_ulParamSize) override; + +{% if parameters|length > 0 %} + AK::AkFXParameterChangeHandler<{{parameters|length}}> m_paramChangeHandler; + {{name}}RTPCParams RTPC; +{% endif %} +}; + +#endif // {{name}}{{plugin_type}}Params_H diff --git a/hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}Shared.cpp b/hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}Shared.cpp new file mode 100644 index 00000000..fbdb6728 --- /dev/null +++ b/hvcc/generators/c2wwise/templates/SoundEnginePlugin/{{name}}{{plugin_type}}Shared.cpp @@ -0,0 +1,9 @@ +{{copyright}} + +#include +#include "{{name}}{{plugin_type}}Factory.h" + +#include + +DEFINEDUMMYASSERTHOOK; +DEFINE_PLUGIN_REGISTER_HOOK; diff --git a/hvcc/generators/c2wwise/templates/source/include/stdafx.h b/hvcc/generators/c2wwise/templates/WwisePlugin/Win32/stdafx.h similarity index 100% rename from hvcc/generators/c2wwise/templates/source/include/stdafx.h rename to hvcc/generators/c2wwise/templates/WwisePlugin/Win32/stdafx.h diff --git a/hvcc/generators/c2wwise/templates/WwisePlugin/Win32/{{name}}PluginGUI.cpp b/hvcc/generators/c2wwise/templates/WwisePlugin/Win32/{{name}}PluginGUI.cpp new file mode 100644 index 00000000..f7d44449 --- /dev/null +++ b/hvcc/generators/c2wwise/templates/WwisePlugin/Win32/{{name}}PluginGUI.cpp @@ -0,0 +1,191 @@ +{{copyright}} + +#include "{{name}}PluginGUI.h" +#include "../resource.h" +#include "stdafx.h" + +using namespace AK::Wwise::Plugin; + +namespace {{name}}_Private +{ + static bool SaveAudioFileToTableId(ObjectMedia& in_pObjectMedia, const uint32_t& in_uTableId) + { + AFX_MANAGE_STATE(AfxGetStaticModuleState()); + static TCHAR BASED_CODE szFilter[] = _T("Audio Files (*.wav)|*.wav|"); + CFileDialog Dialog(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter); + if (Dialog.DoModal() == IDOK) + { + const bool bOk = in_pObjectMedia.SetMediaSource(Dialog.GetPathName(), in_uTableId, true); + if (bOk) + { + in_pObjectMedia.InvalidateMediaSource(in_uTableId); + return true; + } + } + return false; + }; +} + +{{name}}PluginGUI::{{name}}PluginGUI() + : m_hwndPropView(nullptr) + , m_hwndObjPane(nullptr) + , m_uiBigDialogID(IDD_HV_{{name|upper}}_PLUGIN_BIG) + , m_uiSmallDialogID(IDD_HV_{{name|upper}}_PLUGIN_SMALL) +{%- if (parameters|length + sends|length + tables|length) > 10 %} + , m_iScrollPos(0) +{% endif -%} +{ +} + +bool {{name}}PluginGUI::GetDialog(eDialog in_eDialog, uint32_t& out_uiDialogID, PopulateTableItem*& out_pTable) const +{ + switch (in_eDialog) { + case SettingsDialog: + out_uiDialogID = m_uiBigDialogID; + out_pTable = nullptr; + return true; + case ContentsEditorDialog: + out_uiDialogID = m_uiSmallDialogID; + out_pTable = nullptr; + return true; + } + return false; +} + +bool {{name}}PluginGUI::WindowProc(eDialog in_eDialog, HWND in_hWnd, uint32_t in_message, WPARAM in_wParam, LPARAM in_lParam, LRESULT& out_lResult) +{ + using namespace {{name}}_Private; + + switch (in_message) { + case WM_INITDIALOG: { + if (in_eDialog == ContentsEditorDialog) { + m_hwndObjPane = in_hWnd; + } + else if (in_eDialog == SettingsDialog) { + m_hwndPropView = in_hWnd; + + {% if (parameters|length + sends|length + tables|length) > 10 -%} + RECT rect; + if (GetClientRect(in_hWnd, &rect)) { + // Create Scrollbar + CreateWindowEx(0, + L"SCROLLBAR", + (PTSTR) NULL, + WS_CHILD | WS_VISIBLE | SBS_VERT | SBS_RIGHTALIGN, + rect.left, + rect.top, + rect.right, + rect.bottom - GetSystemMetrics(SM_CYVTHUMB), // thumbwidth + in_hWnd, + (HMENU) NULL, + GetResourceHandle(), + (PVOID) NULL); + + SCROLLINFO si = {0}; + si.cbSize = sizeof(SCROLLINFO); + si.fMask = SIF_ALL; + si.nMin = 0; + si.nMax = 2500; + si.nPage = (rect.bottom - rect.top); + si.nPos = 0; + si.nTrackPos = 0; + SetScrollInfo(in_hWnd, SB_VERT, &si, true); + + m_iScrollPos = 0; + } + {%- endif %} + } + break; + } + + {% if (parameters|length + sends|length + tables|length) > 10 -%} + case WM_SIZE: { + break; + } + + case WM_VSCROLL: { + auto action = LOWORD(in_wParam); + HWND hScroll = (HWND) in_lParam; + int pos = -1; + if (action == SB_THUMBPOSITION || action == SB_THUMBTRACK) { + pos = HIWORD(in_wParam); + } + else if (action == SB_LINEDOWN) { + pos = m_iScrollPos + 30; + } + else if (action == SB_LINEUP) { + pos = m_iScrollPos - 30; + } + if (pos == -1) { + break; + } + + SCROLLINFO si = {0}; + si.cbSize = sizeof(SCROLLINFO); + si.fMask = SIF_POS; + si.nPos = pos; + si.nTrackPos = 0; + SetScrollInfo(in_hWnd, SB_VERT, &si, true); + GetScrollInfo(in_hWnd, SB_VERT, &si); + pos = si.nPos; + POINT pt; + pt.x = 0; + pt.y = pos - m_iScrollPos; + auto hdc = GetDC(in_hWnd); + LPtoDP(hdc, &pt, 1); + ReleaseDC(in_hWnd, hdc); + ScrollWindow(in_hWnd, 0, -pt.y, NULL, NULL); + m_iScrollPos = pos; + + break; + } + {%- endif %} + + case WM_DESTROY: { + if (in_eDialog == SettingsDialog) { + m_hwndPropView = nullptr; + } else if ( in_eDialog == ContentsEditorDialog ) { + m_hwndObjPane = nullptr; + } + break; + } + + // Catch window command actions (regardless if it is object pane or property + // view) to enable/disable controls + case WM_COMMAND: { + {%- if tables|length > 0 %} + // catch button clicks + switch (HIWORD(in_wParam)) { + case BN_CLICKED: { + switch (LOWORD(in_wParam)) { + {%- for k, v in tables %} + case IDC_BUTTON_HV_TABLE_{{k|upper}}: return SaveAudioFileToTableId(m_objectMedia, {{loop.index-1}}); // {{v.display}} + {%- endfor %} + default: break; + } + } + default: break; + } + {%- endif %} + break; + } + + case WM_ENABLE: { + // Enable/Disable all child controls + HWND hWnd = ::GetWindow(in_hWnd, GW_CHILD); + while(hWnd) { + ::EnableWindow(hWnd, in_wParam == TRUE); + hWnd = ::GetWindow(hWnd, GW_HWNDNEXT); + } + return true; + } + } + out_lResult = 0; + return false; +} + +ADD_AUDIOPLUGIN_CLASS_TO_CONTAINER( + {{name}}, + {{name}}PluginGUI, + {{name}}{{plugin_type}} +); diff --git a/hvcc/generators/c2wwise/templates/WwisePlugin/Win32/{{name}}PluginGUI.h b/hvcc/generators/c2wwise/templates/WwisePlugin/Win32/{{name}}PluginGUI.h new file mode 100644 index 00000000..9eba1c8a --- /dev/null +++ b/hvcc/generators/c2wwise/templates/WwisePlugin/Win32/{{name}}PluginGUI.h @@ -0,0 +1,29 @@ +{{copyright}} + +#pragma once + +#include "../{{name}}Plugin.h" + +class {{name}}PluginGUI final + : public AK::Wwise::Plugin::PluginMFCWindows<> + , public AK::Wwise::Plugin::GUIWindows + , public AK::Wwise::Plugin::RequestObjectMedia +{ +public: + {{name}}PluginGUI(); + + bool GetDialog(AK::Wwise::Plugin::eDialog in_eDialog, uint32_t& out_uiDialogID, + AK::Wwise::Plugin::PopulateTableItem*& out_pTable) const override; + bool WindowProc(AK::Wwise::Plugin::eDialog in_eDialog, HWND in_hWnd, uint32_t in_message, + WPARAM in_wParam, LPARAM in_lParam, LRESULT& out_lResult ) override; + + private: + HWND m_hwndPropView; + HWND m_hwndObjPane; + const uint32_t m_uiBigDialogID; + const uint32_t m_uiSmallDialogID; + + {% if (parameters|length + sends|length + tables|length) > 10 -%} + int32_t m_iScrollPos; + {% endif -%} +}; diff --git a/hvcc/generators/c2wwise/templates/source/libnyquist/AudioDecoder.cpp b/hvcc/generators/c2wwise/templates/WwisePlugin/libnyquist/AudioDecoder.cpp similarity index 100% rename from hvcc/generators/c2wwise/templates/source/libnyquist/AudioDecoder.cpp rename to hvcc/generators/c2wwise/templates/WwisePlugin/libnyquist/AudioDecoder.cpp diff --git a/hvcc/generators/c2wwise/templates/source/libnyquist/Common.cpp b/hvcc/generators/c2wwise/templates/WwisePlugin/libnyquist/Common.cpp similarity index 100% rename from hvcc/generators/c2wwise/templates/source/libnyquist/Common.cpp rename to hvcc/generators/c2wwise/templates/WwisePlugin/libnyquist/Common.cpp diff --git a/hvcc/generators/c2wwise/templates/source/libnyquist/RiffUtils.cpp b/hvcc/generators/c2wwise/templates/WwisePlugin/libnyquist/RiffUtils.cpp similarity index 100% rename from hvcc/generators/c2wwise/templates/source/libnyquist/RiffUtils.cpp rename to hvcc/generators/c2wwise/templates/WwisePlugin/libnyquist/RiffUtils.cpp diff --git a/hvcc/generators/c2wwise/templates/source/libnyquist/WavDecoder.cpp b/hvcc/generators/c2wwise/templates/WwisePlugin/libnyquist/WavDecoder.cpp similarity index 100% rename from hvcc/generators/c2wwise/templates/source/libnyquist/WavDecoder.cpp rename to hvcc/generators/c2wwise/templates/WwisePlugin/libnyquist/WavDecoder.cpp diff --git a/hvcc/generators/c2wwise/templates/source/libnyquist/WavEncoder.cpp b/hvcc/generators/c2wwise/templates/WwisePlugin/libnyquist/WavEncoder.cpp similarity index 100% rename from hvcc/generators/c2wwise/templates/source/libnyquist/WavEncoder.cpp rename to hvcc/generators/c2wwise/templates/WwisePlugin/libnyquist/WavEncoder.cpp diff --git a/hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseResource.h b/hvcc/generators/c2wwise/templates/WwisePlugin/resource.h similarity index 100% rename from hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseResource.h rename to hvcc/generators/c2wwise/templates/WwisePlugin/resource.h diff --git a/hvcc/generators/c2wwise/templates/WwisePlugin/{{name}}.def b/hvcc/generators/c2wwise/templates/WwisePlugin/{{name}}.def new file mode 100644 index 00000000..7f668134 --- /dev/null +++ b/hvcc/generators/c2wwise/templates/WwisePlugin/{{name}}.def @@ -0,0 +1,3 @@ +LIBRARY "" + +EXPORTS diff --git a/hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPlugin.rc b/hvcc/generators/c2wwise/templates/WwisePlugin/{{name}}.rc similarity index 94% rename from hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPlugin.rc rename to hvcc/generators/c2wwise/templates/WwisePlugin/{{name}}.rc index d9d06b47..ec18980a 100644 --- a/hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPlugin.rc +++ b/hvcc/generators/c2wwise/templates/WwisePlugin/{{name}}.rc @@ -1,6 +1,6 @@ // Microsoft Visual C++ generated resource script. // -#include "Hv_{{name}}_WwiseResource.h" +#include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// @@ -52,7 +52,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN 1 TEXTINCLUDE BEGIN - "Hv_{{name}}_WwiseResource.h\0" + "resource.h\0" END 2 TEXTINCLUDE @@ -64,8 +64,8 @@ END 3 TEXTINCLUDE BEGIN "#define AK_WWISESDK_SAMPLE_FILEDESC ""{{name}} Wwise plug-in generated by Heavy""\r\n" - "#define AK_WWISESDK_SAMPLE_INTERNALNAME ""Hv_{{name}}.dll""\r\n" - "#define AK_WWISESDK_SAMPLE_ORIGINALFILE ""Hv_{{name}}.dll""\r\n" + "#define AK_WWISESDK_SAMPLE_INTERNALNAME ""{{name}}.dll""\r\n" + "#define AK_WWISESDK_SAMPLE_ORIGINALFILE ""{{name}}.dll""\r\n" "#include ""AkWwiseSDKVersion.rc""\r\n" "#define _AFX_NO_SPLITTER_RESOURCES\r\n" "#define _AFX_NO_OLE_RESOURCES\r\n" @@ -170,8 +170,8 @@ END // Generated from the TEXTINCLUDE 3 resource. // #define AK_WWISESDK_SAMPLE_FILEDESC "{{name}} Wwise plug-in generated by Heavy" -#define AK_WWISESDK_SAMPLE_INTERNALNAME "Hv_{{name}}.dll" -#define AK_WWISESDK_SAMPLE_ORIGINALFILE "Hv_{{name}}.dll" +#define AK_WWISESDK_SAMPLE_INTERNALNAME "{{name}}.dll" +#define AK_WWISESDK_SAMPLE_ORIGINALFILE "{{name}}.dll" #include "AkWwiseSDKVersion.rc" #define _AFX_NO_SPLITTER_RESOURCES #define _AFX_NO_OLE_RESOURCES diff --git a/hvcc/generators/c2wwise/templates/resources/Hv_{{name}}_Wwise{{type}}AuthPlugin.xml b/hvcc/generators/c2wwise/templates/WwisePlugin/{{name}}.xml similarity index 97% rename from hvcc/generators/c2wwise/templates/resources/Hv_{{name}}_Wwise{{type}}AuthPlugin.xml rename to hvcc/generators/c2wwise/templates/WwisePlugin/{{name}}.xml index 325813e5..2172bb96 100644 --- a/hvcc/generators/c2wwise/templates/resources/Hv_{{name}}_Wwise{{type}}AuthPlugin.xml +++ b/hvcc/generators/c2wwise/templates/WwisePlugin/{{name}}.xml @@ -2,7 +2,7 @@ {{copyright}} {%- if plugin_type == "Source" %} - + {% if tables|length > 0 -%} @@ -59,7 +59,7 @@ {%- endif %} {%- elif plugin_type == "FX" %} - + diff --git a/hvcc/generators/c2wwise/templates/WwisePlugin/{{name}}Plugin.cpp b/hvcc/generators/c2wwise/templates/WwisePlugin/{{name}}Plugin.cpp new file mode 100644 index 00000000..1b64f4ce --- /dev/null +++ b/hvcc/generators/c2wwise/templates/WwisePlugin/{{name}}Plugin.cpp @@ -0,0 +1,89 @@ +{{copyright}} + +#include "{{name}}Plugin.h" +#include "../SoundEnginePlugin/{{name}}{{plugin_type}}Factory.h" + +#include "libnyquist/WavDecoder.h" +#include "libnyquist/WavEncoder.h" + +#include +#include +#include +#include + +bool {{name}}Plugin::GetBankParameters(const GUID & in_guidPlatform, AK::Wwise::Plugin::DataWriter& in_dataWriter) const +{ + {%- for k, v in parameters %} + in_dataWriter.WriteReal32(m_propertySet.GetReal32(in_guidPlatform, "{{k}}")); + {%- endfor %} + + return true; +} + +void {{name}}Plugin::NotifyPluginMediaChanged() +{ + m_host.NotifyInternalDataChanged(AK::IAkPluginParam::ALL_PLUGIN_DATA_ID, true); +} + +AK::Wwise::Plugin::ConversionResult {{name}}Plugin::ConvertFile( + const GUID& in_guidPlatform, + const BasePlatformID& in_basePlatform, + const AkOSChar* in_szSourceFile, + const AkOSChar* in_szDestFile, + AkUInt32 in_uSampleRate, + AkUInt32 in_uBlockLength, + AK::Wwise::Plugin::IProgress* in_pProgress, + AK::Wwise::Plugin::IWriteString* io_pError) const +{ + if (wcslen(in_szSourceFile) > 0) + { + // convert input file to 32bit floating point wav + nqr::NyquistIO loader; + std::shared_ptr fileData = std::make_shared(); + std::string inPath = std::wstring_convert>().to_bytes(in_szSourceFile); + loader.Load(fileData.get(), inPath); + + std::string outPath = std::wstring_convert>().to_bytes(in_szDestFile); + nqr::WavEncoder::WriteFile({ 1, nqr::PCM_FLT, nqr::DITHER_NONE }, fileData.get(), outPath); + } + else + { + // Note(joe): because we create dummy media sources for the patch tables the input file here doesn't exist + // but we still need to create a dummy output file to avoid errors + std::ofstream outFile(in_szDestFile); + outFile.close(); + } + return AK::Wwise::Plugin::ConversionSuccess; +} + +uint32_t {{name}}Plugin::GetCurrentConversionSettingsHash( + const GUID& in_guidPlatform, + AkUInt32 in_uSampleRate, + AkUInt32 in_uBlockLength) const +{ + const auto numMedia = m_objectMedia.GetMediaSourceCount(); + uint32_t hash = in_uSampleRate ^ in_uBlockLength; + AK::FNVHash32 hashFunc; + AkOSChar szMediaFileName[_MAX_PATH]; + + for (int32_t mediaIdx = 0; mediaIdx < numMedia; ++mediaIdx) + { + const uint32_t fileNameSize = m_objectMedia.GetMediaSourceFileName(szMediaFileName, _MAX_PATH, mediaIdx); + if (fileNameSize > 0) + { + for (int i = 0; i < fileNameSize; ++i) + { + szMediaFileName[i] = tolower(szMediaFileName[i]); + } + hash = hash * 31 + static_cast(hashFunc.Compute(szMediaFileName, fileNameSize)); + } + } + + return hash; +} + +DEFINE_AUDIOPLUGIN_CONTAINER({{name}}); +EXPORT_AUDIOPLUGIN_CONTAINER({{name}}); +ADD_AUDIOPLUGIN_CLASS_TO_CONTAINER({{name}}, {{name}}Plugin, {{name}}{{plugin_type}}); +DEFINE_PLUGIN_REGISTER_HOOK +DEFINEDUMMYASSERTHOOK; diff --git a/hvcc/generators/c2wwise/templates/WwisePlugin/{{name}}Plugin.h b/hvcc/generators/c2wwise/templates/WwisePlugin/{{name}}Plugin.h new file mode 100644 index 00000000..7abb17e6 --- /dev/null +++ b/hvcc/generators/c2wwise/templates/WwisePlugin/{{name}}Plugin.h @@ -0,0 +1,38 @@ +{{copyright}} + +#pragma once + +#include + +class {{name}}Plugin final + : public AK::Wwise::Plugin::AudioPlugin + , public AK::Wwise::Plugin::RequestHost + , public AK::Wwise::Plugin::RequestObjectMedia + , public AK::Wwise::Plugin::MediaConverter +{ +public: + {{name}}Plugin() = default; + ~{{name}}Plugin() = default; + + bool GetBankParameters(const GUID & in_guidPlatform, AK::Wwise::Plugin::DataWriter& in_dataWriter) const override; + void NotifyPluginMediaChanged() override; + + AK::Wwise::Plugin::ConversionResult ConvertFile( + const GUID& in_guidPlatform, + const BasePlatformID& in_basePlatform, + const AkOSChar* in_szSourceFile, + const AkOSChar* in_szDestFile, + AkUInt32 in_uSampleRate, + AkUInt32 in_uBlockLength, + AK::Wwise::Plugin::IProgress* in_pProgress, + AK::Wwise::Plugin::IWriteString* io_pError + ) const override; + + uint32_t GetCurrentConversionSettingsHash( + const GUID& in_guidPlatform, + AkUInt32 in_uSampleRate = 0, + AkUInt32 in_uBlockLength = 0 + ) const override; +}; + +DECLARE_AUDIOPLUGIN_CONTAINER({{name}}); // Exposes our PluginContainer structure that contains the info for our plugin diff --git a/hvcc/generators/c2wwise/templates/bundle_template.json b/hvcc/generators/c2wwise/templates/bundle_template.json new file mode 100644 index 00000000..5096fcb9 --- /dev/null +++ b/hvcc/generators/c2wwise/templates/bundle_template.json @@ -0,0 +1,25 @@ +{ + "id": "Heavy.{{name}}.${year}_${major}_${minor}_${build}", + "name": "{{name}}", + "tag": "{{name}}", + "description": "", + "vendor": "Heavy", + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=", + "type": "plugin", + "productDependentData": { + "targetWwiseVersion": { + "year": ${year}, + "major": ${major} + } + }, + "version": { + "year": ${year}, + "major": ${major}, + "minor": ${minor}, + "build": ${build} + }, + "eulas": [], + "labels": [], + "links": [], + "documentation": [] +} diff --git a/hvcc/generators/c2wwise/templates/linux/Makefile b/hvcc/generators/c2wwise/templates/linux/Makefile deleted file mode 100644 index 72913fc9..00000000 --- a/hvcc/generators/c2wwise/templates/linux/Makefile +++ /dev/null @@ -1,52 +0,0 @@ -CC = clang -CXX = clang++ -MKDIR = mkdir -p -SRC_DIR = ../source -WWISE_SDK_DIR = ../sdks/wwise_{{wwise_version}}/SDK/include/ -PATCH_NAME = {{name}} -OUT_DIR = ../build/linux/x64/release -BASEFLAGS = -I$(WWISE_SDK_DIR) -I$(SRC_DIR) -I$(SRC_DIR)/include -I$(SRC_DIR)/heavy -DNDEBUG -msse4.1 -O3 -ffast-math -fPIC -Werror -Wno-unused-function -Wno-\#warnings -CFLAGS = $(BASEFLAGS) -std=c11 -CXXFLAGS = $(BASEFLAGS) -std=c++11 -fno-exceptions -fno-rtti - -HEADERS = $(wildcard $(SRC_DIR)/include/*.h) -HEADERS += $(wildcard $(SRC_DIR)/heavy/*.h) -HEADERS += $(wildcard $(SRC_DIR)/engine/*.h) - -CFILES = $(wildcard $(SRC_DIR)/heavy/*.c) -OBJC = $(CFILES:%.c=%.o) - -CXXFILES = $(wildcard $(SRC_DIR)/engine/*.cpp) -CXXFILES += $(wildcard $(SRC_DIR)/heavy/*.cpp) -OBJCXX = $(CXXFILES:%.cpp=%.o) - -RUNTIME_CXXFILES = $(CXXFILES) -RUNTIME_CXXFILES += $(wildcard $(SRC_DIR)/runtime/*.cpp) -RUNTIME_OBJCXX = $(RUNTIME_CXXFILES:%.cpp=%.o) - -%.o: %.c $(HEADERS) - $(CC) -c -o $@ $< $(CFLAGS) - -%.o: %.cpp $(HEADERS) - $(CXX) -c -o $@ $< $(CXXFLAGS) - -all: directories engine runtime - -directories: $(OUT_DIR) - -$(OUT_DIR): - $(MKDIR) $(OUT_DIR) - -engine: $(OBJC) $(OBJCXX) - ar -cvq $(OUT_DIR)/libHv_$(PATCH_NAME)_Wwise{{plugin_type}}Engine.a $^ - cp $(SRC_DIR)/include/Hv_$(PATCH_NAME)_Wwise{{plugin_type}}PluginFactory.h $(OUT_DIR) - cp ../resources/Hv_$(PATCH_NAME)_Wwise{{plugin_type}}AuthPlugin.xml $(OUT_DIR) - -runtime: $(OBJC) $(RUNTIME_OBJCXX) - $(CXX) -o $(OUT_DIR)/Hv_$(PATCH_NAME)_Wwise{{plugin_type}}Plugin.so $^ $(CXXFLAGS) -shared - -.PHONY: clean - -clean: - rm -rf $(SRC_DIR)/**/*.o $(OUT_DIR)/*.* -{# force new line #} diff --git a/hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPlugin.cpp b/hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPlugin.cpp deleted file mode 100644 index 27a39216..00000000 --- a/hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPlugin.cpp +++ /dev/null @@ -1,300 +0,0 @@ -{{copyright}} - -#include -#include -#include -#include - -#include "stdafx.h" -#include -#include -#include -#include - -#include "Hv_{{name}}_WwiseAuthoringPlugin.h" -#include "Hv_{{name}}_WwiseResource.h" -#include "Hv_{{name}}_WwisePluginIDs.h" - -DEFINE_PLUGIN_REGISTER_HOOK - -/** Table of display name resources (one for each property). */ -struct DisplayNameInfo { - LPCWSTR wszPropName; - UINT uiDisplayName; -}; - -static DisplayNameInfo g_DisplayNames[] = { - {%- for k, v in parameters %} - { L"{{v.display}}", IDS_HV_PARAM_{{k|upper}} }, - {%- endfor %} - { NULL, NULL } -}; - -// These IDs must be the same as those specified in the plug-in's XML definition file. -// Note that there are restrictions on the values you can use for CompanyID, and PluginID -// must be unique for the specified CompanyID. Furthermore, these IDs are persisted -// in project files. NEVER CHANGE THEM or existing projects will not recognize this Plug-in. -// Be sure to read the SDK documentation regarding Plug-ins XML definition files. -const short Hv_{{name}}_WwiseAuthoringPlugin::CompanyID = HV_COMPANY_ID; -const short Hv_{{name}}_WwiseAuthoringPlugin::PluginID = HV_{{name|upper}}_PLUGIN_ID; - -Hv_{{name}}_WwiseAuthoringPlugin::Hv_{{name}}_WwiseAuthoringPlugin(AkUInt16 in_idPlugin) { - m_pObjectMedia = nullptr; - m_pPSet = nullptr; - m_hwndPropView = nullptr; - m_hwndObjPane = nullptr; - m_idDialogBig = IDD_HV_{{name|upper}}_PLUGIN_BIG; - m_idDialogSmall = IDD_HV_{{name|upper}}_PLUGIN_SMALL; -} - -void Hv_{{name}}_WwiseAuthoringPlugin::Destroy() { - delete this; -} - -AK::Wwise::IPluginMediaConverter* Hv_{{name}}_WwiseAuthoringPlugin::GetPluginMediaConverterInterface() { - return this; -} - -AK::Wwise::ConversionResult Hv_{{name}}_WwiseAuthoringPlugin::ConvertFile(const GUID & in_guidPlatform, - const BasePlatformID &in_basePlatform, LPCWSTR in_szSourceFile, LPCWSTR in_szDestFile, - AkUInt32 in_uSampleRate, AkUInt32 in_uBlockLength, AK::Wwise::IProgress* in_pProgress, - AK::Wwise::IWriteString* io_pError) { - - if (wcslen(in_szSourceFile) > 0) { - // convert input file to 32bit floating point wav - nqr::NyquistIO loader; - std::shared_ptr fileData = std::make_shared(); - std::string inPath = std::wstring_convert>().to_bytes(in_szSourceFile); - loader.Load(fileData.get(), inPath); - - std::string outPath = std::wstring_convert>().to_bytes(in_szDestFile); - nqr::WavEncoder::WriteFile({ 1, nqr::PCM_FLT, nqr::DITHER_NONE }, fileData.get(), outPath); - } else { - // Note(joe): because we create dummy media sources for the patch tables the input file here doesn't exist - // but we still need to create a dummy output file to avoid errors - std::ofstream outfile(in_szDestFile); - outfile.close(); - } - return AK::Wwise::ConversionSuccess; -} - -ULONG Hv_{{name}}_WwiseAuthoringPlugin::GetCurrentConversionSettingsHash(const GUID & in_guidPlatform, - AkUInt32 in_uSampleRate, AkUInt32 in_uBlockLength) { - AK::FNVHash32 hashFunc; - - // Generate a Hash from effect parameters that have an influence on the conversion - // Take the source file name - CString szInputFileName; - m_pObjectMedia->GetMediaSourceFileName(szInputFileName.GetBuffer(_MAX_PATH), _MAX_PATH); - szInputFileName.ReleaseBuffer(); - szInputFileName.MakeLower(); - return hashFunc.Compute((unsigned char *) (LPCTSTR) szInputFileName, szInputFileName.GetLength()*sizeof(TCHAR)); -} - -void Hv_{{name}}_WwiseAuthoringPlugin::SetPluginPropertySet(AK::Wwise::IPluginPropertySet *in_pPSet) { - m_pPSet = in_pPSet; -} - -void Hv_{{name}}_WwiseAuthoringPlugin::InitToDefault() { - {% if tables|length > 0 -%} - // initialise plugin with dummy media files for each table on load - {%- for k, v in tables %} - m_pObjectMedia->SetMediaSource(nullptr, {{loop.index-1}}, false); // '{{v.display}}' - {%- endfor %} - {%- endif %} -} - -void Hv_{{name}}_WwiseAuthoringPlugin::SetPluginObjectMedia(AK::Wwise::IPluginObjectMedia *in_pObjectMedia) { - m_pObjectMedia = in_pObjectMedia; -} - -void Hv_{{name}}_WwiseAuthoringPlugin::NotifyPluginMediaChanged() { - m_pPSet->NotifyInternalDataChanged(AK::IAkPluginParam::ALL_PLUGIN_DATA_ID); -} - -HINSTANCE Hv_{{name}}_WwiseAuthoringPlugin::GetResourceHandle() const { - return AfxGetStaticModuleState()->m_hCurrentResourceHandle; -} - -bool Hv_{{name}}_WwiseAuthoringPlugin::GetDialog(eDialog in_eDialog, - UINT &out_uiDialogID, AK::Wwise::PopulateTableItem *&out_pTable) const { - // Determine what dialog just get called and set the property names to - // UI control binding populated table. - CComVariant varProp; - - switch (in_eDialog) { - case SettingsDialog: { - out_uiDialogID = m_idDialogBig; - out_pTable = nullptr; - return true; - } - case ContentsEditorDialog: { - out_uiDialogID = m_idDialogSmall; - out_pTable = nullptr; - return true; - } - default: return false; - } -} - -bool Hv_{{name}}_WwiseAuthoringPlugin::WindowProc(eDialog in_eDialog, - HWND in_hWnd, UINT in_message, WPARAM in_wParam, LPARAM in_lParam, - LRESULT &out_lResult) { - // Standard window function, user can intercept what ever message that is - // of interest to him to implement UI behavior. - switch (in_message) { - case WM_INITDIALOG: { - if (in_eDialog == ContentsEditorDialog) { - m_hwndObjPane = in_hWnd; - } - else if (in_eDialog == SettingsDialog) { - m_hwndPropView = in_hWnd; - - {% if (parameters|length + sends|length + tables|length) > 10 -%} - RECT rect; - if (GetClientRect(in_hWnd, &rect)) { - // Create Scrollbar - CreateWindowEx(0, - L"SCROLLBAR", - (PTSTR) NULL, - WS_CHILD | WS_VISIBLE | SBS_VERT | SBS_RIGHTALIGN, - rect.left, - rect.top, - rect.right, - rect.bottom - GetSystemMetrics(SM_CYVTHUMB), // thumbwidth - in_hWnd, - (HMENU) NULL, - GetResourceHandle(), - (PVOID) NULL); - - SCROLLINFO si = {0}; - si.cbSize = sizeof(SCROLLINFO); - si.fMask = SIF_ALL; - si.nMin = 0; - si.nMax = 2500; - si.nPage = (rect.bottom - rect.top); - si.nPos = 0; - si.nTrackPos = 0; - SetScrollInfo(in_hWnd, SB_VERT, &si, true); - - m_scrollPos = 0; - } - {%- endif %} - } - break; - } - - {% if (parameters|length + sends|length + tables|length) > 10 -%} - case WM_SIZE: { - break; - } - - case WM_VSCROLL: { - auto action = LOWORD(in_wParam); - HWND hScroll = (HWND) in_lParam; - int pos = -1; - if (action == SB_THUMBPOSITION || action == SB_THUMBTRACK) { - pos = HIWORD(in_wParam); - } - else if (action == SB_LINEDOWN) { - pos = m_scrollPos + 30; - } - else if (action == SB_LINEUP) { - pos = m_scrollPos - 30; - } - if (pos == -1) { - break; - } - - SCROLLINFO si = {0}; - si.cbSize = sizeof(SCROLLINFO); - si.fMask = SIF_POS; - si.nPos = pos; - si.nTrackPos = 0; - SetScrollInfo(in_hWnd, SB_VERT, &si, true); - GetScrollInfo(in_hWnd, SB_VERT, &si); - pos = si.nPos; - POINT pt; - pt.x = 0; - pt.y = pos - m_scrollPos; - auto hdc = GetDC(in_hWnd); - LPtoDP(hdc, &pt, 1); - ReleaseDC(in_hWnd, hdc); - ScrollWindow(in_hWnd, 0, -pt.y, NULL, NULL); - m_scrollPos = pos; - - break; - } - {%- endif %} - - case WM_DESTROY: { - if (in_eDialog == SettingsDialog) { - m_hwndPropView = nullptr; - } else if ( in_eDialog == ContentsEditorDialog ) { - m_hwndObjPane = nullptr; - } - break; - } - - // Catch window command actions (regardless if it is object pane or property - // view) to enable/disable controls - case WM_COMMAND: { - {%- if tables|length > 0 %} - // catch button clicks - switch (HIWORD(in_wParam)) { - case BN_CLICKED: { - switch (LOWORD(in_wParam)) { - {%- for k, v in tables %} - case IDC_BUTTON_HV_TABLE_{{k|upper}}: return SaveAudioFileToTableId({{loop.index-1}}); // {{v.display}} - {%- endfor %} - default: break; - } - } - default: break; - } - {%- endif %} - break; - } - - case WM_ENABLE: { - // Enable/Disable all child controls - HWND hWnd = ::GetWindow(in_hWnd, GW_CHILD); - while(hWnd) { - ::EnableWindow(hWnd, in_wParam == TRUE); - hWnd = ::GetWindow(hWnd, GW_HWNDNEXT); - } - return true; - } - } - out_lResult = 0; - return false; -} - -// Store current plugin settings into banks when asked to. -bool Hv_{{name}}_WwiseAuthoringPlugin::GetBankParameters(const GUID &in_guidPlatform, - AK::Wwise::IWriteData *in_pDataWriter) const { - CComVariant varProp; - - {%- for k, v in parameters %} - m_pPSet->GetValue(in_guidPlatform, szHv_{{name}}_Param_{{k}}, varProp); - in_pDataWriter->WriteReal32(varProp.fltVal); - {%- endfor %} - - return true; -} - -bool Hv_{{name}}_WwiseAuthoringPlugin::Help( - HWND in_hWnd, eDialog in_eDialog, LPCWSTR in_szLanguageCode) const { - return false; -}; - -bool Hv_{{name}}_WwiseAuthoringPlugin::SaveAudioFileToTableId(unsigned int tableId) { - static TCHAR BASED_CODE szFilter[] = _T("Audio Files (*.wav)|*.wav|"); - CFileDialog dialog(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter); - if (dialog.DoModal() == IDOK) { - m_pObjectMedia->SetMediaSource(dialog.GetPathName(), tableId, true); - return true; - } - return false; -}; -{# force new line #} diff --git a/hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPlugin.def b/hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPlugin.def deleted file mode 100644 index c619ce5e..00000000 --- a/hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPlugin.def +++ /dev/null @@ -1,6 +0,0 @@ -; Hv_{{name}}_Wwise{{plugin_type}}AuthPlugin.def : Declares the module parameters for the DLL. - -LIBRARY "Hv_{{name}}_Wwise{{plugin_type}}AuthPlugin" - -EXPORTS - AkCreatePlugin diff --git a/hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPlugin.h b/hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPlugin.h deleted file mode 100644 index fd42afa9..00000000 --- a/hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPlugin.h +++ /dev/null @@ -1,82 +0,0 @@ -{{copyright}} - -#ifndef _HV_{{name|upper}}_WWISE_PLUGIN_H_ -#define _HV_{{name|upper}}_WWISE_PLUGIN_H_ - -#include - -/** - * Plugin property names - * NOTE: These should be named the same as the respective Property Name value - * in the plugin xml definition - */ -{%- for k, v in parameters %} -static LPCWSTR szHv_{{name}}_Param_{{k}} = L"{{k}}"; -{%- endfor %} - -class Hv_{{name}}_WwiseAuthoringPlugin : public AK::Wwise::DefaultAudioPluginImplementation, - public AK::Wwise::IPluginMediaConverter { -public: - Hv_{{name}}_WwiseAuthoringPlugin(AkUInt16 in_idPlugin); - - ~Hv_{{name}}_WwiseAuthoringPlugin() {}; - - /** AK::Wwise::IPluginBase Overrides */ - virtual void Destroy(); // Implement the destruction of the Wwise source plugin. - - /** AK:WWise::IPluginMediaConverter Overrides */ - virtual AK::Wwise::IPluginMediaConverter* GetPluginMediaConverterInterface() override; - - virtual AK::Wwise::ConversionResult ConvertFile(const GUID &in_guidPlatform, const BasePlatformID &in_basePlatform, - LPCWSTR in_szSourceFile, LPCWSTR in_szDestFile, AkUInt32 in_uSampleRate, AkUInt32 in_uBlockLength, - AK::Wwise::IProgress *in_pProgress, AK::Wwise::IWriteString *io_pError) override; - - virtual ULONG GetCurrentConversionSettingsHash(const GUID & in_guidPlatform, - AkUInt32 in_uSampleRate, AkUInt32 in_uBlockLength) override; - - /** DefaultAudioPluginImplementation */ - virtual void InitToDefault() override; - - /** AK::Wwise::IAudioPlugin Overrides */ - virtual void SetPluginPropertySet(AK::Wwise::IPluginPropertySet * in_pPSet); - - virtual void SetPluginObjectMedia(AK::Wwise::IPluginObjectMedia *in_pObjectMedia) override; - - virtual void NotifyPluginMediaChanged() override; - - virtual void NotifyPropertyChanged(const GUID & in_guidPlatform, - LPCWSTR in_szPropertyName) {}; - - virtual HINSTANCE GetResourceHandle() const; - - virtual bool GetDialog(eDialog in_eDialog, UINT & out_uiDialogID, - AK::Wwise::PopulateTableItem *& out_pTable) const; - - virtual bool WindowProc(eDialog in_eDialog, HWND in_hWnd, UINT in_message, - WPARAM in_wParam, LPARAM in_lParam, LRESULT & out_lResult); - - virtual bool GetBankParameters(const GUID & in_guidPlatform, - AK::Wwise::IWriteData* in_pDataWriter) const; - - virtual bool Help(HWND in_hWnd, eDialog in_eDialog, - LPCWSTR in_szLanguageCode) const; - - static const short CompanyID; - static const short PluginID; - -private: - bool SaveAudioFileToTableId(unsigned int tableId); - - AK::Wwise::IPluginPropertySet *m_pPSet; - AK::Wwise::IPluginObjectMedia *m_pObjectMedia; - HWND m_hwndPropView; - HWND m_hwndObjPane; - AkUInt16 m_idDialogBig; - AkUInt16 m_idDialogSmall; - {% if (parameters|length + sends|length + tables|length) > 10 -%} - int m_scrollPos; - {% endif -%} -}; - -#endif // _HV_{{name|upper}}_WWISE_PLUGIN_H_ -{# force new line #} diff --git a/hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPluginApp.cpp b/hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPluginApp.cpp deleted file mode 100644 index aaff13da..00000000 --- a/hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPluginApp.cpp +++ /dev/null @@ -1,34 +0,0 @@ -{{copyright}} - -#include "stdafx.h" -#include -#include -#include "Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h" -#include "Hv_{{name}}_WwiseAuthoringPlugin.h" -#include "Hv_{{name}}_WwiseAuthoringPluginApp.h" - -BEGIN_MESSAGE_MAP(Hv_{{name}}_WwiseAuthoringPluginApp, CWinApp) -END_MESSAGE_MAP() - -/** Only one PluginApp should exist */ -Hv_{{name}}_WwiseAuthoringPluginApp {{name}}App; - -BOOL Hv_{{name}}_WwiseAuthoringPluginApp::InitInstance() { - __super::InitInstance(); - AK::Wwise::RegisterWwisePlugin(); - return TRUE; -} - -/** Plugin Creation DLL export. */ -AK::Wwise::IPluginBase* __stdcall AkCreatePlugin( - unsigned short in_usCompanyID, unsigned short in_usPluginID) { - if (in_usCompanyID == Hv_{{name}}_WwiseAuthoringPlugin::CompanyID && - in_usPluginID == Hv_{{name}}_WwiseAuthoringPlugin::PluginID) { - return new Hv_{{name}}_WwiseAuthoringPlugin(in_usPluginID); - } - return NULL; -} - -/** Dummy assert hook for Wwise plug-ins using AKASSERT (cassert used by default). */ -DEFINEDUMMYASSERTHOOK; -{# force new line #} diff --git a/hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPluginApp.h b/hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPluginApp.h deleted file mode 100644 index 5fa1f06b..00000000 --- a/hvcc/generators/c2wwise/templates/source/authoring/Hv_{{name}}_WwiseAuthoringPluginApp.h +++ /dev/null @@ -1,22 +0,0 @@ -{{copyright}} - -#ifndef _HV_{{name|upper}}_WWISE_APP_H_ -#define _HV_{{name|upper}}_WWISE_APP_H_ - -#ifndef __AFXWIN_H__ -#error include 'stdafx.h' before including this file for PCH -#endif - -#include "Hv_{{name}}_WwiseResource.h" // main symbols - -class Hv_{{name}}_WwiseAuthoringPluginApp : public CWinApp { -public: - Hv_{{name}}_WwiseAuthoringPluginApp() {}; - - virtual BOOL InitInstance(); - - DECLARE_MESSAGE_MAP() -}; - -#endif // _HV_{{name|upper}}_WWISE_APP_H_ -{# force new line #} diff --git a/hvcc/generators/c2wwise/templates/source/engine/Hv_{{name}}_WwisePluginEngineParams.cpp b/hvcc/generators/c2wwise/templates/source/engine/Hv_{{name}}_WwisePluginEngineParams.cpp deleted file mode 100644 index 2b68dcc6..00000000 --- a/hvcc/generators/c2wwise/templates/source/engine/Hv_{{name}}_WwisePluginEngineParams.cpp +++ /dev/null @@ -1,77 +0,0 @@ -{{copyright}} - -#include "Hv_{{name}}_WwisePluginEngineParams.h" -#include - -Hv_{{name}}_EngineParams::Hv_{{name}}_EngineParams() { - -} - -Hv_{{name}}_EngineParams::Hv_{{name}}_EngineParams(const Hv_{{name}}_EngineParams & in_rCopy) { - m_Params = in_rCopy.m_Params; -} - -Hv_{{name}}_EngineParams::~Hv_{{name}}_EngineParams() { - -} - -AK::IAkPluginParam * Hv_{{name}}_EngineParams::Clone(AK::IAkPluginMemAlloc *in_pAllocator) { - return AK_PLUGIN_NEW(in_pAllocator, Hv_{{name}}_EngineParams(*this)); -} - -AKRESULT Hv_{{name}}_EngineParams::Init( - AK::IAkPluginMemAlloc *in_pAllocator, const void *in_pParamsBlock, AkUInt32 in_uBlockSize) { - if (in_uBlockSize == 0) { - // Init with default values if we got invalid parameter block. - // Generated RTPCs - {%- for k, v in parameters %} - m_Params.fHVParam_{{k}} = {{v.attributes.default}}f; - {%- endfor %} - - return AK_Success; - } - - return SetParamsBlock(in_pParamsBlock, in_uBlockSize); -} - -AKRESULT Hv_{{name}}_EngineParams::Term( - AK::IAkPluginMemAlloc *in_pAllocator) { - AK_PLUGIN_DELETE(in_pAllocator, this); - return AK_Success; -} - -AKRESULT Hv_{{name}}_EngineParams::SetParamsBlock( - const void *in_pParamsBlock, AkUInt32 in_ulBlockSize) { - - AKRESULT eResult = AK_Success; - AkUInt8 *pParamsBlock = (AkUInt8 *) in_pParamsBlock; - - // Retrieve generated Heavy parameters - {%- for k, v in parameters %} - m_Params.fHVParam_{{k}} = READBANKDATA(AkReal32, pParamsBlock, in_ulBlockSize); - {%- endfor %} - - CHECKBANKDATASIZE(in_ulBlockSize, eResult); - - return eResult; -} - -AKRESULT Hv_{{name}}_EngineParams::SetParam(AkPluginParamID in_ParamID, - const void *in_pValue, AkUInt32 in_uParamSize) { - if (in_pValue == NULL) return AK_InvalidParameter; // Consistency check - - // Set parameter value. - switch (in_ParamID) { - {%- for k, v in parameters %} - case HV_{{name|upper}}_PARAM_IN_{{k|upper}}_ID: { - // This parameter is RTPCed - m_Params.fHVParam_{{k}} = *reinterpret_cast(in_pValue); - break; - } - {%- endfor %} - default: AKASSERT(!"Unknown parameter"); break; - } - - return AK_Success; -} -{# force new line #} diff --git a/hvcc/generators/c2wwise/templates/source/engine/Hv_{{name}}_WwisePluginEngineParams.h b/hvcc/generators/c2wwise/templates/source/engine/Hv_{{name}}_WwisePluginEngineParams.h deleted file mode 100644 index 721d8210..00000000 --- a/hvcc/generators/c2wwise/templates/source/engine/Hv_{{name}}_WwisePluginEngineParams.h +++ /dev/null @@ -1,83 +0,0 @@ -{{copyright}} - -#ifndef _HV_{{name|upper}}_WWISE_PLUGIN_ENGINE_PARAMS_H_ -#define _HV_{{name|upper}}_WWISE_PLUGIN_ENGINE_PARAMS_H_ - -#include -#include - -/** Generated RTPC IDs */ - -// Input Parameters -{%- for k, v in parameters %} -static const AkPluginParamID HV_{{name|upper}}_PARAM_IN_{{k|upper}}_ID = {{loop.index-1}}; -{%- endfor %} - -/** Parameters structure for this effect. */ -struct Hv_{{name}}_RTPCParams { - /** Generated Heavy Parameters */ - {%- for k, v in parameters %} - AkReal32 fHVParam_{{k}}; - {%- endfor %} -}; - -/** - * class Hv_{{name}}_EngineParams - * Implementation of Heavy Wwise plugin shared parameters. - */ -class Hv_{{name}}_EngineParams : public AK::IAkPluginParam { - public: - /** Allow effect to call accessor functions for retrieving parameter values. */ - friend class Hv_{{name}}_WwisePluginEngine; - - /** Default Constructor. */ - Hv_{{name}}_EngineParams(); - - /** Destructor. */ - virtual ~Hv_{{name}}_EngineParams(); - - /** Copy constructor. */ - Hv_{{name}}_EngineParams(const Hv_{{name}}_EngineParams &in_rCopy); - - /** Create duplicate. */ - virtual IAkPluginParam *Clone(AK::IAkPluginMemAlloc *in_pAllocator); - - /** Parameters node initialization. */ - virtual AKRESULT Init(AK::IAkPluginMemAlloc *in_pAllocator, const void *in_pParamsBlock, - AkUInt32 in_uBlockSize); - - /** Terminate. */ - virtual AKRESULT Term(AK::IAkPluginMemAlloc *in_pAllocator); - - /** Set all parameters at once. */ - virtual AKRESULT SetParamsBlock(const void * in_pParamsBlock, - AkUInt32 in_uBlockSize); - - /** Update one parameter. */ - virtual AKRESULT SetParam(AkPluginParamID in_ParamID, const void *in_pValue, - AkUInt32 in_uParamSize); - -private: - /** Hide assignment operator. */ - Hv_{{name}}_EngineParams &operator=(const Hv_{{name}}_EngineParams &in_rCopy) = default; - - /** RTPC'd Heavy Parameter Getter Methods */ - {%- for k, v in parameters %} - AkReal32 GetParam_{{k}}(); - {%- endfor %} - - /** RTPC Parameter structure. */ - Hv_{{name}}_RTPCParams m_Params; -}; - -/** Getter methods for generated Heavy parameters */ -{%- for k, v in parameters %} -inline AkReal32 Hv_{{name}}_EngineParams::GetParam_{{k}}() { - AkReal32 fParam_{{k}} = m_Params.fHVParam_{{k}}; - AKASSERT(fParam_{{k}} >= {{v.attributes.min}} && fParam_{{k}} <= {{v.attributes.max}}); - return fParam_{{k}}; -} -{% endfor %} - -#endif // _HV_{{name|upper}}_WWISE_PLUGIN_ENGINE_PARAMS_H_ -{# force new line #} diff --git a/hvcc/generators/c2wwise/templates/source/engine/Hv_{{name}}_Wwise{{type}}PluginEngine.cpp b/hvcc/generators/c2wwise/templates/source/engine/Hv_{{name}}_Wwise{{type}}PluginEngine.cpp deleted file mode 100644 index 1693d691..00000000 --- a/hvcc/generators/c2wwise/templates/source/engine/Hv_{{name}}_Wwise{{type}}PluginEngine.cpp +++ /dev/null @@ -1,247 +0,0 @@ -{%- set isSource = true if plugin_type == "Source" -%} -{{copyright}} - -#include "Hv_{{name}}_Wwise{{plugin_type}}PluginEngine.h" -#include "Hv_{{name}}_WwisePluginIDs.h" -#include "Heavy_{{name}}.hpp" -#include -#include -#include - -typedef struct WavHeader { - uint32_t ChunkID; // 0 - uint32_t ChunkSize; // 4 - uint32_t Format; // 8 - uint32_t Subchunk1ID; // 12 - uint32_t Subchunk1Size; // 16 - uint16_t AudioFormat; // 20 - uint16_t NumChannels; // 22 - uint32_t SampleRate; // 24 - uint32_t ByteRate; // 28 - uint16_t BlockAlign; // 32 - uint16_t BitsPerSample; // 34 - uint32_t Subchunk2ID; // 36 - uint32_t Subchunk2Size; // 40 - uint32_t Subchunk2Data; // 44 - uint32_t Subchunk3ID; // 48 - uint32_t Subchunk3Size; // 52 - // data -> 56 -} WavHeader; - - -AK::IAkPlugin* CreateHv_{{name}}_WwisePluginEngine(AK::IAkPluginMemAlloc *in_pAllocator) { - return AK_PLUGIN_NEW( in_pAllocator, Hv_{{name}}_WwisePluginEngine() ); -} - -/** Plugin mechanism. Parameters node creation function to be registered to the FX manager. */ -AK::IAkPluginParam *CreateHv_{{name}}_WwisePluginEngineParams(AK::IAkPluginMemAlloc *in_pAllocator) { - return AK_PLUGIN_NEW(in_pAllocator, Hv_{{name}}_EngineParams()); -} - - -static void OnHeavyPrint(HeavyContextInterface *context, const char *printName, const char *str, - const HvMessage *msg) { - Hv_{{name}}_WwisePluginEngine *engine = reinterpret_cast(context->getUserData()); - if (engine != nullptr) { - engine->PostDebugMessage(str); - } -} -{% if sends|length > 0 %} -static void OnSendMessageCallback(HeavyContextInterface *context, const char *sendName, - hv_uint32_t sendHash, const HvMessage *msg) { - Hv_{{name}}_WwisePluginEngine *engine = reinterpret_cast(context->getUserData()); - if (engine != nullptr && hv_msg_isFloat(msg, 0)) { - switch (sendHash) { - {%- for k, v in sends %} - case {{v.hash}}: engine->SetOutRTPC("{{k|lower}}", {{k|length}}, hv_msg_getFloat(msg, 0)); break; - {%- endfor %} - default: return; - } - } -} -{%- endif %} -/** Static initializer object to register automatically the plugin into the sound engine */ -AK::PluginRegistration Hv_{{name}}_Wwise{{plugin_type}}PluginRegistration( - {{ "AkPluginTypeSource" if isSource else "AkPluginTypeEffect" }}, - HV_COMPANY_ID, HV_{{name|upper}}_PLUGIN_ID, - CreateHv_{{name}}_WwisePluginEngine, - CreateHv_{{name}}_WwisePluginEngineParams); - -Hv_{{name}}_WwisePluginEngine::Hv_{{name}}_WwisePluginEngine() { - /** Initialize members. */ - m_pPluginContext = NULL; - m_pEngineParams = NULL; - m_pHeavyContext = NULL; - m_uSampleRate = 0; - - {%- for k, v in parameters %} - m_fPrevParam_{{k}} = {{v.attributes.default}}f; - {%- endfor %} -} - -Hv_{{name}}_WwisePluginEngine::~Hv_{{name}}_WwisePluginEngine() { - -} - -AKRESULT Hv_{{name}}_WwisePluginEngine::Init(AK::IAkPluginMemAlloc *in_pAllocator, - AK::{{ "IAkSourcePluginContext" if isSource else "IAkEffectPluginContext" }} *in_pPluginContext, AK::IAkPluginParam *in_pParams, - AkAudioFormat &io_rFormat) { - - m_pPluginContext = in_pPluginContext; - - AKASSERT(in_pParams != NULL); - - // Initialise Heavy context - m_uSampleRate = io_rFormat.uSampleRate; - m_pHeavyContext = new Heavy_{{name}}((double) m_uSampleRate, {{pool_sizes_kb.internal}}, {{pool_sizes_kb.inputQueue}}, {{pool_sizes_kb.outputQueue}}); - m_pHeavyContext->setUserData(this); - {% if sends|length > 0 -%} - m_pHeavyContext->setSendHook(&OnSendMessageCallback); - {%- endif %} -#ifndef AK_OPTIMIZED - m_pHeavyContext->setPrintHook(&OnHeavyPrint); -#endif - {% if isSource %} - // Notify pipeline of chosen output format change. - AkChannelMask channelMask = (hv_getNumOutputChannels(m_pHeavyContext) > 1) - ? AK_SPEAKER_SETUP_2_0 : AK_SPEAKER_SETUP_MONO; - io_rFormat.channelConfig.SetStandard(channelMask); - {% endif %} - // Initialise Parameters - m_pEngineParams = reinterpret_cast(in_pParams); - {%- for k, v in parameters %} - hv_sendFloatToReceiver(m_pHeavyContext, Heavy_{{name}}::Parameter::In::{{k|upper}}, m_pEngineParams->GetParam_{{k}}()); - {%- endfor %} - {% if tables|length > 0 %} - // Initialise tables with media - {%- for k, v in tables %} - LoadPluginMediaToHeavyTable({{loop.index-1}}, {{v.hash}}, hv_stringToHash("setTableSize-{{v.display}}")); // table '{{v.display}}' - {%- endfor %} - {% endif %} - AK_PERF_RECORDING_RESET(); - - return AK_Success; -} - -AKRESULT Hv_{{name}}_WwisePluginEngine::Term(AK::IAkPluginMemAlloc *in_pAllocator) { - delete m_pHeavyContext; - AK_PLUGIN_DELETE(in_pAllocator, this); - return AK_Success; -} - -AKRESULT Hv_{{name}}_WwisePluginEngine::GetPluginInfo(AkPluginInfo & out_rPluginInfo) { - out_rPluginInfo.eType = {{ "AkPluginTypeSource" if isSource else "AkPluginTypeEffect" }}; - out_rPluginInfo.bIsInPlace = true; - out_rPluginInfo.uBuildVersion = AK_WWISESDK_VERSION_COMBINED; - return AK_Success; -} - -void Hv_{{name}}_WwisePluginEngine::Execute(AkAudioBuffer *io_pBufferOut) { - AK_PERF_RECORDING_START( "Hv_{{name}}_Wwise{{type}}PluginEngine", 25, 30); - - // Retrieve RTPC values and send in as a message to context - {%- for k, v in parameters %} - AkReal32 param_{{k}} = m_pEngineParams->GetParam_{{k}}(); - if (param_{{k}} != m_fPrevParam_{{k}}) { - hv_sendFloatToReceiver(m_pHeavyContext, Heavy_{{name}}::Parameter::In::{{k|upper}}, param_{{k}}); - m_fPrevParam_{{k}} = param_{{k}}; - } - {%- endfor %} - - {% if not isSource -%} - // zero-pad the rest of the buffer in case the numFrames is not a multiple of 4 - io_pBufferOut->ZeroPadToMaxFrames(); - {%- endif %} - - // Calculate num frames to process and retrieve buffer - AkUInt16 numFramesToProcess = io_pBufferOut->MaxFrames(); - float *buffer = (float *) io_pBufferOut->GetChannel(0); - {% if isSource %} - m_pHeavyContext->processInline(nullptr, buffer, numFramesToProcess); - {% else %} - // Check for channel configuration mismatch - if (io_pBufferOut->NumChannels() == 1 && - ((m_pHeavyContext->getNumInputChannels() == 2) || (m_pHeavyContext->getNumOutputChannels() == 2))) { - float *tempBuffer[2] = { buffer, buffer }; - m_pHeavyContext->process(tempBuffer, tempBuffer, numFramesToProcess); - } else { - m_pHeavyContext->processInline(buffer, buffer, numFramesToProcess); - } - {% endif %} - io_pBufferOut->uValidFrames = numFramesToProcess; - {% if isSource -%}io_pBufferOut->eState = AK_DataReady;{%- endif %} - - AK_PERF_RECORDING_STOP("Hv_{{name}}_Wwise{{type}}PluginEngine", 25, 30); -} -{% if isSource %} -AkReal32 Hv_{{name}}_WwisePluginEngine::GetDuration() const { - return 0.0f; // Infinite duration. -} - -AkReal32 Hv_{{name}}_WwisePluginEngine::GetEnvelope() const { - return 1.0f; // Normalized envelope. -} - -AKRESULT Hv_{{name}}_WwisePluginEngine::StopLooping() { - return AK_Success; -} -{% endif %} -void Hv_{{name}}_WwisePluginEngine::PostDebugMessage(const char *message) { - m_pPluginContext->PostMonitorMessage(message, AK::Monitor::ErrorLevel::ErrorLevel_Message); -} - -void Hv_{{name}}_WwisePluginEngine::LoadPluginMediaToHeavyTable(unsigned int mediaIndex, - unsigned int tableHash, unsigned int tableSizeReceiverHash) { - AkUInt8 *pPluginData = NULL; - AkUInt32 uPluginDataSize; - m_pPluginContext->GetPluginMedia(mediaIndex, pPluginData, uPluginDataSize); // retrieve stored plugin data - - if (pPluginData != NULL) { - // determine wav header format - WavHeader h; - hv_memcpy(&h, pPluginData, sizeof(WavHeader)); - uint32_t offsetBytes = 0; - const uint32_t dataID = 0x61746164; // 'data' - const uint32_t factID = 0x74636166; // 'fact' - if (h.Subchunk2ID == dataID) { - offsetBytes = 44; - } - else if (h.Subchunk2ID == factID && h.Subchunk3ID == dataID) { - offsetBytes = 56; - } - - uint32_t newSizeBytes = uPluginDataSize - offsetBytes; - if (offsetBytes > 0 && newSizeBytes > 0) { - // adjust table size - const uint32_t numSamples = newSizeBytes * 8 / h.BitsPerSample; - m_pHeavyContext->setLengthForTable(tableHash, numSamples); - - float *buffer = m_pHeavyContext->getBufferForTable(tableHash); - if (buffer != NULL && newSizeBytes > 0) { - // copy contents and notify respective receiver - hv_memcpy(buffer, (float *) (pPluginData + offsetBytes), newSizeBytes); - m_pHeavyContext->sendFloatToReceiver(tableSizeReceiverHash, (float) numSamples); - } - } - } -} - -void Hv_{{name}}_WwisePluginEngine::SetOutRTPC(const char *rtpcName, - unsigned int nameLength, float value) { - AK::FNVHash32 hashFunc; - // Set the RTPC value for the plugin's associated gameobject. - // Note(joe): if the plugin is on a bus the gameobject will be null and thus - // set the global RTPC. - m_pPluginContext->GlobalContext()->SetRTPCValue( - hashFunc.Compute((unsigned char *) rtpcName, nameLength*sizeof(char)), - value, -#if AK_WWISESDK_VERSION_MAJOR <= 2019 - m_pPluginContext->GetVoiceInfo()->GetGameObjectID(), -#else - m_pPluginContext->GetGameObjectInfo()->GetGameObjectID(), -#endif - 0, - AkCurveInterpolation_Linear, - true); // disable interpolation, let the plugin handle it internally -} -{# force new line #} diff --git a/hvcc/generators/c2wwise/templates/source/engine/Hv_{{name}}_Wwise{{type}}PluginEngine.h b/hvcc/generators/c2wwise/templates/source/engine/Hv_{{name}}_Wwise{{type}}PluginEngine.h deleted file mode 100644 index 36f25398..00000000 --- a/hvcc/generators/c2wwise/templates/source/engine/Hv_{{name}}_Wwise{{type}}PluginEngine.h +++ /dev/null @@ -1,65 +0,0 @@ -{%- set isSource = true if plugin_type == "Source" -%} -{{copyright}} - -#ifndef _HV_{{name|upper}}_WWISE_PLUGIN_ENGINE_H_ -#define _HV_{{name|upper}}_WWISE_PLUGIN_ENGINE_H_ - -#include "Hv_{{name}}_WwisePluginEngineParams.h" - -class HeavyContextInterface; - -/** - * class Hv_{{name}}_WwisePluginEngine - * Heavy context wrapper (source effect). - */ -class Hv_{{name}}_WwisePluginEngine : public AK::{{ "IAkSourcePlugin" if isSource else "IAkInPlaceEffectPlugin" }} -{ -public: - Hv_{{name}}_WwisePluginEngine(); - virtual ~Hv_{{name}}_WwisePluginEngine(); - - // Plugin initialization - virtual AKRESULT Init(AK::IAkPluginMemAlloc *in_pAllocator, - AK::{{ "IAkSourcePluginContext" if isSource else "IAkEffectPluginContext" }} *in_pPluginContext, - AK::IAkPluginParam *in_pParams, - AkAudioFormat &io_rFormat) override; - - virtual AKRESULT Term(AK::IAkPluginMemAlloc *in_pAllocator) override; - - virtual AKRESULT Reset() override { return AK_Success; } - - virtual AKRESULT GetPluginInfo(AkPluginInfo & out_rPluginInfo) override; - - // Main processing loop - virtual void Execute(AkAudioBuffer *io_pBuffer) override; -{% if isSource %} - virtual AkReal32 GetDuration() const override; - - virtual AkReal32 GetEnvelope() const override; - - virtual AKRESULT StopLooping() override; -{% else %} - // Return AK_DataReady or AK_NoMoreData, depending if there would be audio output or not at that point. - virtual AKRESULT TimeSkip(AkUInt32 in_uFrames) override { return AK_DataReady; } -{% endif %} - void PostDebugMessage(const char *str); - - void SetOutRTPC(const char *rtpcName, unsigned int nameLength, float value); - -private: - void LoadPluginMediaToHeavyTable(unsigned int mediaIndex, unsigned int tableHash, - unsigned int tableSizeReceiverHash); - - AK::{{ "IAkSourcePluginContext" if isSource else "IAkEffectPluginContext" }} *m_pPluginContext; // Plugin context interface. - Hv_{{name}}_EngineParams *m_pEngineParams; // Modified by Wwise/RTPC. - HeavyContextInterface *m_pHeavyContext; // Main Heavy patch context - AkUInt32 m_uSampleRate; - - // Store previous RTPC values - {%- for k, v in parameters %} - AkReal32 m_fPrevParam_{{k}}; - {%- endfor %} -}; - -#endif // _HV_{{name|upper}}_WWISE_PLUGIN_ENGINE_H_ -{# force new line #} diff --git a/hvcc/generators/c2wwise/templates/source/include/Hv_{{name}}_WwisePluginIDs.h b/hvcc/generators/c2wwise/templates/source/include/Hv_{{name}}_WwisePluginIDs.h deleted file mode 100644 index f9e30070..00000000 --- a/hvcc/generators/c2wwise/templates/source/include/Hv_{{name}}_WwisePluginIDs.h +++ /dev/null @@ -1,15 +0,0 @@ -{{copyright}} - -#ifndef _HV_{{name|upper}}_WWISE_PLUGIN_IDS_H_ -#define _HV_{{name|upper}}_WWISE_PLUGIN_IDS_H_ - -#include - -// This ID must be the same as the PluginID in the Plug-in's XML definition file -// and is persisted in project files. -// Note: Don't change the ID or existing projects will not recognize this plug-in anymore. -const AkUInt32 HV_COMPANY_ID = 64; -const AkUInt32 HV_{{name|upper}}_PLUGIN_ID = {{plugin_id}}; - -#endif // _HV_{{name|upper}}_WWISE_PLUGIN_IDS_H_ -{# force new line #} diff --git a/hvcc/generators/c2wwise/templates/source/include/Hv_{{name}}_Wwise{{type}}PluginFactory.h b/hvcc/generators/c2wwise/templates/source/include/Hv_{{name}}_Wwise{{type}}PluginFactory.h deleted file mode 100644 index 7e42e890..00000000 --- a/hvcc/generators/c2wwise/templates/source/include/Hv_{{name}}_Wwise{{type}}PluginFactory.h +++ /dev/null @@ -1,13 +0,0 @@ -{{copyright}} - -#ifndef _HV_{{name|upper}}_WWISE_SOURCE_PLUGIN_FACTORY_H_ -#define _HV_{{name|upper}}_WWISE_SOURCE_PLUGIN_FACTORY_H_ - -#ifndef AK_IOS -#include -#endif - -AK_STATIC_LINK_PLUGIN(Hv_{{name}}_Wwise{{plugin_type}}Plugin); - -#endif // _HV_{{name|upper}}_WWISE_SOURCE_PLUGIN_FACTORY_H_ -{# force new line #} diff --git a/hvcc/generators/c2wwise/templates/source/runtime/Hv_{{name}}_WwisePluginRegister.cpp b/hvcc/generators/c2wwise/templates/source/runtime/Hv_{{name}}_WwisePluginRegister.cpp deleted file mode 100644 index da508c92..00000000 --- a/hvcc/generators/c2wwise/templates/source/runtime/Hv_{{name}}_WwisePluginRegister.cpp +++ /dev/null @@ -1,13 +0,0 @@ -{{copyright}} - -#include /// Dummy assert hook definition. -#include -#include "Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h" -#include "Hv_{{name}}_WwisePluginIDs.h" - -DEFINE_PLUGIN_REGISTER_HOOK - -// Manually define the assert hook for now as the definition of DEFINEDUMMYASSERTHOOK -// is in a file that shouldn't be linked against for console builds -AkAssertHook g_pAssertHook = NULL; -{# force new line #} diff --git a/hvcc/generators/c2wwise/templates/vs2015/Hv_{{name}}_Wwise{{type}}AuthPlugin.vcxproj b/hvcc/generators/c2wwise/templates/vs2015/Hv_{{name}}_Wwise{{type}}AuthPlugin.vcxproj deleted file mode 100644 index d144a60f..00000000 --- a/hvcc/generators/c2wwise/templates/vs2015/Hv_{{name}}_Wwise{{type}}AuthPlugin.vcxproj +++ /dev/null @@ -1,469 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Profile - Win32 - - - Profile - x64 - - - Release - Win32 - - - Release - x64 - - - - Hv_{{name}}_Wwise{{plugin_type}}AuthPlugin - {8257454F-51E6-4481-948B-034FD37C0FBF} - Heavy - 8.1 - - - C:\Program Files (x86)\Audiokinetic\Wwise {{wwise_version}}\SDK - - - - DynamicLibrary - v{{msbuild_version}} - Static - false - Unicode - - - DynamicLibrary - v{{msbuild_version}} - Static - false - Unicode - - - DynamicLibrary - v{{msbuild_version}} - Static - false - Unicode - - - DynamicLibrary - v{{msbuild_version}} - Static - false - Unicode - - - DynamicLibrary - v{{msbuild_version}} - Static - false - Unicode - - - DynamicLibrary - v{{msbuild_version}} - Static - false - Unicode - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>12.0.30501.0 - - - $(SolutionDir)..\build\win\x86\release\ - $(SolutionDir)intermediate\win\x86\release\$(ProjectName)\ - false - - - $(SolutionDir)..\build\win\x86\profile\ - $(SolutionDir)intermediate\win\x86\profile\$(ProjectName)\ - false - - - $(SolutionDir)..\build\win\x86\debug\ - $(SolutionDir)intermediate\win\x86\debug\$(ProjectName)\ - false - - - $(SolutionDir)..\build\win\$(Platform)\release\ - $(SolutionDir)intermediate\win\$(Platform)\release\$(ProjectName)\ - false - - - $(SolutionDir)..\build\win\$(Platform)\profile\ - $(SolutionDir)intermediate\win\$(Platform)\profile\$(ProjectName)\ - false - - - $(SolutionDir)..\build\win\$(Platform)\debug\ - $(SolutionDir)intermediate\win\$(Platform)\debug\$(ProjectName)\ - false - - - - _DEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - false - - - Disabled - $(WwiseSDKPath)\include;$(SolutionDir)..\source\include;$(SolutionDir)..\source\{{plugin_type|lower}}_engine;%(AdditionalIncludeDirectories) - WIN32;_XKEYCHECK_H;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - $(IntDir) - $(IntDir)vc70.pdb - Level3 - Sync - - - _DEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - 0x0409 - $(IntDir);$(WwiseSDKPath)\include;$(WwiseSDKPath)\samples\Common;%(AdditionalIncludeDirectories) - - - false - - - Hv_{{name}}_Wwise{{plugin_type}}Engine.lib;HtmlHelp.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName).dll - $(OutDir);%(AdditionalLibraryDirectories) - false - $(SolutionDir)..\source\authoring\Hv_{{name}}_WwiseAuthoringPlugin.def - true - $(IntDir)$(ProjectName).pdb - $(IntDir)$(TargetName).lib - Windows - false - - MachineX86 - - - - - - _DEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - false - X64 - - - Disabled - $(WwiseSDKPath)\include;$(SolutionDir)..\source\include;$(SolutionDir)..\source\{{plugin_type|lower}}_engine;%(AdditionalIncludeDirectories) - WIN64;HV_SIMD_SSE;_XKEYCHECK_H;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - $(IntDir) - $(IntDir)vc70.pdb - Level3 - ProgramDatabase - Sync - - - _DEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - 0x0409 - $(IntDir);$(WwiseSDKPath)\include;$(WwiseSDKPath)\samples\Common;%(AdditionalIncludeDirectories) - - - false - - - Hv_{{name}}_Wwise{{plugin_type}}Engine.lib;HtmlHelp.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName).dll - $(OutDir);%(AdditionalLibraryDirectories) - false - $(SolutionDir)..\source\authoring\Hv_{{name}}_WwiseAuthoringPlugin.def - true - $(IntDir)$(ProjectName).pdb - $(IntDir)$(TargetName).lib - Windows - false - - MachineX64 - - - - - - _DEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - false - - - MaxSpeed - true - $(WwiseSDKPath)\include;$(SolutionDir)..\source\include;$(SolutionDir)..\source\{{plugin_type|lower}}_engine;%(AdditionalIncludeDirectories) - WIN32;_XKEYCHECK_H;%(PreprocessorDefinitions) - true - MultiThreaded - false - StreamingSIMDExtensions2 - - $(IntDir)vc70.pdb - Level3 - ProgramDatabase - Sync - - - NDEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - 0x0409 - $(IntDir);$(WwiseSDKPath)\include;$(WwiseSDKPath)\samples\Common;%(AdditionalIncludeDirectories) - - - false - - - Hv_{{name}}_Wwise{{plugin_type}}Engine.lib;HtmlHelp.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName).dll - $(OutDir);%(AdditionalLibraryDirectories) - $(SolutionDir)..\source\authoring\Hv_{{name}}_WwiseAuthoringPlugin.def - true - $(IntDir)$(ProjectName).pdb - $(IntDir)$(TargetName).lib - Windows - true - true - false - - MachineX86 - - - - - - false - NDEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - X64 - - - MaxSpeed - true - $(WwiseSDKPath)\include;$(SolutionDir)..\source\include;$(SolutionDir)..\source\{{plugin_type|lower}}_engine;%(AdditionalIncludeDirectories) - WIN64;_XKEYCHECK_H;HV_SIMD_SSE;%(PreprocessorDefinitions) - true - MultiThreaded - false - StreamingSIMDExtensions2 - - $(IntDir)vc70.pdb - Level3 - ProgramDatabase - Sync - - - NDEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - 0x0409 - $(IntDir);$(WwiseSDKPath)\include;$(WwiseSDKPath)\samples\Common;%(AdditionalIncludeDirectories) - - - false - - - Hv_{{name}}_Wwise{{plugin_type}}Engine.lib;HtmlHelp.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName).dll - $(OutDir);%(AdditionalLibraryDirectories) - $(SolutionDir)..\source\authoring\Hv_{{name}}_WwiseAuthoringPlugin.def - No - false - $(IntDir)$(ProjectName).pdb - $(IntDir)$(TargetName).lib - Windows - true - true - false - - MachineX64 - - - - - - NDEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - false - - - Full - true - $(WwiseSDKPath)\include;$(SolutionDir)..\source\include;$(SolutionDir)..\source\{{plugin_type|lower}}_engine;%(AdditionalIncludeDirectories) - WIN32;_XKEYCHECK_H;%(PreprocessorDefinitions) - true - MultiThreaded - false - StreamingSIMDExtensions2 - - $(IntDir)vc70.pdb - Level3 - ProgramDatabase - Sync - - - NDEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - 0x0409 - $(IntDir);$(WwiseSDKPath)\include;$(WwiseSDKPath)\samples\Common;%(AdditionalIncludeDirectories) - - - false - - - Hv_{{name}}_Wwise{{plugin_type}}Engine.lib;HtmlHelp.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName).dll - $(OutDir);%(AdditionalLibraryDirectories) - $(SolutionDir)..\source\authoring\Hv_{{name}}_WwiseAuthoringPlugin.def - No - false - $(IntDir)$(ProjectName).pdb - $(IntDir)$(TargetName).lib - Windows - true - true - false - - MachineX86 - - - - - - NDEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - false - X64 - - - Full - true - $(WwiseSDKPath)\include;$(SolutionDir)..\source\include;$(SolutionDir)..\source\{{plugin_type|lower}}_engine;%(AdditionalIncludeDirectories) - WIN64;HV_SIMD_SSE;_XKEYCHECK_H;%(PreprocessorDefinitions) - true - MultiThreaded - false - - $(IntDir)vc70.pdb - Level3 - ProgramDatabase - Sync - - - NDEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - 0x0409 - $(IntDir);$(WwiseSDKPath)\include;$(WwiseSDKPath)\samples\Common;%(AdditionalIncludeDirectories) - - - false - - - Hv_{{name}}_Wwise{{plugin_type}}Engine.lib;HtmlHelp.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName).dll - $(OutDir);%(AdditionalLibraryDirectories) - $(SolutionDir)..\source\authoring\Hv_{{name}}_WwiseAuthoringPlugin.def - No - false - $(IntDir)$(ProjectName).pdb - $(IntDir)$(TargetName).lib - Windows - true - true - false - - MachineX64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Copying "%(Filename)%(Extension)..." - if exist "$(OutDir)%(Filename)%(Extension)" attrib -r "$(OutDir)%(Filename)%(Extension)" - copy /Y "%(FullPath)" "$(Outdir)" - - $(OutDir)%(Filename)%(Extension);%(Outputs) - Designer - - - - - - \ No newline at end of file diff --git a/hvcc/generators/c2wwise/templates/vs2015/Hv_{{name}}_Wwise{{type}}Engine.vcxproj b/hvcc/generators/c2wwise/templates/vs2015/Hv_{{name}}_Wwise{{type}}Engine.vcxproj deleted file mode 100644 index 6ad1e4b1..00000000 --- a/hvcc/generators/c2wwise/templates/vs2015/Hv_{{name}}_Wwise{{type}}Engine.vcxproj +++ /dev/null @@ -1,299 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Profile - Win32 - - - Profile - x64 - - - Release - Win32 - - - Release - x64 - - - - Hv_{{name}}_Wwise{{plugin_type}}Engine - {9A8B43A1-383C-4C50-AC02-559B5775AAD9} - Heavy - 8.1 - - - C:\Program Files (x86)\Audiokinetic\Wwise {{wwise_version}}\SDK - - - - StaticLibrary - v{{msbuild_version}} - Unicode - - - StaticLibrary - v{{msbuild_version}} - Unicode - - - StaticLibrary - v{{msbuild_version}} - Unicode - - - StaticLibrary - v{{msbuild_version}} - Unicode - - - StaticLibrary - v{{msbuild_version}} - Unicode - - - StaticLibrary - v{{msbuild_version}} - Unicode - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>12.0.30501.0 - - - $(SolutionDir)..\build\win\x86\release\ - $(SolutionDir)intermediate\win\x86\release\$(ProjectName)\ - false - - - $(SolutionDir)..\build\win\x86\profile\ - $(SolutionDir)intermediate\win\x86\profile\$(ProjectName)\ - false - - - $(SolutionDir)..\build\win\x86\debug\ - $(SolutionDir)intermediate\win\x86\debug\$(ProjectName)\ - false - - - $(SolutionDir)..\build\win\$(Platform)\release\ - $(SolutionDir)intermediate\win\$(Platform)\release\$(ProjectName)\ - false - - - $(SolutionDir)..\build\win\$(Platform)\profile\ - $(SolutionDir)intermediate\win\$(Platform)\profile\$(ProjectName)\ - false - - - $(SolutionDir)..\build\win\$(Platform)\debug\ - $(SolutionDir)intermediate\win\$(Platform)\debug\$(ProjectName)\ - false - - - - Disabled - .;$(WwiseSDKPath)\include;$(SolutionDir)..\source\include;$(SolutionDir)..\source\heavy - _DEBUG;WIN32;AUDIOKINETIC;_XKEYCHECK_H;%(PreprocessorDefinitions) - StreamingSIMDExtensions - - MultiThreadedDebug - - - _DEBUG;WIN32;AUDIOKINETIC;_XKEYCHECK_H;%(PreprocessorDefinitions) - .;..;$(WwiseSDKPath)\include;$(SolutionDir)..\source\heavy;%(AdditionalIncludeDirectories) - - - $(OutDir)$(ProjectName).lib - $(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories) - - - if exist "$(OutDir)Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h" attrib -r "$(OutDir)Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h" - copy /Y "$(SolutionDir)..\source\include\Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h" "$(Outdir)" - - - - - - X64 - - - Disabled - .;$(WwiseSDKPath)\include;$(SolutionDir)..\source\include;$(SolutionDir)..\source\heavy - _DEBUG;WIN64;HV_SIMD_SSE;AUDIOKINETIC;_XKEYCHECK_H;%(PreprocessorDefinitions) - - MultiThreadedDebug - - - _DEBUG;WIN64;HV_SIMD_SSE;AUDIOKINETIC;_XKEYCHECK_H;%(PreprocessorDefinitions) - .;..;$(WwiseSDKPath)\include;$(SolutionDir)..\source\heavy;%(AdditionalIncludeDirectories) - - - $(OutDir)$(ProjectName).lib - $(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories) - - - if exist "$(OutDir)Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h" attrib -r "$(OutDir)Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h" - copy /Y "$(SolutionDir)..\source\include\Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h" "$(Outdir)" - - - - - - MaxSpeed - .;$(WwiseSDKPath)\include;$(SolutionDir)..\source\include;$(SolutionDir)..\source\heavy - NDEBUG;WIN32;AUDIOKINETIC;_XKEYCHECK_H;%(PreprocessorDefinitions) - StreamingSIMDExtensions - - MultiThreaded - - - NDEBUG;WIN32;AUDIOKINETIC;_XKEYCHECK_H;%(PreprocessorDefinitions) - .;..;$(WwiseSDKPath)\include;$(SolutionDir)..\source\heavy;%(AdditionalIncludeDirectories) - - - $(OutDir)$(ProjectName).lib - $(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories) - - - if exist "$(OutDir)Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h" attrib -r "$(OutDir)Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h" - copy /Y "$(SolutionDir)..\source\include\Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h" "$(Outdir)" - - - - - - X64 - - - MaxSpeed - .;$(WwiseSDKPath)\include;$(SolutionDir)..\source\include;$(SolutionDir)..\source\heavy - NDEBUG;WIN64;HV_SIMD_SSE;AUDIOKINETIC;_XKEYCHECK_H;%(PreprocessorDefinitions) - - MultiThreaded - - - NDEBUG;WIN64;HV_SIMD_SSE;AUDIOKINETIC;_XKEYCHECK_H;%(PreprocessorDefinitions) - .;..;$(WwiseSDKPath)\include;$(SolutionDir)..\source\heavy;%(AdditionalIncludeDirectories) - - - $(OutDir)$(ProjectName).lib - $(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories) - - - if exist "$(OutDir)Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h" attrib -r "$(OutDir)Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h" - copy /Y "$(SolutionDir)..\source\include\Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h" "$(Outdir)" - - - - - - MaxSpeed - .;$(WwiseSDKPath)\include;$(SolutionDir)..\source\include;$(SolutionDir)..\source\heavy - NDEBUG;AK_OPTIMIZED;WIN32;AUDIOKINETIC;_XKEYCHECK_H;%(PreprocessorDefinitions) - StreamingSIMDExtensions - - MultiThreaded - None - - - NDEBUG;AK_OPTIMIZED;WIN32;AUDIOKINETIC;_XKEYCHECK_H;%(PreprocessorDefinitions) - .;..;$(WwiseSDKPath)\include;$(SolutionDir)..\source\heavy;%(AdditionalIncludeDirectories) - - - $(OutDir)$(ProjectName).lib - $(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories) - - - if exist "$(OutDir)Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h" attrib -r "$(OutDir)Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h" - copy /Y "$(SolutionDir)..\source\include\Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h" "$(Outdir)" - - - - - - X64 - - - MaxSpeed - .;$(WwiseSDKPath)\include;$(SolutionDir)..\source\include;$(SolutionDir)..\source\heavy - NDEBUG;AK_OPTIMIZED;WIN64;HV_SIMD_SSE;AUDIOKINETIC;_XKEYCHECK_H;%(PreprocessorDefinitions) - - MultiThreaded - None - - - NDEBUG;AK_OPTIMIZED;WIN64;HV_SIMD_SSE;AUDIOKINETIC;_XKEYCHECK_H;%(PreprocessorDefinitions) - .;..;$(WwiseSDKPath)\include;$(SolutionDir)..\source\heavy;%(AdditionalIncludeDirectories) - - - $(OutDir)$(ProjectName).lib - $(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories) - - - if exist "$(OutDir)Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h" attrib -r "$(OutDir)Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h" - copy /Y "$(SolutionDir)..\source\include\Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h" "$(Outdir)" - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hvcc/generators/c2wwise/templates/vs2015/Hv_{{name}}_Wwise{{type}}Plugin.sln b/hvcc/generators/c2wwise/templates/vs2015/Hv_{{name}}_Wwise{{type}}Plugin.sln deleted file mode 100644 index baba117c..00000000 --- a/hvcc/generators/c2wwise/templates/vs2015/Hv_{{name}}_Wwise{{type}}Plugin.sln +++ /dev/null @@ -1,68 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.24720.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Hv_{{name}}_Wwise{{plugin_type}}Engine", "Hv_{{name}}_Wwise{{plugin_type}}Engine.vcxproj", "{9A8B43A1-383C-4C50-AC02-559B5775AAD9}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Hv_{{name}}_Wwise{{plugin_type}}AuthPlugin", "Hv_{{name}}_Wwise{{plugin_type}}AuthPlugin.vcxproj", "{8257454F-51E6-4481-948B-034FD37C0FBF}" - ProjectSection(ProjectDependencies) = postProject - {9A8B43A1-383C-4C50-AC02-559B5775AAD9} = {9A8B43A1-383C-4C50-AC02-559B5775AAD9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Hv_{{name}}_Wwise{{plugin_type}}RuntimePlugin", "Hv_{{name}}_Wwise{{plugin_type}}RuntimePlugin.vcxproj", "{0C075463-49AE-41A9-97E7-A63FA62821A2}" - ProjectSection(ProjectDependencies) = postProject - {9A8B43A1-383C-4C50-AC02-559B5775AAD9} = {9A8B43A1-383C-4C50-AC02-559B5775AAD9} - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x86 = Debug|x86 - Debug|x64 = Debug|x64 - Profile|x86 = Profile|x86 - Profile|x64 = Profile|x64 - Release|x86 = Release|x86 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {9A8B43A1-383C-4C50-AC02-559B5775AAD9}.Debug|x86.ActiveCfg = Debug|x86 - {9A8B43A1-383C-4C50-AC02-559B5775AAD9}.Debug|x86.Build.0 = Debug|x86 - {9A8B43A1-383C-4C50-AC02-559B5775AAD9}.Debug|x64.ActiveCfg = Debug|x64 - {9A8B43A1-383C-4C50-AC02-559B5775AAD9}.Debug|x64.Build.0 = Debug|x64 - {9A8B43A1-383C-4C50-AC02-559B5775AAD9}.Profile|x86.ActiveCfg = Profile|x86 - {9A8B43A1-383C-4C50-AC02-559B5775AAD9}.Profile|x86.Build.0 = Profile|x86 - {9A8B43A1-383C-4C50-AC02-559B5775AAD9}.Profile|x64.ActiveCfg = Profile|x64 - {9A8B43A1-383C-4C50-AC02-559B5775AAD9}.Profile|x64.Build.0 = Profile|x64 - {9A8B43A1-383C-4C50-AC02-559B5775AAD9}.Release|x86.ActiveCfg = Release|x86 - {9A8B43A1-383C-4C50-AC02-559B5775AAD9}.Release|x86.Build.0 = Release|x86 - {9A8B43A1-383C-4C50-AC02-559B5775AAD9}.Release|x64.ActiveCfg = Release|x64 - {9A8B43A1-383C-4C50-AC02-559B5775AAD9}.Release|x64.Build.0 = Release|x64 - {8257454F-51E6-4481-948B-034FD37C0FBF}.Debug|x86.ActiveCfg = Debug|x86 - {8257454F-51E6-4481-948B-034FD37C0FBF}.Debug|x86.Build.0 = Debug|x86 - {8257454F-51E6-4481-948B-034FD37C0FBF}.Debug|x64.ActiveCfg = Debug|x64 - {8257454F-51E6-4481-948B-034FD37C0FBF}.Debug|x64.Build.0 = Debug|x64 - {8257454F-51E6-4481-948B-034FD37C0FBF}.Profile|x86.ActiveCfg = Profile|x86 - {8257454F-51E6-4481-948B-034FD37C0FBF}.Profile|x86.Build.0 = Profile|x86 - {8257454F-51E6-4481-948B-034FD37C0FBF}.Profile|x64.ActiveCfg = Profile|x64 - {8257454F-51E6-4481-948B-034FD37C0FBF}.Profile|x64.Build.0 = Profile|x64 - {8257454F-51E6-4481-948B-034FD37C0FBF}.Release|x86.ActiveCfg = Release|x86 - {8257454F-51E6-4481-948B-034FD37C0FBF}.Release|x86.Build.0 = Release|x86 - {8257454F-51E6-4481-948B-034FD37C0FBF}.Release|x64.ActiveCfg = Release|x64 - {8257454F-51E6-4481-948B-034FD37C0FBF}.Release|x64.Build.0 = Release|x64 - {0C075463-49AE-41A9-97E7-A63FA62821A2}.Debug|x86.ActiveCfg = Debug|x86 - {0C075463-49AE-41A9-97E7-A63FA62821A2}.Debug|x86.Build.0 = Debug|x86 - {0C075463-49AE-41A9-97E7-A63FA62821A2}.Debug|x64.ActiveCfg = Debug|x64 - {0C075463-49AE-41A9-97E7-A63FA62821A2}.Debug|x64.Build.0 = Debug|x64 - {0C075463-49AE-41A9-97E7-A63FA62821A2}.Profile|x86.ActiveCfg = Profile|x86 - {0C075463-49AE-41A9-97E7-A63FA62821A2}.Profile|x86.Build.0 = Profile|x86 - {0C075463-49AE-41A9-97E7-A63FA62821A2}.Profile|x64.ActiveCfg = Profile|x64 - {0C075463-49AE-41A9-97E7-A63FA62821A2}.Profile|x64.Build.0 = Profile|x64 - {0C075463-49AE-41A9-97E7-A63FA62821A2}.Release|x86.ActiveCfg = Release|x86 - {0C075463-49AE-41A9-97E7-A63FA62821A2}.Release|x86.Build.0 = Release|x86 - {0C075463-49AE-41A9-97E7-A63FA62821A2}.Release|x64.ActiveCfg = Release|x64 - {0C075463-49AE-41A9-97E7-A63FA62821A2}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal -{# force new line #} diff --git a/hvcc/generators/c2wwise/templates/vs2015/Hv_{{name}}_Wwise{{type}}RuntimePlugin.vcxproj b/hvcc/generators/c2wwise/templates/vs2015/Hv_{{name}}_Wwise{{type}}RuntimePlugin.vcxproj deleted file mode 100644 index c30b08b6..00000000 --- a/hvcc/generators/c2wwise/templates/vs2015/Hv_{{name}}_Wwise{{type}}RuntimePlugin.vcxproj +++ /dev/null @@ -1,435 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Profile - Win32 - - - Profile - x64 - - - Release - Win32 - - - Release - x64 - - - - Hv_{{name}}_Wwise{{plugin_type}}Plugin - {0C075463-49AE-41A9-97E7-A63FA62821A2} - Heavy - 8.1 - - - C:\Program Files (x86)\Audiokinetic\Wwise {{wwise_version}}\SDK - - - - DynamicLibrary - v{{msbuild_version}} - false - false - Unicode - - - DynamicLibrary - v{{msbuild_version}} - false - false - Unicode - - - DynamicLibrary - v{{msbuild_version}} - false - false - Unicode - - - DynamicLibrary - v{{msbuild_version}} - false - false - Unicode - - - DynamicLibrary - v{{msbuild_version}} - false - false - Unicode - - - DynamicLibrary - v{{msbuild_version}} - false - false - Unicode - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>12.0.30501.0 - - - $(SolutionDir)..\build\win\x86\release\ - $(SolutionDir)\intermediate\win\x86\release\$(ProjectName)\ - false - - - $(SolutionDir)..\build\win\x86\profile\ - $(SolutionDir)intermediate\win\x86\profile\$(ProjectName)\ - false - - - $(SolutionDir)..\build\win\x86\debug\ - $(SolutionDir)intermediate\win\x86\debug\$(ProjectName)\ - false - - - $(SolutionDir)..\build\win\$(Platform)\release\ - $(SolutionDir)intermediate\win\$(Platform)\release\$(ProjectName)\ - false - - - $(SolutionDir)..\build\win\$(Platform)\profile\ - $(SolutionDir)intermediate\win\$(Platform)\profile\$(ProjectName)\ - false - - - $(SolutionDir)..\build\win\$(Platform)\debug\ - $(SolutionDir)intermediate\win\$(Platform)\debug\$(ProjectName)\ - false - - - - _DEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - false - - - Disabled - $(WwiseSDKPath)\include;$(SolutionDir)..\source\include;%(AdditionalIncludeDirectories) - WIN32;_XKEYCHECK_H;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - $(IntDir) - $(IntDir)vc70.pdb - Level3 - - - _DEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - 0x0409 - $(IntDir);$(WwiseSDKPath)\include;$(WwiseSDKPath)\samples\Common;%(AdditionalIncludeDirectories) - - - false - - - Hv_{{name}}_Wwise{{plugin_type}}Engine.lib;HtmlHelp.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName).dll - $(OutDir);%(AdditionalLibraryDirectories) - - - - true - $(IntDir)$(ProjectName).pdb - $(IntDir)$(TargetName).lib - Windows - false - - MachineX86 - - - - - - _DEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - false - X64 - - - Disabled - $(WwiseSDKPath)\include;$(SolutionDir)..\source\include;%(AdditionalIncludeDirectories) - WIN64;HV_SIMD_SSE;_XKEYCHECK_H;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - $(IntDir) - $(IntDir)vc70.pdb - Level3 - ProgramDatabase - - - _DEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - 0x0409 - $(IntDir);$(WwiseSDKPath)\include;$(WwiseSDKPath)\samples\Common;%(AdditionalIncludeDirectories) - - - false - - - Hv_{{name}}_Wwise{{plugin_type}}Engine.lib;HtmlHelp.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName).dll - $(OutDir);%(AdditionalLibraryDirectories) - - - - true - $(IntDir)$(ProjectName).pdb - $(IntDir)$(TargetName).lib - Windows - false - - MachineX64 - - - - - - _DEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - false - - - MaxSpeed - true - $(WwiseSDKPath)\include;$(SolutionDir)..\source\include;%(AdditionalIncludeDirectories) - WIN32;_XKEYCHECK_H;%(PreprocessorDefinitions) - true - MultiThreaded - false - StreamingSIMDExtensions2 - - $(IntDir)vc70.pdb - Level3 - ProgramDatabase - Sync - - - NDEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - 0x0409 - $(IntDir);$(WwiseSDKPath)\include;$(WwiseSDKPath)\samples\Common;%(AdditionalIncludeDirectories) - - - false - - - Hv_{{name}}_Wwise{{plugin_type}}Engine.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName).dll - $(OutDir);%(AdditionalLibraryDirectories) - - - true - $(IntDir)$(ProjectName).pdb - $(IntDir)$(TargetName).lib - Windows - true - true - false - - MachineX86 - - - - - - false - NDEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - X64 - - - MaxSpeed - true - $(WwiseSDKPath)\include;$(SolutionDir)..\source\include;%(AdditionalIncludeDirectories) - WIN64;_XKEYCHECK_H;HV_SIMD_SSE;%(PreprocessorDefinitions) - true - MultiThreaded - false - StreamingSIMDExtensions2 - - $(IntDir)vc70.pdb - Level3 - ProgramDatabase - Sync - - - NDEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - 0x0409 - $(IntDir);$(WwiseSDKPath)\include;$(WwiseSDKPath)\samples\Common;%(AdditionalIncludeDirectories) - - - false - - - Hv_{{name}}_Wwise{{plugin_type}}Engine.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName).dll - $(OutDir);%(AdditionalLibraryDirectories) - - true - $(IntDir)$(ProjectName).pdb - $(IntDir)$(TargetName).lib - Windows - true - true - false - - MachineX64 - - - - - - NDEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - false - - - Full - true - $(WwiseSDKPath)\include;$(SolutionDir)..\source\include;%(AdditionalIncludeDirectories) - WIN32;_XKEYCHECK_H;%(PreprocessorDefinitions) - true - MultiThreaded - false - StreamingSIMDExtensions2 - - $(IntDir)vc70.pdb - Level3 - ProgramDatabase - Sync - - - NDEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - 0x0409 - $(IntDir);$(WwiseSDKPath)\include;$(WwiseSDKPath)\samples\Common;%(AdditionalIncludeDirectories) - - - false - - - Hv_{{name}}_Wwise{{plugin_type}}Engine.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName).dll - $(OutDir);%(AdditionalLibraryDirectories) - - No - false - $(IntDir)$(ProjectName).pdb - $(IntDir)$(TargetName).lib - Windows - true - true - false - - MachineX86 - - - - - - NDEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - false - X64 - - - Full - true - $(WwiseSDKPath)\include;$(SolutionDir)..\source\include;%(AdditionalIncludeDirectories) - WIN64;HV_SIMD_SSE;_XKEYCHECK_H;%(PreprocessorDefinitions) - true - MultiThreaded - false - - $(IntDir)vc70.pdb - Level3 - ProgramDatabase - Sync - - - NDEBUG;_XKEYCHECK_H;%(PreprocessorDefinitions) - 0x0409 - $(IntDir);$(WwiseSDKPath)\include;$(WwiseSDKPath)\samples\Common;%(AdditionalIncludeDirectories) - - - false - - - Hv_{{name}}_Wwise{{plugin_type}}Engine.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName).dll - $(OutDir);%(AdditionalLibraryDirectories) - - No - false - $(IntDir)$(ProjectName).pdb - $(IntDir)$(TargetName).lib - Windows - true - true - false - - MachineX64 - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hvcc/generators/c2wwise/templates/xcode/Info.plist b/hvcc/generators/c2wwise/templates/xcode/Info.plist deleted file mode 100644 index d9be5b5b..00000000 --- a/hvcc/generators/c2wwise/templates/xcode/Info.plist +++ /dev/null @@ -1,28 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - NSHumanReadableCopyright - Copyright © 2016 Enzien Audio. All rights reserved. - NSPrincipalClass - - - diff --git a/hvcc/generators/c2wwise/templates/xcode/Plugin.xcodeproj/project.pbxproj b/hvcc/generators/c2wwise/templates/xcode/Plugin.xcodeproj/project.pbxproj deleted file mode 100644 index 3fbd8360..00000000 --- a/hvcc/generators/c2wwise/templates/xcode/Plugin.xcodeproj/project.pbxproj +++ /dev/null @@ -1,617 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - {%- for f in files if f.endswith((".h", ".hpp")) %} - {{f|xcode_build}} /* {{f}} in Headers */ = {isa = PBXBuildFile; fileRef = {{f|xcode_fileref}} /* {{f}} */; }; - {%- endfor %} - {%- for f in files if f.endswith((".c", ".cpp")) %} - {{f|xcode_build}} /* {{f}} in Sources */ = {isa = PBXBuildFile; fileRef = {{f|xcode_fileref}} /* {{f}} */; }; - {%- endfor %} - D8331EF81CE128BD003BFBA7 /* Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = D8331ED01CE128BD003BFBA7 /* Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h */; }; - D8331EF91CE128BD003BFBA7 /* Hv_{{name}}_WwisePluginIDs.h in Headers */ = {isa = PBXBuildFile; fileRef = D8331ED11CE128BD003BFBA7 /* Hv_{{name}}_WwisePluginIDs.h */; }; - D8331F1C1CE128BD003BFBA7 /* Hv_{{name}}_Wwise{{plugin_type}}PluginEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = D8331EEC1CE128BD003BFBA7 /* Hv_{{name}}_Wwise{{plugin_type}}PluginEngine.h */; }; - D8331F201CE1295C003BFBA7 /* Hv_{{name}}_Wwise{{plugin_type}}PluginEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D8331EEB1CE128BD003BFBA7 /* Hv_{{name}}_Wwise{{plugin_type}}PluginEngine.cpp */; }; - D8331F1F1CE128BD003BFBA7 /* Hv_{{name}}_WwisePluginEngineParams.h in Headers */ = {isa = PBXBuildFile; fileRef = D8331EEE1CE128BD003BFBA7 /* Hv_{{name}}_WwisePluginEngineParams.h */; }; - D8331F1E1CE128BD003BFBA7 /* Hv_{{name}}_WwisePluginEngineParams.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D8331EED1CE128BD003BFBA7 /* Hv_{{name}}_WwisePluginEngineParams.cpp */; }; - D8857DFD1CE1576C00A7B30F /* Hv_{{name}}_WwisePluginRegister.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D8331EE91CE128BD003BFBA7 /* Hv_{{name}}_WwisePluginRegister.cpp */; }; - D8857DF31CE1525C00A7B30F /* Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = D8331ED01CE128BD003BFBA7 /* Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h */; }; - D8857DFE1CE1578D00A7B30F /* libHv_{{name}}_Wwise{{plugin_type}}Engine.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D8C486EF1CDCD6B9000B3BCC /* libHv_{{name}}_Wwise{{plugin_type}}Engine.a */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - D8857DFF1CE1595E00A7B30F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D8C486DA1CDCD5C1000B3BCC /* Project object */; - proxyType = 1; - remoteGlobalIDString = D8C486EE1CDCD6B9000B3BCC; - remoteInfo = Hv_{{name}}_Wwise{{plugin_type}}Engine; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - D8857DF21CE1524800A7B30F /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 12; - dstPath = ""; - dstSubfolderSpec = 16; - files = ( - D8857DF31CE1525C00A7B30F /* Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D8857E071CE15D4900A7B30F /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 16; - files = ( - D8857DF31CE1525C00A7B30F /* Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - {%- for f in files if f.endswith((".h", ".hpp")) %} - {{f|xcode_fileref}} /* {{f}} */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = {{f}}; path = ../source/heavy/{{f}}; sourceTree = SOURCE_ROOT; }; - {%- endfor %} - {%- for f in files if f.endswith(".c") %} - {{f|xcode_fileref}} /* {{f}} */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = {{f}}; path = ../source/heavy/{{f}}; sourceTree = SOURCE_ROOT; }; - {%- endfor %} - {%- for f in files if f.endswith(".cpp") %} - {{f|xcode_fileref}} /* {{f}} */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = {{f}}; path = ../source/heavy/{{f}}; sourceTree = SOURCE_ROOT; }; - {%- endfor %} - D8331ED01CE128BD003BFBA7 /* Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h; path = ../source/include/Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h; sourceTree = SOURCE_ROOT; }; - D8331ED11CE128BD003BFBA7 /* Hv_{{name}}_WwisePluginIDs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Hv_{{name}}_WwisePluginIDs.h; path = ../source/include/Hv_{{name}}_WwisePluginIDs.h; sourceTree = SOURCE_ROOT; }; - D8331EEC1CE128BD003BFBA7 /* Hv_{{name}}_Wwise{{plugin_type}}PluginEngine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Hv_{{name}}_Wwise{{plugin_type}}PluginEngine.h; sourceTree = ""; }; - D8331EEE1CE128BD003BFBA7 /* Hv_{{name}}_WwisePluginEngineParams.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Hv_{{name}}_WwisePluginEngineParams.h; sourceTree = ""; }; - D8331EED1CE128BD003BFBA7 /* Hv_{{name}}_WwisePluginEngineParams.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Hv_{{name}}_WwisePluginEngineParams.cpp; sourceTree = ""; }; - D8331EEB1CE128BD003BFBA7 /* Hv_{{name}}_Wwise{{plugin_type}}PluginEngine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Hv_{{name}}_Wwise{{plugin_type}}PluginEngine.cpp; sourceTree = ""; }; - D8331EE91CE128BD003BFBA7 /* Hv_{{name}}_WwisePluginRegister.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Hv_{{name}}_WwisePluginRegister.cpp; sourceTree = ""; }; - D8857DF91CE1554F00A7B30F /* Hv_{{name}}_Wwise{{plugin_type}}Plugin.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = Hv_{{name}}_Wwise{{plugin_type}}Plugin.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; - D8857E091CE15D4900A7B30F /* libHv_{{name}}_Wwise{{plugin_type}}Plugin.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libHv_{{name}}_Wwise{{plugin_type}}Plugin.a; sourceTree = BUILT_PRODUCTS_DIR; }; - D8C486EF1CDCD6B9000B3BCC /* libHv_{{name}}_Wwise{{plugin_type}}Engine.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libHv_{{name}}_Wwise{{plugin_type}}Engine.a; sourceTree = BUILT_PRODUCTS_DIR; }; - D8C486E51CDCD5C1000B3BCC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D8851B631CE1271600D6BE37 /* wwise.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = wwise.xcconfig; sourceTree = SOURCE_ROOT; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - D8857DF61CE1554F00A7B30F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D8857DFE1CE1578D00A7B30F /* libHv_{{name}}{{name}}_Wwise{{plugin_type}}Engine.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D8857E061CE15D4900A7B30F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D8C486EC1CDCD6B9000B3BCC /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - D8331EC61CE128BD003BFBA7 /* source */ = { - isa = PBXGroup; - children = ( - D8331ECF1CE128BD003BFBA7 /* include */, - D8331ED31CE128BD003BFBA7 /* heavy */, - D8331EE81CE128BD003BFBA7 /* runtime */, - D8331EEA1CE128BD003BFBA7 /* source_engine */, - ); - name = source; - path = ../source; - sourceTree = SOURCE_ROOT; - }; - D8331ECF1CE128BD003BFBA7 /* include */ = { - isa = PBXGroup; - children = ( - D8331ED01CE128BD003BFBA7 /* Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h */, - D8331ED11CE128BD003BFBA7 /* Hv_{{name}}_WwisePluginIDs.h */, - ); - name = include; - path = ../source/include; - sourceTree = SOURCE_ROOT; - }; - D8331ED31CE128BD003BFBA7 /* heavy */ = { - isa = PBXGroup; - children = ( - {%- for f in files %} - {{f|xcode_fileref}} /* {{f}} */, - {%- endfor %} - ); - name = heavy; - path = ../source/heavy; - sourceTree = SOURCE_ROOT; - }; - D8331EE81CE128BD003BFBA7 /* runtime */ = { - isa = PBXGroup; - children = ( - D8331EE91CE128BD003BFBA7 /* Hv_{{name}}_WwisePluginRegister.cpp */, - ); - path = runtime; - sourceTree = ""; - }; - D8331EEA1CE128BD003BFBA7 /* source_engine */ = { - isa = PBXGroup; - children = ( - D8331EEB1CE128BD003BFBA7 /* Hv_{{name}}_Wwise{{plugin_type}}PluginEngine.cpp */, - D8331EEC1CE128BD003BFBA7 /* Hv_{{name}}_Wwise{{plugin_type}}PluginEngine.h */, - D8331EED1CE128BD003BFBA7 /* Hv_{{name}}_WwisePluginEngineParams.cpp */, - D8331EEE1CE128BD003BFBA7 /* Hv_{{name}}_WwisePluginEngineParams.h */, - ); - path = engine; - sourceTree = ""; - }; - D8C486D91CDCD5C1000B3BCC = { - isa = PBXGroup; - children = ( - D8331EC61CE128BD003BFBA7 /* source */, - D8C486E51CDCD5C1000B3BCC /* Info.plist */, - D8851B631CE1271600D6BE37 /* wwise.xcconfig */, - D8C486E31CDCD5C1000B3BCC /* Products */, - ); - sourceTree = ""; - }; - D8C486E31CDCD5C1000B3BCC /* Products */ = { - isa = PBXGroup; - children = ( - D8C486EF1CDCD6B9000B3BCC /* libHv_{{name}}_Wwise{{plugin_type}}Engine.a */, - D8857DF91CE1554F00A7B30F /* Hv_{{name}}_Wwise{{plugin_type}}Plugin.dylib */, - D8857E091CE15D4900A7B30F /* libHv_{{name}}_Wwise{{plugin_type}}Plugin.a */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - D8857DF71CE1554F00A7B30F /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D8C486ED1CDCD6B9000B3BCC /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - {%- for f in files if f.endswith((".h", ".hpp")) %} - {{f|xcode_build}} /* {{f}} in Headers */, - {%- endfor %} - D8331EF81CE128BD003BFBA7 /* Hv_{{name}}_Wwise{{plugin_type}}PluginFactory.h in Headers */, - D8331EF91CE128BD003BFBA7 /* Hv_{{name}}_WwisePluginIDs.h in Headers */, - D8331F1C1CE128BD003BFBA7 /* Hv_{{name}}_Wwise{{plugin_type}}PluginEngine.h in Headers */, - D8331F1F1CE128BD003BFBA7 /* Hv_{{name}}_WwisePluginEngineParams.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - D8857DF81CE1554F00A7B30F /* Hv_{{name}}_Wwise{{plugin_type}}Plugin */ = { - isa = PBXNativeTarget; - buildConfigurationList = D8857DFC1CE1554F00A7B30F /* Build configuration list for PBXNativeTarget "Hv_{{name}}_Wwise{{plugin_type}}Plugin" */; - buildPhases = ( - D8857DF51CE1554F00A7B30F /* Sources */, - D8857DF61CE1554F00A7B30F /* Frameworks */, - D8857DF71CE1554F00A7B30F /* Headers */, - D8857E041CE15A3400A7B30F /* ShellScript */, - ); - buildRules = ( - ); - dependencies = ( - D8857E001CE1595E00A7B30F /* PBXTargetDependency */, - ); - name = Hv_{{name}}_Wwise{{plugin_type}}Plugin; - productName = Hv_{{name}}_Wwise{{plugin_type}}Plugin; - productReference = D8857DF91CE1554F00A7B30F /* Hv_{{name}}_Wwise{{plugin_type}}Plugin.dylib */; - productType = "com.apple.product-type.library.dynamic"; - }; - D8857E081CE15D4900A7B30F /* Hv_{{name}}_Wwise{{plugin_type}}Plugin_iOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = D8857E0F1CE15D4A00A7B30F /* Build configuration list for PBXNativeTarget "Hv_{{name}}_Wwise{{plugin_type}}Plugin_iOS" */; - buildPhases = ( - D8857E051CE15D4900A7B30F /* Sources */, - D8857E061CE15D4900A7B30F /* Frameworks */, - D8857E071CE15D4900A7B30F /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Hv_{{name}}_Wwise{{plugin_type}}Plugin_iOS; - productName = Hv_{{name}}_Wwise{{plugin_type}}Plugin_iOS; - productReference = D8857E091CE15D4900A7B30F /* libHv_{{name}}_Wwise{{plugin_type}}Plugin.a */; - productType = "com.apple.product-type.library.static"; - }; - D8C486EE1CDCD6B9000B3BCC /* Hv_{{name}}_Wwise{{plugin_type}}Engine */ = { - isa = PBXNativeTarget; - buildConfigurationList = D8C486F21CDCD6B9000B3BCC /* Build configuration list for PBXNativeTarget "Hv_{{name}}_Wwise{{plugin_type}}Engine" */; - buildPhases = ( - D8C486EB1CDCD6B9000B3BCC /* Sources */, - D8C486EC1CDCD6B9000B3BCC /* Frameworks */, - D8C486ED1CDCD6B9000B3BCC /* Headers */, - D8857DF21CE1524800A7B30F /* CopyFiles */, - D8857DF41CE152A100A7B30F /* ShellScript */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Hv_{{name}}_Wwise{{plugin_type}}Engine; - productName = Hv_{{name}}_Wwise{{plugin_type}}Engine; - productReference = D8C486EF1CDCD6B9000B3BCC /* libHv_{{name}}_Wwise{{plugin_type}}Engine.a */; - productType = "com.apple.product-type.library.static"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - D8C486DA1CDCD5C1000B3BCC /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0730; - ORGANIZATIONNAME = "Enzien Audio"; - TargetAttributes = { - D8857DF81CE1554F00A7B30F = { - CreatedOnToolsVersion = 7.3; - }; - D8857E081CE15D4900A7B30F = { - CreatedOnToolsVersion = 7.3; - }; - D8C486EE1CDCD6B9000B3BCC = { - CreatedOnToolsVersion = 7.3; - }; - }; - }; - buildConfigurationList = D8C486DD1CDCD5C1000B3BCC /* Build configuration list for PBXProject "Hv_{{name}}_WwisePlugin" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = D8C486D91CDCD5C1000B3BCC; - productRefGroup = D8C486E31CDCD5C1000B3BCC /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - D8C486EE1CDCD6B9000B3BCC /* Hv_{{name}}_Wwise{{plugin_type}}Engine */, - D8857DF81CE1554F00A7B30F /* Hv_{{name}}_Wwise{{plugin_type}}Plugin */, - D8857E081CE15D4900A7B30F /* Hv_{{name}}_Wwise{{plugin_type}}Plugin_iOS */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXShellScriptBuildPhase section */ - D8857DF41CE152A100A7B30F /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = ""; - }; - D8857E041CE15A3400A7B30F /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "$(CONFIGURATION_BUILD_DIR)/libHv_{{name}}_Wwise{{plugin_type}}Plugin.dylib", - ); - outputPaths = ( - "$(CONFIGURATION_BUILD_DIR)/libHv_{{name}}_Wwise{{plugin_type}}Plugin.bundle", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "echo \"Copying ${SCRIPT_INPUT_FILE_0} to ${SCRIPT_OUTPUT_FILE_0}\"\ncp ${SCRIPT_INPUT_FILE_0} ${SCRIPT_OUTPUT_FILE_0}"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - D8857DF51CE1554F00A7B30F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D8857DFD1CE1576C00A7B30F /* Hv_{{name}}_WwisePluginRegister.cpp in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D8857E051CE15D4900A7B30F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - {%- for f in files if f.endswith((".c", ".cpp")) %} - {{f|xcode_build}} /* {{f}} in Sources */, - {%- endfor %} - D8331F1E1CE128BD003BFBA7 /* Hv_{{name}}_Wwise{{plugin_type}}PluginEngine.cpp in Sources */, - D8331F201CE1295C003BFBA7 /* Hv_{{name}}_WwisePluginEngineParams.cpp in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D8C486EB1CDCD6B9000B3BCC /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - {%- for f in files if f.endswith((".c", ".cpp")) %} - {{f|xcode_build}} /* {{f}} in Sources */, - {%- endfor %} - D8331F1E1CE128BD003BFBA7 /* Hv_{{name}}_WwisePluginEngineParams.cpp in Sources */, - D8331F201CE1295C003BFBA7 /* Hv_{{name}}_Wwise{{plugin_type}}PluginEngine.cpp in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - D8857E001CE1595E00A7B30F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = D8C486EE1CDCD6B9000B3BCC /* Hv_{{name}}_Wwise{{plugin_type}}Engine */; - targetProxy = D8857DFF1CE1595E00A7B30F /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - D8857DFA1CE1554F00A7B30F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/../build/macos/$(ARCHS)/$(CONFIGURATION)"; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - EXECUTABLE_PREFIX = "lib"; - HEADER_SEARCH_PATHS = "$(WWISE_SDK_PATH)"; - LIBRARY_SEARCH_PATHS = "$(CONFIGURATION_BUILD_DIR)/"; - OTHER_CFLAGS = ( - "-msse4.1", - "-ffast-math", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - D8857DFB1CE1554F00A7B30F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/../build/macos/$(ARCHS)/$(CONFIGURATION)"; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - EXECUTABLE_PREFIX = "lib"; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - HEADER_SEARCH_PATHS = "$(WWISE_SDK_PATH)"; - LIBRARY_SEARCH_PATHS = "$(CONFIGURATION_BUILD_DIR)/"; - OTHER_CFLAGS = ( - "-DNDEBUG", - "-msse4.1", - "-ffast-math", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; - D8857E101CE15D4A00A7B30F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = ( - "$(ARCHS_STANDARD)", - armv7s, - ); - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/../build/ios/$(ARCHS)/$(CONFIGURATION)"; - ENABLE_BITCODE = YES; - HEADER_SEARCH_PATHS = "$(WWISE_SDK_PATH)"; - IPHONEOS_DEPLOYMENT_TARGET = 9.3; - OTHER_LDFLAGS = "-ObjC"; - PRODUCT_NAME = Hv_{{name}}_Wwise{{plugin_type}}Plugin; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - D8857E111CE15D4A00A7B30F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = ( - "$(ARCHS_STANDARD)", - armv7s, - ); - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/../build/ios/$(ARCHS)/$(CONFIGURATION)"; - ENABLE_BITCODE = YES; - HEADER_SEARCH_PATHS = "$(WWISE_SDK_PATH)"; - IPHONEOS_DEPLOYMENT_TARGET = 9.3; - OTHER_LDFLAGS = "-ObjC"; - PRODUCT_NAME = Hv_{{name}}_Wwise{{plugin_type}}Plugin; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - D8C486E61CDCD5C1000B3BCC /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D8851B631CE1271600D6BE37 /* wwise.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - }; - name = Debug; - }; - D8C486E71CDCD5C1000B3BCC /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D8851B631CE1271600D6BE37 /* wwise.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = c11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = macosx; - }; - name = Release; - }; - D8C486F01CDCD6B9000B3BCC /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D8851B631CE1271600D6BE37 /* wwise.xcconfig */; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/../build/macos/$(ARCHS)/$(CONFIGURATION)"; - CONFIGURATION_TEMP_DIR = "$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; - EXECUTABLE_PREFIX = lib; - GCC_PREPROCESSOR_DEFINITIONS = ""; - HEADER_SEARCH_PATHS = "$(WWISE_SDK_PATH)"; - OBJROOT = "$(SYMROOT)"; - OTHER_CFLAGS = ( - "-msse4.1", - "-ffast-math", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - SYMROOT = build; - }; - name = Debug; - }; - D8C486F11CDCD6B9000B3BCC /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D8851B631CE1271600D6BE37 /* wwise.xcconfig */; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/../build/macos/$(ARCHS)/$(CONFIGURATION)"; - CONFIGURATION_TEMP_DIR = "$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; - EXECUTABLE_PREFIX = lib; - GCC_PREPROCESSOR_DEFINITIONS = ""; - HEADER_SEARCH_PATHS = "$(WWISE_SDK_PATH)"; - OBJROOT = "$(SYMROOT)"; - OTHER_CFLAGS = ( - "-DNDEBUG", - "-msse4.1", - "-ffast-math", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - SYMROOT = build; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - D8857DFC1CE1554F00A7B30F /* Build configuration list for PBXNativeTarget "Hv_{{name}}_Wwise{{plugin_type}}Plugin" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D8857DFA1CE1554F00A7B30F /* Debug */, - D8857DFB1CE1554F00A7B30F /* Release */, - ); - defaultConfigurationIsVisible = 0; - }; - D8857E0F1CE15D4A00A7B30F /* Build configuration list for PBXNativeTarget "Hv_{{name}}_Wwise{{plugin_type}}Plugin_iOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D8857E101CE15D4A00A7B30F /* Debug */, - D8857E111CE15D4A00A7B30F /* Release */, - ); - defaultConfigurationIsVisible = 0; - }; - D8C486DD1CDCD5C1000B3BCC /* Build configuration list for PBXProject "Hv_{{name}}_WwisePlugin" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D8C486E61CDCD5C1000B3BCC /* Debug */, - D8C486E71CDCD5C1000B3BCC /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D8C486F21CDCD6B9000B3BCC /* Build configuration list for PBXNativeTarget "Hv_{{name}}_Wwise{{plugin_type}}Engine" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D8C486F01CDCD6B9000B3BCC /* Debug */, - D8C486F11CDCD6B9000B3BCC /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = D8C486DA1CDCD5C1000B3BCC /* Project object */; -} diff --git a/hvcc/generators/c2wwise/templates/xcode/wwise.xcconfig b/hvcc/generators/c2wwise/templates/xcode/wwise.xcconfig deleted file mode 100644 index 8043b4e6..00000000 --- a/hvcc/generators/c2wwise/templates/xcode/wwise.xcconfig +++ /dev/null @@ -1 +0,0 @@ -WWISE_SDK_PATH = "/Applications/Audiokinetic/Wwise {{wwise_version}}/SDK/include" diff --git a/hvcc/generators/c2wwise/templates/{{name}}Config.h b/hvcc/generators/c2wwise/templates/{{name}}Config.h new file mode 100644 index 00000000..682a9467 --- /dev/null +++ b/hvcc/generators/c2wwise/templates/{{name}}Config.h @@ -0,0 +1,12 @@ +{{copyright}} + +#ifndef {{name}}Config_H +#define {{name}}Config_H + +namespace {{name}}Config +{ + static const unsigned short CompanyID = 64; + static const unsigned short PluginID = {{plugin_id}}; +} + +#endif // {{name}}Config_H diff --git a/hvcc/generators/ir2c/static/HvUtils.h b/hvcc/generators/ir2c/static/HvUtils.h index 3be2432e..2186f547 100644 --- a/hvcc/generators/ir2c/static/HvUtils.h +++ b/hvcc/generators/ir2c/static/HvUtils.h @@ -201,7 +201,9 @@ // Export and Inline #if HV_WIN #define HV_EXPORT __declspec(dllexport) +#ifndef __cplusplus // MSVC doesn't like redefining "inline" keyword #define inline __inline +#endif #define HV_FORCE_INLINE __forceinline #else #define HV_EXPORT