@bottobot/td-mcp
Version:
TouchDesigner Documentation MCP Server v2.3 - Pure MCP server for VS Code/Codium with comprehensive operator documentation for 629 operators + 7 tutorials across all categories (TOP, CHOP, SOP, DAT, MAT, COMP, POP). Features experimental POP operators wit
1,461 lines • 88.2 kB
JSON
{
"id": "audio_dynamics_chop",
"name": "Audio Dynamics CHOP",
"displayName": "Audio Dynamics CHOP",
"category": "CHOP",
"subcategory": "Audio",
"version": "",
"lastUpdated": "2025-08-07T07:49:57.005Z",
"sourceFile": "C:\\Program Files\\Derivative\\TouchDesigner\\Samples\\Learn\\OfflineHelp\\https.docs.derivative.ca\\Audio_Dynamics_CHOP.htm",
"url": "",
"description": "The Audio Dynamics CHOP is designed to control the dynamic range of an audio signal. Dynamic range refers to how loud and quiet the audio is over some period of time. The Operator contains two types of dynamic control: compression and limiting.\t\t\nIt is recommended that you link this CHOP to an Info CHOP, so that you can have some visual feedback: The amount of compression or limiting which is being applied will be displayed in the Info CHOP.",
"summary": "The Audio Dynamics CHOP is designed to control the dynamic range of an audio signal. Dynamic range refers to how loud and quiet the audio is over some period of time. The Operator contains two types o",
"details": "",
"usage": "",
"tips": [],
"warnings": [],
"parameters": [
{
"id": null,
"name": "Input Gain (dB)",
"label": "Input Gain (dB)",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "From Derivative\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tJump to navigation\n\t\tJump to search\n\t\t\nThe Audio Dynamics is designed to control the dynamic range of an audio signal. Dynamic range refers to how loud and quiet the audio is over some period of time. The Operator contains two types of dynamic control: compression and limiting.\t\t\nIt is recommended that you link this to an Info CHOP, so that you can have some visual feedback: The amount of compression or limiting which is being applied will be displayed in the Info .\t\t\t\nCompressor\t\t\t\nThe goal of a compressor is to reduce the amplitude of a signal when it crosses a certain threshold, while introducing little to no harmonic distortion. The desired threshold is set by the user, and the amount of compression to be applied is determined by the compression ratio. The attack and release parameters determine how quickly the compression will be applied and released, as incoming signal goes above and below the threshold.\t\t\t\nLimiter\t\t\t\nThe purpose of a limiter is to ensure a signal is within a certain dynamic range, while introducing as little harmonic distortion as possible. Unlike the compressor, the goal is not to apply a smooth or musical form of dynamic control, but instead to keep the signal within a 'safe' range that is compatible with any CHOPS that are downstream (for example, an Audio Device Out). This means that the Limiter has a much more abrupt (instant) attack value, which cannot be adjusted by the user.\t\t\t\nInput 2: Side Chain Channels - Other audio channels coming in can be used to determine the gains that are applied to the audio channels of the first input.\t\t\t\nNOTE: This is a useful article for procedurally mixing audio for games.\t\t\t\nSee Audio Filter CHOP, Audio Para EQ CHOP, Audio Band EQ CHOP, Audio Spectrum CHOP\t\t\t\nSee also: Envelope CHOP.\naudiodynamicsCHOP_Class\n\nContents\n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n inputgain - This parameter controls the volume of the channel before it reaches the compressor. If the signal to be compressed is not in a useful dynamic range, this parameter can be used to repair it.\n\n\n\n\n\n enablecompressor - Turns the compressor on or off.\n\n\n\t\t\n compressiontype - - Determines which compression method to use.\n\n compagc - This type of compression is suitable for passages of audio which are varying in amplitude over an extended period of time. To apply this type of compression, set the threshold to a value which is near the maximum volume that you want to hear. Apply a large compression ratio (around 1.0), and set the attack and release to high values. As the passage of audio crosses the threshold value, compression will slowly be applied, and if set properly, the signal will be compressed to a constant range. Setting the attack and release too low will cause the output volume to waver too quickly, while high values may cause the compression to be applied too slowly. compmus - If a passage of vocals or a musical instrument is varying in amplitude and needs to be brought into a uniform dynamic range, try applying this type of compression. Unless a heavy compression sound is desired, it is best to use this effect lightly. Set the threshold into the volume range that you want to compress and apply a low compression ratio. Try different values of attack and release until you achieve a good dynamic balance.\n\t\t\n chanlinkingcomp - - As various channels come into the , they can either be compressed by an equal amount, or individually. If they are compressed equally, all of the channels will be evaluated for the highest peak value, and this value will be used to determine the compression amount.\t\nIf they are compressed separately, each channel will be evaluated and compressed by different amounts.\n\n\n compequally - compindividually -\n\t\t\n thresholdcompressor - This parameter sets the threshold value which a signal must cross before compression is applied. It uses a decibel scale, where '0 decibels' would be considered the loudest possible signal*, and '-60 decibels' would be nearly inaudible. This is assuming that input signals are normalized to a \"-1 to +1\" range.\n\n\n\t\t\n ratiocompressor - The ratio is the amount of compression that will be applied to the signal, with respect to how far the signal has gone past the threshold value. A ratio of '0' will apply no compression. A value of '1' will cause a signals amplitude to be held down to the threshold value. With values over '1', the signal will become quieter as it passes the threshold.\n\n\n\t\t\n kneecompressor - The knee defines how the will transition into compression as signals approach or cross the threshold. With a knee of '0' (a hard knee), think of the compressor as applying a flat compression response, where:\t\ncompression_gain(db) = amount_that_signal_has_crossed_threshold(dB) * compression_ratio\t\t\t\nThis type of compression is not always desirable, as it can have a strong effect upon the dynamics of a sound. Increasing the knee parameter will cause there to be a smoothed transition into the compression.\t\t\t\nSee the Knee diagram below.\t\t\t\n\n\n\n\t\t\n attackcompressor - The attack will control how quickly the compressor responds when a signal crosses the threshold. Increasing the attack parameter will cause the compressor to apply compression at a slower and smoother rate. Increasing the parameter too much, will cause compression to be applied too slowly.\n\n\n\t\t\n releasecompressor - The release will control how quickly the compressor responds when a signal drops to a lower level, or goes below the threshold altogether. Just like the attack, higher value will slow down the response, but too high of a value will be too slow.\n\n\n\t\t\n gaincompressor - After applying compression, the signal can be reduced with Gain to a lower volume level. To make up the lost volume, this parameter can be increased.\n\n\n\n\n\n enablelimiter - Turns the limiter on or off.\n\n\n\t\t\n chanlinkinglim - - Same as compressor.\n\n compequally - compindividually -\n\t\t\n thresholdlimiter - This is the threshold value which a signal must cross before limiting is applied. Usually, this value should be left at '0' decibels. Just like the compressor, a value of '0' decibels is considered to be the loudest possible signal. \t\nFrom the perspective of digital audio, a signal level which varies between \"+1 <-> -1\" is at a volume level of \"0\" decibels, because it is not possible for a digital system to respresent any values larger than \"+1 <-> -1\". Instead, they will simply be clipped as they proceed to the output device. The limiter allows you to stop your audio from being clipped if you exceed this range, and applies a much smoother form of fast compression, which is barely audible.\t\t\t\nLowering the threshold value will cause the output to be clamped to a lower level.\n\n\n\t\t\n releaselimiter - Although the attack of a limiter is always quick, the release can still be set by the user. This will determine how long the limiter takes to transition out of a limiting situation. Increasing the release will help smooth out the effect of the limiter. Too high of a value may cause the limiter to release too slowly. For example, after an excessively loud tone burst, the limiter's gain may have been pushed up to an extreme value. This extreme value will take a long time to be fully released.\t\nEach channel can be different by putting expressions with the channel index, me.channelIndex in parameters like the frequency channel.\n\n\n\t\t\n kneelimiter - Similar to the compressor, this parameter controls how the will transition into limiting, when a signal becomes louder. A larger knee will mean a smoother transition. See the Knee diagram above.\t\nIf set to '0', no limiting will be applied until a signal goes over the threshold value. When increasing the knee parameter, some limiting will be applied before a signal goes beyond the threshold value, in an attempt to smooth out the effects of limiting overall.\n\n\n\n\n\n drywet - As this parameter is reduced from 1 (Wet) toward 0 (Dry), it removes the effect of the filter.\n\n\n\n\n\n timeslice - Turning this on forces the channels to be \"Time Sliced\". A is the time between the last cook frame and the current cook frame.\n\n\n\n scope - To determine which channels get affected, some CHOPs use a string on the Common page.\n\n\n\n srselect - - Handle cases where multiple input CHOPs' sample rates are different. When Resampling occurs, the curves are interpolated according to the Interpolation Method Option, or \"Linear\" if the Interpolate Options are not available.\n\n first - Use rate of first input to resample others. max - Resample to the highest sample rate. min - Resample to the lowest sample rate. err - Doesn't accept conflicting sample rates.\n\n exportmethod - - This will determine how to connect the channel to the parameter. Refer to the Export article for more information.\n\n datindex - Uses the docked table and references the channel via the index of the channel in the . datname - Uses the docked table and references the channel via the name of the channel in the . autoname - The channel is the full destination of where to export to, such has geo1/transform1:tx.\n\n autoexportroot - This path points to the root node where all of the paths that exporting by Channel Name is : are relative to.\n\n\n\n exporttable - The used to hold the export information when using the Table Methods (See above).\n\n\n\n\n\ncompressor_multiplier - the amount that the compressor reduced the loudness. 1 means no-change. expressed not in dB – linear\nlimiter_multiplier - the amount that the limiter reduced the loudness. not db – linear\ncompressor_db - same as above but expressed in decibels\nlimiter_db\ncompressor_attack_msec - this is in milliseconds, computed from the parameter which is 1 msec at value 1 and 100,000 msec at value 5 (10**val)\ncompressor_release_msec\nlimiter_release_msec\n\n -\n -\n\nExtra Information for the Audio Dynamics can be accessed via an Info CHOP.\n\n\n - - - - - - -\n - Start of the interval in samples. - Number of samples in the . - The samplerate of the channels in frames per second. - Number of channels in the . - 1 if is enabled, 0 otherwise. - A count of how often the export connections have been updated.\n - Number of times the operator has cooked since the process started. - Duration of the last cook in milliseconds. - Frame number when this operator was last cooked relative to the component timeline. - Frame number when this operator was last cooked relative to the absolute time. - Time in milliseconds at which the operator started cooking in the frame it was cooked. - Time in milliseconds at which the operator finished cooking in the frame it was cooked. - 1 if operator was cooked this frame. - Number of warnings in this operator if any. - Number of errors in this operator if any.\nTouchDesigner Build: Latest\\n2022.241402021.100002018.28070before 2018.28070\nCHOPs\n• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • \n\nAn Operator Family which operate on Channels (a sequence of numbers (Samples)) which are used for animation, audio, mathematics, simulation, logic, UI construction, and data streamed from/to devices and protocols.\n\n\n\nA Time Slice is the time from the last cook frame to the current cook frame. In CHOPs it is the set of short channels that contain the CHOP channels' samples between the last and the current cook frame.\n\n\n\nA parameter in most CHOPs that restricts which channels of that CHOP will be affected. Normally all channels of a CHOP are affected by the operator. TOPs have Channel Mask, a similar feature.\n\n\n\nsamples-per-second of a CHOP. Each CHOP in your network has a sample rate. In contrast, the overall timeline has a Frame Rate, which is the number of frames to cook and display per second, generally your monitor display frequency, default 60.\n\n\n\nExporting is the connection of CHOP channels to parameters of operators. The output of each exporting CHOP is one or more channels, active only while the CHOP Viewer is on. The current value of a channel can be exported to a parameter of any operator, overriding that parameter's value. See Parameter.\n\n\n\nAn Operator Family that manipulates text strings: multi-line text or tables. Multi-line text is often a python Script or GLSL Shader, but can be any multi-line text. Tables are rows and columns of cells, each containing a text string.\n\n\n\nThe location of an operator within the TouchDesigner environment, for example, /geo1/circle1, a node called circle1 in a component called geo1. The path / is called Root. This path is displayed at the top of every Pane, showing which Component's network you are currently in. To refer instead to a filesystem folder, directory, disk file or http: address, see Folder.\n\n\n\nEvery operator in TouchDesigner has a set of control Parameters that can be integer or floating point numbers, menus, binary toggles, text strings or operator paths, which determine the output of the operator.\n\n\n\nTouchDesigner is a hierarchy of components. \"root\" is the top-most network in the hierarchy. The Network Path or Path for root is simply /. A typical path is /project1/moviein1.\n\n\n\n\n\n\n\n\nRetrieved from \"https://docs.derivative.ca/index.php?title=Audio_Dynamics_CHOP&oldid=24421\"\n\t\tCategory: CHOPs",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:56.999Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Input Gain (dB)",
"label": "Input Gain (dB)",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "From Derivative\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tJump to navigation\n\t\tJump to search\n\t\t\nThe Audio Dynamics is designed to control the dynamic range of an audio signal. Dynamic range refers to how loud and quiet the audio is over some period of time. The Operator contains two types of dynamic control: compression and limiting.\t\t\nIt is recommended that you link this to an Info CHOP, so that you can have some visual feedback: The amount of compression or limiting which is being applied will be displayed in the Info .\t\t\t\nCompressor\t\t\t\nThe goal of a compressor is to reduce the amplitude of a signal when it crosses a certain threshold, while introducing little to no harmonic distortion. The desired threshold is set by the user, and the amount of compression to be applied is determined by the compression ratio. The attack and release parameters determine how quickly the compression will be applied and released, as incoming signal goes above and below the threshold.\t\t\t\nLimiter\t\t\t\nThe purpose of a limiter is to ensure a signal is within a certain dynamic range, while introducing as little harmonic distortion as possible. Unlike the compressor, the goal is not to apply a smooth or musical form of dynamic control, but instead to keep the signal within a 'safe' range that is compatible with any CHOPS that are downstream (for example, an Audio Device Out). This means that the Limiter has a much more abrupt (instant) attack value, which cannot be adjusted by the user.\t\t\t\nInput 2: Side Chain Channels - Other audio channels coming in can be used to determine the gains that are applied to the audio channels of the first input.\t\t\t\nNOTE: This is a useful article for procedurally mixing audio for games.\t\t\t\nSee Audio Filter CHOP, Audio Para EQ CHOP, Audio Band EQ CHOP, Audio Spectrum CHOP\t\t\t\nSee also: Envelope CHOP.\naudiodynamicsCHOP_Class\n\nContents\n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n inputgain - This parameter controls the volume of the channel before it reaches the compressor. If the signal to be compressed is not in a useful dynamic range, this parameter can be used to repair it.\n\n\n\n\n\n enablecompressor - Turns the compressor on or off.\n\n\n\t\t\n compressiontype - - Determines which compression method to use.\n\n compagc - This type of compression is suitable for passages of audio which are varying in amplitude over an extended period of time. To apply this type of compression, set the threshold to a value which is near the maximum volume that you want to hear. Apply a large compression ratio (around 1.0), and set the attack and release to high values. As the passage of audio crosses the threshold value, compression will slowly be applied, and if set properly, the signal will be compressed to a constant range. Setting the attack and release too low will cause the output volume to waver too quickly, while high values may cause the compression to be applied too slowly. compmus - If a passage of vocals or a musical instrument is varying in amplitude and needs to be brought into a uniform dynamic range, try applying this type of compression. Unless a heavy compression sound is desired, it is best to use this effect lightly. Set the threshold into the volume range that you want to compress and apply a low compression ratio. Try different values of attack and release until you achieve a good dynamic balance.\n\t\t\n chanlinkingcomp - - As various channels come into the , they can either be compressed by an equal amount, or individually. If they are compressed equally, all of the channels will be evaluated for the highest peak value, and this value will be used to determine the compression amount.\t\nIf they are compressed separately, each channel will be evaluated and compressed by different amounts.\n\n\n compequally - compindividually -\n\t\t\n thresholdcompressor - This parameter sets the threshold value which a signal must cross before compression is applied. It uses a decibel scale, where '0 decibels' would be considered the loudest possible signal*, and '-60 decibels' would be nearly inaudible. This is assuming that input signals are normalized to a \"-1 to +1\" range.\n\n\n\t\t\n ratiocompressor - The ratio is the amount of compression that will be applied to the signal, with respect to how far the signal has gone past the threshold value. A ratio of '0' will apply no compression. A value of '1' will cause a signals amplitude to be held down to the threshold value. With values over '1', the signal will become quieter as it passes the threshold.\n\n\n\t\t\n kneecompressor - The knee defines how the will transition into compression as signals approach or cross the threshold. With a knee of '0' (a hard knee), think of the compressor as applying a flat compression response, where:\t\ncompression_gain(db) = amount_that_signal_has_crossed_threshold(dB) * compression_ratio\t\t\t\nThis type of compression is not always desirable, as it can have a strong effect upon the dynamics of a sound. Increasing the knee parameter will cause there to be a smoothed transition into the compression.\t\t\t\nSee the Knee diagram below.\t\t\t\n\n\n\n\t\t\n attackcompressor - The attack will control how quickly the compressor responds when a signal crosses the threshold. Increasing the attack parameter will cause the compressor to apply compression at a slower and smoother rate. Increasing the parameter too much, will cause compression to be applied too slowly.\n\n\n\t\t\n releasecompressor - The release will control how quickly the compressor responds when a signal drops to a lower level, or goes below the threshold altogether. Just like the attack, higher value will slow down the response, but too high of a value will be too slow.\n\n\n\t\t\n gaincompressor - After applying compression, the signal can be reduced with Gain to a lower volume level. To make up the lost volume, this parameter can be increased.\n\n\n\n\n\n enablelimiter - Turns the limiter on or off.\n\n\n\t\t\n chanlinkinglim - - Same as compressor.\n\n compequally - compindividually -\n\t\t\n thresholdlimiter - This is the threshold value which a signal must cross before limiting is applied. Usually, this value should be left at '0' decibels. Just like the compressor, a value of '0' decibels is considered to be the loudest possible signal. \t\nFrom the perspective of digital audio, a signal level which varies between \"+1 <-> -1\" is at a volume level of \"0\" decibels, because it is not possible for a digital system to respresent any values larger than \"+1 <-> -1\". Instead, they will simply be clipped as they proceed to the output device. The limiter allows you to stop your audio from being clipped if you exceed this range, and applies a much smoother form of fast compression, which is barely audible.\t\t\t\nLowering the threshold value will cause the output to be clamped to a lower level.\n\n\n\t\t\n releaselimiter - Although the attack of a limiter is always quick, the release can still be set by the user. This will determine how long the limiter takes to transition out of a limiting situation. Increasing the release will help smooth out the effect of the limiter. Too high of a value may cause the limiter to release too slowly. For example, after an excessively loud tone burst, the limiter's gain may have been pushed up to an extreme value. This extreme value will take a long time to be fully released.\t\nEach channel can be different by putting expressions with the channel index, me.channelIndex in parameters like the frequency channel.\n\n\n\t\t\n kneelimiter - Similar to the compressor, this parameter controls how the will transition into limiting, when a signal becomes louder. A larger knee will mean a smoother transition. See the Knee diagram above.\t\nIf set to '0', no limiting will be applied until a signal goes over the threshold value. When increasing the knee parameter, some limiting will be applied before a signal goes beyond the threshold value, in an attempt to smooth out the effects of limiting overall.\n\n\n\n\n\n drywet - As this parameter is reduced from 1 (Wet) toward 0 (Dry), it removes the effect of the filter.\n\n\n\n\n\n timeslice - Turning this on forces the channels to be \"Time Sliced\". A is the time between the last cook frame and the current cook frame.\n\n\n\n scope - To determine which channels get affected, some CHOPs use a string on the Common page.\n\n\n\n srselect - - Handle cases where multiple input CHOPs' sample rates are different. When Resampling occurs, the curves are interpolated according to the Interpolation Method Option, or \"Linear\" if the Interpolate Options are not available.\n\n first - Use rate of first input to resample others. max - Resample to the highest sample rate. min - Resample to the lowest sample rate. err - Doesn't accept conflicting sample rates.\n\n exportmethod - - This will determine how to connect the channel to the parameter. Refer to the Export article for more information.\n\n datindex - Uses the docked table and references the channel via the index of the channel in the . datname - Uses the docked table and references the channel via the name of the channel in the . autoname - The channel is the full destination of where to export to, such has geo1/transform1:tx.\n\n autoexportroot - This path points to the root node where all of the paths that exporting by Channel Name is : are relative to.\n\n\n\n exporttable - The used to hold the export information when using the Table Methods (See above).\n\n\n\n\n\ncompressor_multiplier - the amount that the compressor reduced the loudness. 1 means no-change. expressed not in dB – linear\nlimiter_multiplier - the amount that the limiter reduced the loudness. not db – linear\ncompressor_db - same as above but expressed in decibels\nlimiter_db\ncompressor_attack_msec - this is in milliseconds, computed from the parameter which is 1 msec at value 1 and 100,000 msec at value 5 (10**val)\ncompressor_release_msec\nlimiter_release_msec\n\n -\n -\n\nExtra Information for the Audio Dynamics can be accessed via an Info CHOP.\n\n\n - - - - - - -\n - Start of the interval in samples. - Number of samples in the . - The samplerate of the channels in frames per second. - Number of channels in the . - 1 if is enabled, 0 otherwise. - A count of how often the export connections have been updated.\n - Number of times the operator has cooked since the process started. - Duration of the last cook in milliseconds. - Frame number when this operator was last cooked relative to the component timeline. - Frame number when this operator was last cooked relative to the absolute time. - Time in milliseconds at which the operator started cooking in the frame it was cooked. - Time in milliseconds at which the operator finished cooking in the frame it was cooked. - 1 if operator was cooked this frame. - Number of warnings in this operator if any. - Number of errors in this operator if any.\nTouchDesigner Build: Latest\\n2022.241402021.100002018.28070before 2018.28070\nCHOPs\n• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • \n\nAn Operator Family which operate on Channels (a sequence of numbers (Samples)) which are used for animation, audio, mathematics, simulation, logic, UI construction, and data streamed from/to devices and protocols.\n\n\n\nA Time Slice is the time from the last cook frame to the current cook frame. In CHOPs it is the set of short channels that contain the CHOP channels' samples between the last and the current cook frame.\n\n\n\nA parameter in most CHOPs that restricts which channels of that CHOP will be affected. Normally all channels of a CHOP are affected by the operator. TOPs have Channel Mask, a similar feature.\n\n\n\nsamples-per-second of a CHOP. Each CHOP in your network has a sample rate. In contrast, the overall timeline has a Frame Rate, which is the number of frames to cook and display per second, generally your monitor display frequency, default 60.\n\n\n\nExporting is the connection of CHOP channels to parameters of operators. The output of each exporting CHOP is one or more channels, active only while the CHOP Viewer is on. The current value of a channel can be exported to a parameter of any operator, overriding that parameter's value. See Parameter.\n\n\n\nAn Operator Family that manipulates text strings: multi-line text or tables. Multi-line text is often a python Script or GLSL Shader, but can be any multi-line text. Tables are rows and columns of cells, each containing a text string.\n\n\n\nThe location of an operator within the TouchDesigner environment, for example, /geo1/circle1, a node called circle1 in a component called geo1. The path / is called Root. This path is displayed at the top of every Pane, showing which Component's network you are currently in. To refer instead to a filesystem folder, directory, disk file or http: address, see Folder.\n\n\n\nEvery operator in TouchDesigner has a set of control Parameters that can be integer or floating point numbers, menus, binary toggles, text strings or operator paths, which determine the output of the operator.\n\n\n\nTouchDesigner is a hierarchy of components. \"root\" is the top-most network in the hierarchy. The Network Path or Path for root is simply /. A typical path is /project1/moviein1.\n\n\n\n\n\n\n\n\nRetrieved from \"https://docs.derivative.ca/index.php?title=Audio_Dynamics_CHOP&oldid=24421\"\n\t\tCategory: CHOPs",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.001Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Input Gain (dB)",
"label": "Input Gain (dB)",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "The Audio Dynamics is designed to control the dynamic range of an audio signal. Dynamic range refers to how loud and quiet the audio is over some period of time. The Operator contains two types of dynamic control: compression and limiting.\t\t\nIt is recommended that you link this to an Info CHOP, so that you can have some visual feedback: The amount of compression or limiting which is being applied will be displayed in the Info .\t\t\t\nCompressor\t\t\t\nThe goal of a compressor is to reduce the amplitude of a signal when it crosses a certain threshold, while introducing little to no harmonic distortion. The desired threshold is set by the user, and the amount of compression to be applied is determined by the compression ratio. The attack and release parameters determine how quickly the compression will be applied and released, as incoming signal goes above and below the threshold.\t\t\t\nLimiter\t\t\t\nThe purpose of a limiter is to ensure a signal is within a certain dynamic range, while introducing as little harmonic distortion as possible. Unlike the compressor, the goal is not to apply a smooth or musical form of dynamic control, but instead to keep the signal within a 'safe' range that is compatible with any CHOPS that are downstream (for example, an Audio Device Out). This means that the Limiter has a much more abrupt (instant) attack value, which cannot be adjusted by the user.\t\t\t\nInput 2: Side Chain Channels - Other audio channels coming in can be used to determine the gains that are applied to the audio channels of the first input.\t\t\t\nNOTE: This is a useful article for procedurally mixing audio for games.\t\t\t\nSee Audio Filter CHOP, Audio Para EQ CHOP, Audio Band EQ CHOP, Audio Spectrum CHOP\t\t\t\nSee also: Envelope CHOP.\naudiodynamicsCHOP_Class\n\nContents\n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n inputgain - This parameter controls the volume of the channel before it reaches the compressor. If the signal to be compressed is not in a useful dynamic range, this parameter can be used to repair it.\n\n\n\n\n\n enablecompressor - Turns the compressor on or off.\n\n\n\t\t\n compressiontype - - Determines which compression method to use.\n\n compagc - This type of compression is suitable for passages of audio which are varying in amplitude over an extended period of time. To apply this type of compression, set the threshold to a value which is near the maximum volume that you want to hear. Apply a large compression ratio (around 1.0), and set the attack and release to high values. As the passage of audio crosses the threshold value, compression will slowly be applied, and if set properly, the signal will be compressed to a constant range. Setting the attack and release too low will cause the output volume to waver too quickly, while high values may cause the compression to be applied too slowly. compmus - If a passage of vocals or a musical instrument is varying in amplitude and needs to be brought into a uniform dynamic range, try applying this type of compression. Unless a heavy compression sound is desired, it is best to use this effect lightly. Set the threshold into the volume range that you want to compress and apply a low compression ratio. Try different values of attack and release until you achieve a good dynamic balance.\n\t\t\n chanlinkingcomp - - As various channels come into the , they can either be compressed by an equal amount, or individually. If they are compressed equally, all of the channels will be evaluated for the highest peak value, and this value will be used to determine the compression amount.\t\nIf they are compressed separately, each channel will be evaluated and compressed by different amounts.\n\n\n compequally - compindividually -\n\t\t\n thresholdcompressor - This parameter sets the threshold value which a signal must cross before compression is applied. It uses a decibel scale, where '0 decibels' would be considered the loudest possible signal*, and '-60 decibels' would be nearly inaudible. This is assuming that input signals are normalized to a \"-1 to +1\" range.\n\n\n\t\t\n ratiocompressor - The ratio is the amount of compression that will be applied to the signal, with respect to how far the signal has gone past the threshold value. A ratio of '0' will apply no compression. A value of '1' will cause a signals amplitude to be held down to the threshold value. With values over '1', the signal will become quieter as it passes the threshold.\n\n\n\t\t\n kneecompressor - The knee defines how the will transition into compression as signals approach or cross the threshold. With a knee of '0' (a hard knee), think of the compressor as applying a flat compression response, where:\t\ncompression_gain(db) = amount_that_signal_has_crossed_threshold(dB) * compression_ratio\t\t\t\nThis type of compression is not always desirable, as it can have a strong effect upon the dynamics of a sound. Increasing the knee parameter will cause there to be a smoothed transition into the compression.\t\t\t\nSee the Knee diagram below.\t\t\t\n\n\n\n\t\t\n attackcompressor - The attack will control how quickly the compressor responds when a signal crosses the threshold. Increasing the attack parameter will cause the compressor to apply compression at a slower and smoother rate. Increasing the parameter too much, will cause compression to be applied too slowly.\n\n\n\t\t\n releasecompressor - The release will control how quickly the compressor responds when a signal drops to a lower level, or goes below the threshold altogether. Just like the attack, higher value will slow down the response, but too high of a value will be too slow.\n\n\n\t\t\n gaincompressor - After applying compression, the signal can be reduced with Gain to a lower volume level. To make up the lost volume, this parameter can be increased.\n\n\n\n\n\n enablelimiter - Turns the limiter on or off.\n\n\n\t\t\n chanlinkinglim - - Same as compressor.\n\n compequally - compindividually -\n\t\t\n thresholdlimiter - This is the threshold value which a signal must cross before limiting is applied. Usually, this value should be left at '0' decibels. Just like the compressor, a value of '0' decibels is considered to be the loudest possible signal. \t\nFrom the perspective of digital audio, a signal level which varies between \"+1 <-> -1\" is at a volume level of \"0\" decibels, because it is not possible for a digital system to respresent any values larger than \"+1 <-> -1\". Instead, they will simply be clipped as they proceed to the output device. The limiter allows you to stop your audio from being clipped if you exceed this range, and applies a much smoother form of fast compression, which is barely audible.\t\t\t\nLowering the threshold value will cause the output to be clamped to a lower level.\n\n\n\t\t\n releaselimiter - Although the attack of a limiter is always quick, the release can still be set by the user. This will determine how long the limiter takes to transition out of a limiting situation. Increasing the release will help smooth out the effect of the limiter. Too high of a value may cause the limiter to release too slowly. For example, after an excessively loud tone burst, the limiter's gain may have been pushed up to an extreme value. This extreme value will take a long time to be fully released.\t\nEach channel can be different by putting expressions with the channel index, me.channelIndex in parameters like the frequency channel.\n\n\n\t\t\n kneelimiter - Similar to the compressor, this parameter controls how the will transition into limiting, when a signal becomes louder. A larger knee will mean a smoother transition. See the Knee diagram above.\t\nIf set to '0', no limiting will be applied until a signal goes over the threshold value. When increasing the knee parameter, some limiting will be applied before a signal goes beyond the threshold value, in an attempt to smooth out the effects of limiting overall.\n\n\n\n\n\n drywet - As this parameter is reduced from 1 (Wet) toward 0 (Dry), it removes the effect of the filter.\n\n\n\n\n\n timeslice - Turning this on forces the channels to be \"Time Sliced\". A is the time between the last cook frame and the current cook frame.\n\n\n\n scope - To determine which channels get affected, some CHOPs use a string on the Common page.\n\n\n\n srselect - - Handle cases where multiple input CHOPs' sample rates are different. When Resampling occurs, the curves are interpolated according to the Interpolation Method Option, or \"Linear\" if the Interpolate Options are not available.\n\n first - Use rate of first input to resample others. max - Resample to the highest sample rate. min - Resample to the lowest sample rate. err - Doesn't accept conflicting sample rates.\n\n exportmethod - - This will determine how to connect the channel to the parameter. Refer to the Export article for more information.\n\n datindex - Uses the docked table and references the channel via the index of the channel in the . datname - Uses the docked table and references the channel via the name of the channel in the . autoname - The channel is the full destination of where to export to, such has geo1/transform1:tx.\n\n autoexportroot - This path points to the root node where all of the paths that exporting by Channel Name is : are relative to.\n\n\n\n exporttable - The used to hold the export information when using the Table Methods (See above).\n\n\n\n\n\ncompressor_multiplier - the amount that the compressor reduced the loudness. 1 means no-change. expressed not in dB – linear\nlimiter_multiplier - the amount that the limiter reduced the loudness. not db – linear\ncompressor_db - same as above but expressed in decibels\nlimiter_db\ncompressor_attack_msec - this is in milliseconds, computed from the parameter which is 1 msec at value 1 and 100,000 msec at value 5 (10**val)\ncompressor_release_msec\nlimiter_release_msec\n\n -\n -\n\nExtra Information for the Audio Dynamics can be accessed via an Info CHOP.\n\n\n - - - - - - -\n - Start of the interval in samples. - Number of samples in the . - The samplerate of the channels in frames per second. - Number of channels in the . - 1 if is enabled, 0 otherwise. - A count of how often the export connections have been updated.\n - Number of times the operator has cooked since the process started. - Duration of the last cook in milliseconds. - Frame number when this operator was last cooked relative to the component timeline. - Frame number when this operator was last cooked relative to the absolute time. - Time in milliseconds at which the operator started cooking in the frame it was cooked. - Time in milliseconds at which the operator finished cooking in the frame it was cooked. - 1 if operator was cooked this frame. - Number of warnings in this operator if any. - Number of errors in this operator if any.\nTouchDesigner Build: Latest\\n2022.241402021.100002018.28070before 2018.28070\nCHOPs\n• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • \n\nAn Operator Family which operate on Channels (a sequence of numbers (Samples)) which are used for animation, audio, mathematics, simulation, logic, UI construction, and data streamed from/to devices and protocols.\n\n\n\nA Time Slice is the time from the last cook frame to the current cook frame. In CHOPs it is the set of short channels that contain the CHOP channels' samples between the last and the current cook frame.\n\n\n\nA parameter in most CHOPs that restricts which channels of that CHOP will be affected. Normally all channels of a CHOP are affected by the operator. TOPs have Channel Mask, a similar feature.\n\n\n\nsamples-per-second of a CHOP. Each CHOP in your network has a sample rate. In contrast, the overall timeline has a Frame Rate, which is the number of frames to cook and display per second, generally your monitor display frequency, default 60.\n\n\n\nExporting is the connection of CHOP channels to parameters of operators. The output of each exporting CHOP is one or more channels, active only while the CHOP Viewer is on. The current value of a channel can be exported to a parameter of any operator, overriding that parameter's value. See Parameter.\n\n\n\nAn Operator Family that manipulates text strings: multi-line text or tables. Multi-line text is often a python Script or GLSL Shader, but can be any multi-line text. Tables are rows and columns of cells, each containing a text string.\n\n\n\nThe location of an operator within the TouchDesigner environment, for example, /geo1/circle1, a node called circle1 in a component called geo1. The path / is called Root. This path is displayed at the top of every Pane, showing which Component's network you are currently in. To refer instead to a filesystem folder, directory, disk file or http: address, see Folder.\n\n\n\nEvery operator in TouchDesigner has a set of control Parameters that can be integer or floating point numbers, menus, binary toggles, text strings or operator paths, which determine the output of the operator.\n\n\n\nTouchDesigner is a hierarchy of components. \"root\" is the top-most network in the hierarchy. The Network Path or Path for root is simply /. A typical path is /project1/moviein1.\n\n\n\n\n\n\n\n\nRetrieved from \"https://docs.derivative.ca/index.php?title=Audio_Dynamics_CHOP&oldid=24421\"",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.003Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Input Gain (dB)",
"label": "Input Gain (dB)",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "inputgain - This parameter controls the volume of the channel before it reaches the compressor. If the signal to be compressed is not in a useful dynamic range, this parameter can be used to repair it.",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.003Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Enable Compressor",
"label": "Enable Compressor",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "enablecompressor - Turns the compressor on or off.",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.004Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Compression Type",
"label": "Compression Type",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "compressiontype - - Determines which compression method to use.\n\n compagc - This type of compression is suitable for passages of audio which are varying in amplitude over an extended period of time. To apply this type of compression, set the threshold to a value which is near the maximum volume that you want to hear. Apply a large compression ratio (around 1.0), and set the attack and release to high values. As the passage of audio crosses the threshold value, compression will slowly be applied, and if set properly, the signal will be compressed to a constant range. Setting the attack and release too low will cause the output volume to waver too quickly, while high values may cause the compression to be applied too slowly. compmus - If a passage of vocals or a musical instrument is varying in amplitude and needs to be brought into a uniform dynamic range, try applying this type of compression. Unless a heavy compression sound is desired, it is best to use this effect lightly. Set the threshold into the volume range that you want to compress and apply a low compression ratio. Try different values of attack and release until you achieve a good dynamic balance.",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.004Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Automatic Gain Control",
"label": "Automatic Gain Control",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "compagc - This type of compression is suitable for passages of audio which are varying in amplitude over an extended period of time. To apply this type of compression, set the threshold to a value which is near the maximum volume that you want to hear. Apply a large compression ratio (around 1.0), and set the attack and release to high values. As the passage of audio crosses the threshold value, compression will slowly be applied, and if set properly, the signal will be compressed to a constant range. Setting the attack and release too low will cause the output volume to waver too quickly, while high values may cause the compression to be applied too slowly. compmus - If a passage of vocals or a musical instrument is varying in amplitude and needs to be brought into a uniform dynamic range, try applying this type of compression. Unless a heavy compression sound is desired, it is best to use this effect lightly. Set the threshold into the volume range that you want to compress and apply a low compression ratio. Try different values of attack and release until you achieve a good dynamic balance.",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.004Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Channel Linking",
"label": "Channel Linking",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "chanlinkingcomp - - As various channels come into the , they can either be compressed by an equal amount, or individually. If they are compressed equally, all of the channels will be evaluated for the highest peak value, and this value will be used to determine the compression amount.\t\nIf they are compressed separately, each channel will be evaluated and compressed by different amounts.\n\n\n compequally - compindividually -",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.004Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Compress Equally",
"label": "Compress Equally",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "compequally - compindividually -",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.004Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Threshold (dB)",
"label": "Threshold (dB)",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "thresholdcompressor - This parameter sets the threshold value which a signal must cross before compression is applied. It uses a decibel scale, where '0 decibels' would be considered the loudest possible signal*, and '-60 decibels' would be nearly inaudible. This is assuming that input signals are normalized to a \"-1 to +1\" range.",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.004Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Ratio",
"label": "Ratio",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "ratiocompressor - The ratio is the amount of compression that will be applied to the signal, with respect to how far the signal has gone past the threshold value. A ratio of '0' will apply no compression. A value of '1' will cause a signals amplitude to be held down to the threshold value. With values over '1', the signal will become quieter as it passes the threshold.",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.004Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Knee",
"label": "Knee",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "kneecompressor - The knee defines how the will transition into compression as signals approach or cross the threshold. With a knee of '0' (a hard knee), think of the compressor as applying a flat compression response, where:\t\ncompression_gain(db) = amount_that_signal_has_crossed_threshold(dB) * compression_ratio\t\t\t\nThis type of compression is not always desirable, as it can have a strong effect upon the dynamics of a sound. Increasing the knee parameter will cause there to be a smoothed transition into the compression.\t\t\t\nSee the Knee diagram below.",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.004Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Attack (msec=10**val)",
"label": "Attack (msec=10**val)",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "attackcompressor - The attack will control how quickly the compressor responds when a signal crosses the threshold. Increasing the attack parameter will cause the compressor to apply compression at a slower and smoother rate. Increasing the parameter too much, will cause compression to be applied too slowly.",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.004Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Release (msec=10**val)",
"label": "Release (msec=10**val)",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "releasecompressor - The release will control how quickly the compressor responds when a signal drops to a lower level, or goes below the threshold altogether. Just like the attack, higher value will slow down the response, but too high of a value will be too slow.",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.004Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Output Gain (dB)",
"label": "Output Gain (dB)",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "gaincompressor - After applying compression, the signal can be reduced with Gain to a lower volume level. To make up the lost volume, this parameter can be increased.",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.004Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Enable Limiter",
"label": "Enable Limiter",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "enablelimiter - Turns the limiter on or off.",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.004Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Channel Linking",
"label": "Channel Linking",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "chanlinkinglim - - Same as compressor.\n\n compequally - compindividually -",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.004Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Limit Equally",
"label": "Limit Equally",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "compequally - compindividually -",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.004Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Threshold (dB)",
"label": "Threshold (dB)",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "thresholdlimiter - This is the threshold value which a signal must cross before limiting is applied. Usually, this value should be left at '0' decibels. Just like the compressor, a value of '0' decibels is considered to be the loudest possible signal. \t\nFrom the perspective of digital audio, a signal level which varies between \"+1 <-> -1\" is at a volume level of \"0\" decibels, because it is not possible for a digital system to respresent any values larger than \"+1 <-> -1\". Instead, they will simply be clipped as they proceed to the output device. The limiter allows you to stop your audio from being clipped if you exceed this range, and applies a much smoother form of fast compression, which is barely audible.\t\t\t\nLowering the threshold value will cause the output to be clamped to a lower level.",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.004Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Release (msec=10**val)",
"label": "Release (msec=10**val)",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "releaselimiter - Although the attack of a limiter is always quick, the release can still be set by the user. This will determine how long the limiter takes to transition out of a limiting situation. Increasing the release will help smooth out the effect of the limiter. Too high of a value may cause the limiter to release too slowly. For example, after an excessively loud tone burst, the limiter's gain may have been pushed up to an extreme value. This extreme value will take a long time to be fully released.\t\nEach channel can be different by putting expressions with the channel index, me.channelIndex in parameters like the frequency channel.",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.004Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Knee",
"label": "Knee",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "kneelimiter - Similar to the compressor, this parameter controls how the will transition into limiting, when a signal becomes louder. A larger knee will mean a smoother transition. See the Knee diagram above.\t\nIf set to '0', no limiting will be applied until a signal goes over the threshold value. When increasing the knee parameter, some limiting will be applied before a signal goes beyond the threshold value, in an attempt to smooth out the effects of limiting overall.",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.004Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Dry / Wet Mix",
"label": "Dry / Wet Mix",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "drywet - As this parameter is reduced from 1 (Wet) toward 0 (Dry), it removes the effect of the filter.",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.004Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Time Slice",
"label": "Time Slice",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "timeslice - Turning this on forces the channels to be \"Time Sliced\". A is the time between the last cook frame and the current cook frame.",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.004Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Scope",
"label": "Scope",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "scope - To determine which channels get affected, some CHOPs use a string on the Common page.",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.004Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Sample Rate Match",
"label": "Sample Rate Match",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "srselect - - Handle cases where multiple input CHOPs' sample rates are different. When Resampling occurs, the curves are interpolated according to the Interpolation Method Option, or \"Linear\" if the Interpolate Options are not available.\n\n first - Use rate of first input to resample others. max - Resample to the highest sample rate. min - Resample to the lowest sample rate. err - Doesn't accept conflicting sample rates.",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.004Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Resample At First Input's Rate",
"label": "Resample At First Input's Rate",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "first - Use rate of first input to resample others. max - Resample to the highest sample rate. min - Resample to the lowest sample rate. err - Doesn't accept conflicting sample rates.",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.004Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Export Method",
"label": "Export Method",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "exportmethod - - This will determine how to connect the channel to the parameter. Refer to the Export article for more information.\n\n datindex - Uses the docked table and references the channel via the index of the channel in the . datname - Uses the docked table and references the channel via the name of the channel in the . autoname - The channel is the full destination of where to export to, such has geo1/transform1:tx.",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.005Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "DAT Table by Index",
"label": "DAT Table by Index",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "datindex - Uses the docked table and references the channel via the index of the channel in the . datname - Uses the docked table and references the channel via the name of the channel in the . autoname - The channel is the full destination of where to export to, such has geo1/transform1:tx.",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.005Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Export Root",
"label": "Export Root",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "autoexportroot - This path points to the root node where all of the paths that exporting by Channel Name is : are relative to.",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.005Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Export Table",
"label": "Export Table",
"group": "General",
"page": "",
"type": "float",
"dataType": "number",
"style": "",
"defaultValue": null,
"minValue": null,
"maxValue": null,
"step": null,
"menuItems": [],
"menuLabels": [],
"allowCustom": false,
"maxLength": null,
"pattern": null,
"isArray": false,
"arraySize": 1,
"dimensions": 1,
"description": "exporttable - The used to hold the export information when using the Table Methods (See above).",
"tooltip": "",
"help": "",
"units": "",
"examples": [],
"isReadOnly": false,
"isAdvanced": false,
"isHidden": false,
"isAnimatable": true,
"isExpression": false,
"isPython": false,
"dependsOn": [],
"affects": [],
"linkedTo": [],
"expressionLanguage": "",
"defaultExpression": "",
"commonExpressions": [],
"order": 0,
"isVisible": true,
"conditionalDisplay": null,
"isValid": true,
"validationErrors": [],
"lastUpdated": "2025-08-07T07:49:57.005Z",
"rawData": {},
"sourceElement": null
}
],
"parameterGroups": {},
"codeExamples": [],
"pythonExamples": [],
"expressions": [],
"commonInputs": [],
"commonOutputs": [],
"relatedOperators": [],
"workflowPatterns": [],
"images": [],
"videos": [],
"assets": [],
"keywords": [
"audio",
"dynamics",
"chop",
"designed",
"control",
"dynamic",
"range",
"signal."
],
"tags": [
"CHOP",
"TouchDesigner",
"Audio Dynamics CHOP"
],
"searchWeight": 1,
"contentHash": "",
"processingDate": "2025-08-07T07:49:57.005Z",
"processingVersion": "1.0.0",
"isValid": true,
"validationErrors": []
}