|
|
|
01-05-2019, 12:18 PM
|
#81
|
Human being with feelings
Join Date: Oct 2007
Location: home is where the heart is
Posts: 12,110
|
About PPT (pooled points) in the <POOLEDENV chunk
https://github.com/Ultraschall/ultra...-Doku.txt#L137
Quote:
number position - position of the point in seconds
|
Seems to me position is rather stored in beats (relative to item start, when moving an AI on the timeline, stored points positions don't change), and also taking AI playrate into account.
Last edited by nofish; 01-05-2019 at 12:48 PM.
|
|
|
01-05-2019, 02:26 PM
|
#82
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
I will add that to the docs. Thank you
|
|
|
01-05-2019, 04:32 PM
|
#83
|
Human being with feelings
Join Date: Apr 2011
Posts: 3,458
|
Quote:
Originally Posted by mespotine
|
Wow! Super cool!
I had searched for it but didn't find it.. Need new glasses!..
|
|
|
02-14-2019, 09:25 AM
|
#84
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
I redid the documentation of the render-cfg-strings totally by documenting them in their decoded version(they are stored as BASE64-encoded-strings in rpp-Projectfiles/reaper-render.ini)
Find the reaper-render-cfg-docs here
|
|
|
02-19-2019, 01:54 PM
|
#85
|
Human being with feelings
Join Date: Feb 2019
Posts: 41
|
I don't want to crowd your thread, but Mespotine, you are a saint! Thank you for all of this!
|
|
|
02-27-2019, 10:20 AM
|
#86
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
Updated docs to Reaper 5.971(including the new fantastic Video-Processor-docs!), SWS 2.10.0.1, JS-extension-plugin 0.971 and ReaPack.
|
|
|
03-09-2019, 05:03 AM
|
#87
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
Updated Reaper-Docs to 5.972 and Ultraschall-API 4.00 beta 2.73
|
|
|
03-22-2019, 06:11 AM
|
#88
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
Last edited by Meo-Ada Mespotine; 04-10-2024 at 07:09 AM.
|
|
|
04-11-2019, 04:14 PM
|
#89
|
Human being with feelings
Join Date: Oct 2007
Location: home is where the heart is
Posts: 12,110
|
Suggested adjustments for your config variables doc:
rendercfg is a string rather than an int.
Same for g_config_project, which Justin pointed out here.
Last edited by nofish; 04-11-2019 at 04:49 PM.
|
|
|
04-14-2019, 01:08 AM
|
#90
|
Human being with feelings
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,793
|
Offset parameter in Midi send and receive with JSFX
Within Reaper, any processing is done strictly in terms of sample-blocks. Complete sample blocks are transferred to and from VSTs. And the environment, that is constructed for any JSFX instance, communicates with the Reaper audio/Midi infrastructure in terms of complete sample blocks.
Any "instance" in Reaper works on a sample block as soon as this is available (e.g. by the previous station in the FX chain), as long as the complete processing latency is not exceeded, which is relevant for blocks read from a file. Hence usually any plugin always sees a block way ahead of the time it is output to an audio device. At max as early as the complete processing latency which is denoted by the sampling frequency, block size and block (buffer) count set with the audio interface (the total can be several seconds).
In fact, with any track (FX chain), Reaper uses a single block buffer at the time, and a single OS thread, and calls the plugins one after the other, providing the memory address of this block, and each plugin just modifies the content of that block. On return from one plugin, Reaper just continues with the next one. "Normal" plugins simply modify the block content when they are called. Complex plugins (such as Kontakt) that create their own OS threads, also only are allowed to do exactly that, but they can work in the background to prepare the information they are going to write in the next block, once they are called by Reaper.
Regarding JSFX, Reaper calls @block as soon as a block is available from the previous thingy in the FX chain. After @block returns, Reaper performs a loop with "samplesblock" iterations to iteratively call @sample. With each iteration it provides values smpl0 ...smpl63 from the appropriate sample block, and after return from @sample updates the modified values of smpl0 ...smpl63 into the sample block.
Hence there is no such thing as "timing" @block vs @sample. They need to be considered to be called "at the same point in time", and that point in time is not in any way related to other points in time throughout Reaper. That is why it does not make any sense to transfer realtime (block- or even sample-accurate) information between multiple instances of plugins via global memory. The "nearby" calls to the communicating plugins can be done with different blocks, the timing can differ by the total "complete processing latency". If in the same track, the "global" communication can overtake the block sequence, if the plugins are located in different tracks, the timing correlation is just random.
Regarding Midi, Reaper marks each Midi message by the samples block the time of duration of which the message is to be located in, and the offset in samples (i.e. 1 / sample frequency) to exactly denote the "virtual" point in time.
Now when receiving Midi in a JSFX (no matter if in @block or in @sample), midirecv() will provide the next Midi message associated with the sample block the JSFX infrastructure is just working on, and provide the correct offset (regarding that sample block) in the "offset" variable.
When sending a Midi message by midisend(), the message is associated to the sample block the JSFX infrastructure is just working on, and the offset given is stored with that message.
Hence it is not necessary to do midirecv() or midisend() in @sample. In fact doing midirecv() in @sample crates a lot of unnecessary overhead - you need to do it an a loop anyway, and the first call of @sample after an @block will output all messages associated with that sample block. Regarding midisend(), I understand that there is not much difference between doing your own loop of "samplesblock" iterations, or using @sample. (In fact a loop of "samplesblock" iterations might be avoidable to decrease CPU overhead, but would often need a much more complex algorithm to calculate the (virtual) timing (e.g. of a ramp of parameter values).)
This is why for sample accurate Midi "timing", only the correct management of the "offset" is critical, creating a "virtual timing", while the "physical timing" (when a message is received or sent) does not matter at all.
Reaper might be hoped to do special handling with midisend() in @sample events (e.g. ignore the offset given and replace it by the offset affiliated to the audio sample to be handled in that loop cycle (i.e. the loop counter), I did a test verifying that the offset value is just left as it is even when sending a midi message in @sample. Hence it does not make much sense to do midisend() in @sample.
If for the same sample block multiple Midi messages with the same offset are sent, Reaper will handle all of them, but supposedly the sequence they will occur in is undefined.
-Michael
Last edited by mschnell; 04-29-2019 at 11:52 AM.
|
|
|
04-18-2019, 05:06 AM
|
#91
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
@mschnell
Thanks
@nofish
Yes, I should add the info that the int is an integer-representation of the first x bytes of the accompanying string. Though I think, you can't access them via get_config_var_string(), so even if they are string, you can access them only as int.
With afxcfg, rendercfg and recordcfg, it's the same case.
|
|
|
04-18-2019, 01:42 PM
|
#92
|
Human being with feelings
Join Date: Oct 2007
Location: home is where the heart is
Posts: 12,110
|
Quote:
Originally Posted by mespotine
@mschnell
Thanks
@nofish
Yes, I should add the info that the int is an integer-representation of the first x bytes of the accompanying string. Though I think, you can't access them via get_config_var_string(), so even if they are string, you can access them only as int.
With afxcfg, rendercfg and recordcfg, it's the same case.
|
Isn't rendercfg what we now can access via GetSetProjectInfo_String(0, "RENDER_FORMAT", ...)?
edit:
Btw. next SWS version will prevent accessing string config variables via SNM_Get/SetIntConfigVar(), SNM_Get/SetDoubleConfigVar() to avoid potential crashes as per Justin's advice in the linked thread.
Last edited by nofish; 04-19-2019 at 04:58 AM.
|
|
|
04-25-2019, 03:10 AM
|
#93
|
Human being with feelings
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,793
|
Another Rant on DAW Parameter modulation / Midi / Reaper Control Path
Unfortunately there is an ongoing misconception regarding plugins' DAW Parameter modulation / Midi / Reaper Control Path, due to lack of appropriate documentation and sometimes misleading naming in the Reaper GUI.
I seem to remember that I already did write a text on this, but supposedly my research is more advanced now.
Regarding the the Midi Routing in Reaper it's important to see that this always happens in parallel with a (potentially mute) the Audio stream. The timing of the Midi messages is tied to same and a description of some details is here -> https://forum.cockos.com/showpost.ph...3&postcount=90. The Midi channel (that by the Midi Standard is 1.. 16) internally in Reaper is enhanced by the "Midi Bus" (1..16) and hence any Reaper Midi message features one of 256 virtual Midi channels (denoted by Bus and Channel).
A plugin in a track's FX chain can receive any of these messages (for "Standard" plugins, Reaper manages the input and output "Bus" - together with the routing instructions, while JSFX plugins can - and are supposed to - do that by themselves in their code).
For plugin "DAW"-parameter modulation, CC messages can be use by Reaper. These are taken from the Midi messages stream in the FX chain at the location of the plugin in question (managed by [Param] -> "Parameter List" -> "Parameter Modulation / Midi link").
Obviously Reaper Scripts don't "live" in an FX chain and hence they can't see Midi messages.
Additionally (and separate from) the Midi message streams (in the tracks, and parallel with audio streams), Reaper features the "Reaper Control Path). Same does not hold Midi messages, but just parameter change instructions. These can be derived from Midi CC messages when activating the "Control" feature in a Midi in device or be explicitly sent by the "MidiToReaControlPath" plugin (or of course by other Reaper extensions that use the appropriate Reaper API). They can be constructed to represent Midi CC messages (or e.g. to represent OSC messages). The Timing of the messages in the Control Path is not strict, but they are handled just "as fast as possible", hence you can't rely on it in any critical situations.
Reaper Scripts can be triggered by such Parameter Change messages in the Reaper Control Path.
For plugin "DAW"-parameter modulation, such Parameter Change messages can be use by Reaper. These are taken from the (single) Reaper Control Path (independent of the track, the plugin is located in, and from any Midi routing). This feature is managed by the [Param] -> "Parameter List" -> "Learn" feature.
-Michael
Last edited by mschnell; 04-25-2019 at 04:31 AM.
|
|
|
04-25-2019, 07:35 AM
|
#94
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
Quote:
Originally Posted by nofish
Isn't rendercfg what we now can access via GetSetProjectInfo_String(0, "RENDER_FORMAT", ...)?
|
Only the one that is available as four-letter-word, like "evaw" for wave or "l3pm" for mp3, afaik.
Thanks for the SWS-fix
@mschnell
Thanks for the insights
|
|
|
04-29-2019, 07:18 AM
|
#95
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
Forgot to update the docs to Reaper 5.974, SWS 2.10.0.1 and JS0.80.
Correctly linked, now
|
|
|
04-30-2019, 07:13 AM
|
#96
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
Update Reaper-Docs to 5.975 (bleeding edge )
|
|
|
05-07-2019, 08:00 AM
|
#97
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
Updated docs to Reaper 5.977 and JS-Extension 0.986
I also added a documentation for the state-chunk-entries of Parameter Learning/Modulation/Aliases:
https://github.com/Ultraschall/ultra...mLearnDocs.txt
|
|
|
05-10-2019, 05:34 AM
|
#98
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
Upated ParamLearn-docs, was missing the CC-Mode-dropdownlist in the parameter-modulation-settingswindow.
Added preliminary docs for all childhwnd-IDs of specific windows. Still missing a lot, but it might be helpful already for you:
https://github.com/Ultraschall/ultra...s-ChildIDs.txt
|
|
|
06-03-2019, 06:57 AM
|
#99
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
added hwnd-displayer developer-tool
|
|
|
06-11-2019, 10:10 AM
|
#100
|
Human being with feelings
Join Date: Nov 2008
Location: Stockholm Sweden
Posts: 23
|
Opus coding, channel mapping family 2 and 3
Is it possible to make opus encode to family 2, I assume family 255 is used now?
Opus coding, channel mapping family 2 and 3 is now a ietf standard for ambisonic channel mapping.
Bosse
Quote:
Originally Posted by mespotine
I updated the render-code-docs. They include now, how to way to go to generate all render-codes; new additions WavPack, OGG, GIF, LCF AudioCD.. M4A is still missing, as this is Mac-only and I don't have a Mac to document that:
Render-CFG-Codes
I also made a more complete ini-file of render-codes, that can be put together with the information included.
Video render codes
The rendercfg-codes as an ini-file, for many formats like DDP, AIF, MP3, FLAC, Video, OPUS and OGG.
The sections are the file-formats (like [OGG] or [FLAC]).
You can find in all sections a key called Renderstring, in which the renderstring-template is stored.
All changeable parts are replaced by [FormatAlterID].
e.g. for OPUS:
Code:
Renderstring=U2dnTwAA[KBPS][MODE][Complexity]AAAA==
Replace the [KBPS] [MODE] [Complexity] with the values of the corresponding keys in the section OPUS.
e.g.:
KBPS_xxx - where xxx is the bitrate-number
MODE_xxx - where xxx is the mode
Complexity_xxx - where xxx is the complexity-number.
So a renderstring with OPUS, Mode:VBR, Bitrate: 24kbps, Complexity:5 would result in this string:
Code:
U2dnTwAAwEEABQAAAA==
MODE_VBR=A
KBPS_24=wEE
Complexity_5=BQ
|
|
|
|
06-12-2019, 08:58 AM
|
#101
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
If you can set it in the Render to File-dialog, it is possible. If not, it's a Feature Request
|
|
|
06-21-2019, 03:17 PM
|
#102
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
Updated Reaper-docs to Reaper 5.979 and JS-extension 0.989.
Also added to reaper-kb.ini information about, how global shortcuts are stored.
|
|
|
06-24-2019, 06:37 AM
|
#103
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
Added description to gfx.deltablit.
If you want to test around with that function to get an idea how it works, see this thread for a tool, that allows you to experiment with its parameters:
https://forum.cockos.com/showthread.php?t=222313
|
|
|
07-13-2019, 12:02 AM
|
#105
|
Human being with feelings
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,793
|
Amazing !
Thanks you.
-Michael
|
|
|
07-31-2019, 04:10 PM
|
#106
|
Human being with feelings
Join Date: Apr 2013
Location: France
Posts: 9,902
|
Hi !
I didn't find it in the doc, but is there a way to get recpass ?
Thx !
|
|
|
08-02-2019, 08:49 AM
|
#107
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
It's part of the MediaItemStateChunk. My StateChunk-docs are not done yet, but you can find a preliminary one here:
https://github.com/Ultraschall/ultra...Doku.txt#L1104
BTW: I have recently added some functions into my API, who should make it easy to read my source-files I use for my Reaper-Docs, API and such.
As they include parameters, retvals, and tags and such, would you be interested into attempting a version of your great Reaper-API-docs, using my source-files instead of the original ReaScript-html-file?
My more detailed information combined with your search and filter and clipboard-features would make it awesome, I think.
I could help you to get your head around that, if you want.
Last edited by Meo-Ada Mespotine; 08-02-2019 at 09:08 AM.
|
|
|
08-03-2019, 03:30 AM
|
#108
|
Human being with feelings
Join Date: Apr 2013
Location: France
Posts: 9,902
|
Thx for the infos !
------
Where is this doc about your doc ? :P
I can.take a look.
|
|
|
08-11-2019, 03:50 PM
|
#109
|
Human being with feelings
Join Date: Oct 2007
Location: home is where the heart is
Posts: 12,110
|
Nitpick:
The link on first page "Display altered config-variables" points to the ultraschall_Display-Altered-ConfigFile-Entries.lua script.
It should rather point to this one I suppose?
https://github.com/Ultraschall/ultra...onfig-Vars.lua
Last edited by nofish; 08-11-2019 at 04:12 PM.
|
|
|
08-12-2019, 08:54 AM
|
#110
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
Ooops...thanks, will fix this...
Edit: where did you find it?
Last edited by Meo-Ada Mespotine; 08-12-2019 at 08:59 AM.
|
|
|
08-12-2019, 01:42 PM
|
#111
|
Human being with feelings
Join Date: Oct 2007
Location: home is where the heart is
Posts: 12,110
|
I mean this in the opening post of this thread:
Just a minor thing, but I stumbled upon it yesterday when I wanted to link to it here so I thought I'd mention it...
Last edited by nofish; 08-12-2019 at 01:53 PM.
|
|
|
08-13-2019, 11:51 AM
|
#112
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
Ah, ok. Will update that. Thanx
|
|
|
08-29-2019, 08:49 AM
|
#113
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
Update Reaperdocs to Reaper 5.983 and JS-extension 0.990.
Also added tons of new information to the ConfigVars-docs and added the recently added pre-release-ones as well.
If a configvar is a ProjectDefault-related one, it is now documented. That way you can alter now ProjectDefaults, at least those, who are available as "live-editable"-ConfigVars.
Spent two days on that rework
|
|
|
11-01-2019, 01:24 PM
|
#114
|
Human being with feelings
Join Date: Oct 2007
Location: home is where the heart is
Posts: 12,110
|
small addition to envelope state chunk/POOLEDENVINST
Meanwhile there are 2 more tokens, I don't know what the 14th does, but the 15th (currently last one) seems to be transition time in seconds.
Last edited by nofish; 11-01-2019 at 05:28 PM.
|
|
|
11-02-2019, 07:54 AM
|
#115
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
Thanks, will look at it.
|
|
|
11-02-2019, 08:17 AM
|
#116
|
Administrator
Join Date: Mar 2007
Location: NY
Posts: 15,823
|
POOLEDENVINST
int: pool identifier (pooled instances will have the same identifier)
double: position in seconds
double: length in seconds
double: start offset in seconds
double: playback rate
integer: selected
double: baseline
double: amplitude
integer: looped
double: position in QN (only used in certain contexts)
double: length in QN (only used in certain contexts)
int: order in which this instance was created
int: muted
double: start offset in QN (only used in certain contexts)
double: transition time in seconds
int: volume envelope maximum when this instance was created (matches the 1|4 bits of the "volenvrange" config variable: 0=+6dB, 1=+0dB, 4=+12dB, 5=+24dB)
Last edited by schwa; 11-02-2019 at 09:22 AM.
|
|
|
11-02-2019, 09:01 AM
|
#117
|
Human being with feelings
Join Date: Oct 2007
Location: home is where the heart is
Posts: 12,110
|
Thanks schwa.
If I counted correctly, that's 13 but I see a few more here (16)?
https://i.imgur.com/YnOQ6CX.jpg
|
|
|
11-02-2019, 09:22 AM
|
#118
|
Administrator
Join Date: Mar 2007
Location: NY
Posts: 15,823
|
Sorry, updated.
While I'm looking through that doc...
PARMENV 4th field is double: range midpoint
POOLEDENV SRCLEN is double: length in QN
Envelope:
VIS 3rd field is a deprecated value, always 1.0
DEFSHAPE 2nd and 3rd fields are pitch env range/snap settings, -1=global default, otherwise these are the LSB and MSB of the "pitchenvrange" config variable
PT 5th field is bezier type, normally 0, 1 is an old/deprecated type, 2 is a special type if the segment has been edited
Last edited by schwa; 11-02-2019 at 09:36 AM.
|
|
|
11-02-2019, 09:30 AM
|
#119
|
Human being with feelings
Join Date: Oct 2007
Location: home is where the heart is
Posts: 12,110
|
Thanks again!
|
|
|
11-05-2019, 10:17 AM
|
#120
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
@schwa
Nice! Thank you
|
|
|
Thread Tools |
|
Display Modes |
Linear Mode
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -7. The time now is 07:43 PM.
|