generated from cfillion/reapack-repository-template
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.xml
133 lines (132 loc) · 16.4 KB
/
index.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?xml version="1.0" encoding="utf-8"?>
<index version="1" name="ReaperToWwise" commit="7d912ae0e3bf9d922089a34a696b95f4e02f2f1d">
<category name="MH_ReaperToWwise">
<reapack name="ReaperToWwise.lua" type="script" desc="ReaperToWwise">
<metadata>
<link rel="website">https://github.com/mhasselbalch/ReaperToWwise</link>
</metadata>
<version name="1.0.0" author="Marc Hasselbalch" time="2025-01-03T05:24:47Z">
<changelog><![CDATA[First release]]></changelog>
<source main="main">https://github.com/mhasselbalch/ReaperToWwise/raw/c8edb08c8be97d4028a64db327da936c0f08e6b2/MH_ReaperToWwise/ReaperToWwise.lua</source>
</version>
<version name="1.0.1" author="Marc Hasselbalch" time="2025-01-04T20:26:35Z">
<changelog><![CDATA[Fixed RTPC evaluation bug]]></changelog>
<source main="main">https://github.com/mhasselbalch/ReaperToWwise/raw/7d912ae0e3bf9d922089a34a696b95f4e02f2f1d/MH_ReaperToWwise/ReaperToWwise.lua</source>
</version>
</reapack>
</category>
<metadata>
<description><![CDATA[{\rtf1\ansi\deff0{\fonttbl{\f0 \fswiss Helvetica;}{\f1 \fmodern Courier;}}
{\colortbl;\red255\green0\blue0;\red0\green0\blue255;}
\widowctrl\hyphauto
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel0 \b \fs36 ReaperToWwise 1.0\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel1 \b \fs32 Documentation\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel3 \b \fs24 by Marc Hasselbalch\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel3 \b \fs24 December 2024\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel1 \b \fs32 What is ReaperToWwise?\par}
{\pard \ql \f0 \sa180 \li0 \fi0 ReaperToWwise is a game audio implementation tool that enables you to post events and set game syncs in an open Wwise project from the comfort of the Reaper timeline - without needing to have a game engine running.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 You are able to post events, set switches, states, triggers and RTPCs with the use of empty items by writing text commands in the Notes field as well as being able to drive RTPCs with automation envelopes.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 It\u8217's basically a more featurefull, timeline-version of a Soundcaster session.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel1 \b \fs32 Why does it exist?\par}
{\pard \ql \f0 \sa180 \li0 \fi0 The tool was primarily born out of the need for making dynamic Wwise setups for linear videos for use in game audio showreels, to more thoroughly showcase proficiency in Wwise.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Over time it became more and more obvious that making strictly linear audio redesigns for an ultimately interactive medium wasn\u8217't doing me much good. But what else do you do when you haven\u8217't much in the way of fleshed out and/or released games to showcase? You record some gameplay, remove the audio and redesign the entire sequence from scratch.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 There is obviously nothing wrong with this approach, and, needless to say, this is still a dynamic, interactive audio setup for a linear video, but it should better showcase what is needed.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 ReaperToWwise will allow you to trigger events and set game syncs in a Wwise project, which would mimic the calls being sent via code from the game engine.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 So not only does this tool enable you to better showcase your proficiency in Wwise, but there is also a few other obvious uses, which could be:\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 1.\tx360\tab being able to quickly prototype a setup - or entire systems - in, say, pre-production, before an engine is set up.\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 2.\tx360\tab showcase system functionality to other team members or departments before moving further into implementation\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 3.\tx360\tab spot cinematics or similar sequences\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 4.\tx360\tab and most likely other interesting uses I haven\u8217't thought of\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel1 \b \fs32 Where can I download it?\par}
{\pard \ql \f0 \sa180 \li0 \fi0 You can download it from ReaPack within Reaper - or directly from the Github repository.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 In Reaper, go to Extensions > ReaPack > Import repositories... > Paste in this URL: https://raw.githubusercontent.com/mhasselbalch/ReaperToWwise/master/index.xml\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Then go to ReaPack > Manage repositories > Find ReaperToWwise and double click > and then finally Install/Update ReaperToWwise.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel1 \b \fs32 What is needed to make it work?\par}
{\pard \ql \f0 \sa180 \li0 \fi0 ReaperToWwise relies on the dedicated work of others and has a number of pre-requisites. Please read carefully.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel1 \b \fs32 Pre-requisites:\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel3 \b \fs24 Reaper DAW\par}
{\pard \ql \f0 \sa180 \li0 \fi0 https://www.reaper.fm/\par}
{\pard \ql \f0 \sa180 \li0 \fi0 {\b Note: The tool should be compatible with most Reaper versions, where the Lua interpreter is based on Lua 5.3 (Reaper v.6.x and earlier according to their website).}\par}
{\pard \ql \f0 \sa180 \li0 \fi0 While Reaper v7 introduced Lua 5.4 functionality, I haven't made use of any of it up until now.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel3 \b \fs24 Wwise 2019.1+ (required for installing ReaWwise)\par}
{\pard \ql \f0 \sa180 \li0 \fi0 https://www.audiokinetic.com/en/products/wwise/\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel3 \b \fs24 ReaWwise (can be installed via ReaPack inside of Reaper)\par}
{\pard \ql \f0 \sa180 \li0 \fi0 https://blog.audiokinetic.com/en/reawwise-connecting-reaper-and-wwise/\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel3 \b \fs24 RealmGui (can be installed via ReaPack inside of Reaper).\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel1 \b \fs32 More details:\par}
{\pard \ql \f0 \sa180 \li0 \fi0 ReaperToWwise relies primarily on the Reaper extension called ReaWwise by Audiokinetic, which is described as an extension that {\i \u8220"streamlines the transfer of audio assets from your REAPER project into Wwise. The extension also allows you to create complex object hierarchies in Wwise without leaving the comfort of your REAPER project!\u8221".}\par}
{\pard \ql \f0 \sa180 \li0 \fi0 https://www.audiokinetic.com/en/blog/reawwise-connecting-reaper-and-wwise/\par}
{\pard \ql \f0 \sa180 \li0 \fi0 A byproduct of ReaWwise is that it exposes raw WAAPI (Wwise Authoring API) functions to Lua inside of Reaper, which is how the communication between Reaper and Wwise is done.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel1 \b \fs32 Functionality:\par}
{\pard \ql \f0 \sa180 \li0 \fi0 The tool works by parsing text commands written inside of the \u8216'Notes\u8217' field of empty items.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 You add an empty item to the timeline, double click it and type in event or game sync call commands and it will be triggered when the Reaper playhead passes the item\u8217's start position.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 You are also able to drive RTPCs with an automation envelope.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 See \u8220"The tool window\u8221" for all the available commands and RTPC information.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel1 \b \fs32 The tool window:\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Here is a run-through of the elements in the main tool window.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel2 \b \fs28 \u8221"Connect to port\u8221"\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Opens a pop-up window where you can type in the desired network communication port between Reaper and Wwise.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Choose a non-conflicting port.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Check the Wwise network settings at Project -> Project Settings -> Network \u8594 ? "Game Discovery Broadcast Port (game side)".\par}
{\pard \ql \f0 \sa180 \li0 \fi0 The main window status should change from \u8220"Not connected\u8221" to \u8220"Connected\u8221" if communcation has been established.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 {\b NOTE: If the tool crashes, there is a chance the port will still be occupied even though you close and reload the script. In this case, the tool will auto-input Wwise\u8217's default port number.}\par}
{\pard \ql \f0 \sa180 \li0 \fi0 If everything else fails, close down Reaper and Wwise and try again from scratch.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel2 \b \fs28 \u8221"Help\u8221"\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Opens up a separate window with a few helpful notes on using the tool, including the syntax for the available commands.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 The commands are:\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Events e/eventName\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Triggers\line t/triggerName\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Switches\line sw/switchGroup/switchName\par}
{\pard \ql \f0 \sa180 \li0 \fi0 States\line st/stateGroup/stateName\par}
{\pard \ql \f0 \sa180 \li0 \fi0 RTPCs\line r/rtpcName/rtpcValue\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel2 \b \fs28 \u8221"Add RTPC lane\u8221"\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Opens a pop-up window where you type in the name of the RTPC (as it appears exactly in Wwise) and the minimum and maximum values (as you have defined them in Wwise).\par}
{\pard \ql \f0 \sa180 \li0 \fi0 A new automation lane is added to the RTPC track at the bottom of the track list and an automatically generated JSFX plugin is added to the RTPC track, which holds a single slider and an automatically created envelope lane for that slider.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 {\b NOTE: You are not easily able to rename an RTPC after the JSFX plugin has been created - besides opening the script editor inside of Reaper for the given JSFX plugin and typing it on there. But if you don\u8217't wish to do that, I suggest you add a new RTPC track with the desired name, transfer over the automation data to the new track and remove the old JSFX plugin from the FX list of the RTPC track.}\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel2 \b \fs28 \u8221"Add empty item\u8221"\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Adds an empty item on the timeline.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 {\b NOTE: You can select a required chunk of time on the timeline and then add the empty item, which will be the length of the selected time. Otherwise it will create an empty item with a considerably too long length.}\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel2 \b \fs28 \u8221"Post \u8216'StopAll\u8217' event\u8221"\par}
{\pard \ql \f0 \sa180 \li0 \fi0 A manual way to call the \u8220"StopAll\u8221" event (which is assumed that you have set up in Wwise). Think of it as a manual panic button.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel2 \b \fs28 \u8221"Run on transport play\u8221"\par}
{\pard \ql \f0 \sa180 \li0 \fi0 With this checked, the script will run and do all the necessary checks when the Reaper transport is started. It is required for the tool to work.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 If you need to go to a different Reaper project and work (and use the transport) before coming back to the ReaperToWwise session, you need to uncheck this, otherwise it will auto-create the RTPC track in the other project, try to look up events and RTPCs and the script might crash, which will require you to open the script again from the desired session.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel2 \b \fs28 \u8221"\u8217'StopAll\u8217' on transport stop\u8221"\par}
{\pard \ql \f0 \sa180 \li0 \fi0 This will post the event named \u8220"StopAll\u8221" to Wwise, which is assumed that you have created, when the transport has stopped, to make sure no audio is playing in Wwise once you stop the Reaper transport.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 The event should be of the type \u8220"Stop All\u8221" and be named exactly StopAll. You are free to use the tool without setting this up, but it is recommended for a better workflow.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel2 \b \fs28 \u8220"RTPC evaluation speed\u8221"\par}
{\pard \ql \f0 \sa180 \li0 \fi0 This slider will, when set to a value more than 10, slow down the polling of values that are sent with the RTPCs to avoid overloading the WAAPI with too much information, which will significantly increase the amount of CPU load from Wwise and slow down both Reaper, Wwise and the rest of your machine.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 The default value should in most cases be fine, but you are free to increase this if the need arises\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel1 \b \fs32 Known issues and limitations:\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel2 \b \fs28 Important notes on handling JSFX plugins:\par}
{\pard \ql \f0 \sa180 \li0 \fi0 I\u8217've written the tool in such a way that it automatically creates a JSFX plugin with a single slider for you to automate for driving RTPCs. It will be created from a template and will be placed inside\par}
{\pard \ql \f0 \sa180 \li0 \fi0 {\i [your Reaper resource folderpath]/Effects/MH_ReaScripts}\par}
{\pard \ql \f0 \sa180 \li0 \fi0 So everytime you create a new RTPC lane (and JSFX plugin by extension) it will appear here.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Removing the JSFX plugin from the FX list inside of Reaper does not remove the file from the folder. There is currently no way to purge the folder without having to manually go in an delete specific ones. Luckily they are very, very light files, so it hopefully shouldn\u8217't have in impact on your storage situation.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Even more important, it means that you are able to, without knowing it, overwriting individual JSFX plugins if you, say, have an RTPC JSFX plugin with the same name in multiple projects. If the RTPC named \u8220"CombatIntensity\u8221" has a value of 0 to 1 at first in project 1, and you create project 2 and add an RTPC with the exact same name and give it the values 0 to 100, then it will be overwritten with no pop-up message or other warning.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 This will hopefully be changed in the future.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 You can, however, edit the script for individual JSFX plugins from the FX window for the given plugin, if you run into issues and need a quick fix.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel2 \b \fs28 Limitations of timing during tightly sequenced event calls:\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Due to the way I\u8217've written the script, very rhythmically tight event calls (such as very rhythmical gunshots or similar) can vary in timing.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 This tool does in no way provide sample-accurate event calls as it is based on reading the time position of the Reaper playhead, and that float precision can be difficult to work with.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 I\u8217've experimented with increasing the float precision and span in which a certain level of imprecision is allowed to still let an event trigger, but I found it be too unstable and would cause the occasional event to be dropped, which shouldn\u8217't be an issue with the current configuration.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel2 \b \fs28 Empty item delete upon playback will cause nil reference:\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Please do not delete empty items when the transport has been started, as the script will cause a nil reference and crash\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel2 \b \fs28 Help window instances:\par}
{\pard \ql \f0 \sa180 \li0 \fi0 As of now, it is possible to accidentally open up more than one \u8220"Help\u8221" window. Doing so might result in unexpected behaviour and eventually crash the script when you try to close one of the windows.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel0 \b \fs36 Thank you\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Thank you to everyone who helped providing support, feedback and tested it. I couldn't have done it without you.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 And thank you to {\field{\*\fldinst{HYPERLINK "https://github.com/cfillion"}}{\fldrslt{\ul
Christian Fillion
}}}
for providing support and maintaining ReaPack.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel1 \b \fs32 Other\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Link for the {\field{\*\fldinst{HYPERLINK "https://discord.gg/DYkfb9YAKB"}}{\fldrslt{\ul
ReaperToWwise Discord server
}}}
\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel1 \b \fs32 Cheers\par}
}
]]></description>
</metadata>
</index>