Go Back   Cockos Incorporated Forums > REAPER Forums > ReaScript, JSFX, REAPER Plug-in Extensions, Developer Forum

Reply
 
Thread Tools Display Modes
Old 08-25-2021, 03:03 AM   #721
TonE
Human being with feelings
 
Join Date: Feb 2009
Location: Reaper HAS send control via midi !!!
Posts: 4,030
Default

If the latest version is 4.2.005 - "Anne Clark - Our Darkness" - 21th of July 2021, there are still few bugs regarding

function ultraschall.GetParmLearn_FXStateChunk

The first version, not the later/newly added second version, seems not to return a few numbers. To be more specific two values are not returned in my test cases. If those would work, all should work correctly I hope.

I will post example cases in github, with my .lua scripts and used .RPP. What I found out was, if the midi mappings are in later positions, like parameters 5..10 for example (and not 1..6), those are still seen as if those were mapped to parameters 1..6, so there is a shift mismatch.

If anything is not working correctly, I am looking anyway always into the source code, so if the documentation is not correct yet, it can be solved by checking the source code.

parm_idx and parmname are not returned correctly, or not at all in my test cases. And without those you can not do much later, at least in my test cases.
TonE is offline   Reply With Quote
Old 08-25-2021, 04:11 AM   #722
TonE
Human being with feelings
 
Join Date: Feb 2009
Location: Reaper HAS send control via midi !!!
Posts: 4,030
Default

Quote:
Originally Posted by Meo-Ada Mespotine View Post
Will release an update tomorrow. Hope this fixes the problems.

For further investigation, I probably need a simple demo-script that displays this issue.
If you post such demo, please at GitHub.
Posted something here:
https://github.com/Ultraschall/ultra...aper/issues/13
TonE is offline   Reply With Quote
Old 08-28-2021, 11:03 AM   #723
Meo-Ada Mespotine
Human being with feelings
 
Meo-Ada Mespotine's Avatar
 
Join Date: May 2017
Location: Leipzig
Posts: 6,578
Default

Ok, I've looked into it and I can't find a possible problem, actually.

I wrote a simple code, that displays all states returned by GetParmLearn_FXStateChunk.
I have looked closely and even checked, if the returned values are matching the values in the trackstatechunk.
As far as I could see, the following code returns all values, as they are stored in your example-project, as it should be.

So I think, somewhere in your code, the order of the parm-learn-entries get accidentally messed up,
so you get the states of a parmlearn-entry while you wanted to have the states for another one.
But this is a guess, as the code is too complex and I lack the time to actually work through it in detail.


Here's the code, that displays all parm-learn-entry-states of all tracks and all fx in the currently opened project and everything works as expected l:

Code:
-- initialize Ultraschall-API
dofile(reaper.GetResourcePath().."/UserPlugins/ultraschall_api.lua")

-- clear console and show introduction-text
print_update("Show All ParmLearns from all FX in all tracks.\nShow all states returned by GetParmLearn_FXStateChunk.\n\n")

for Track=1, reaper.CountTracks() do
  -- go through every track and get its FXStateChunk
  _, StateChunk=ultraschall.GetTrackStateChunk_Tracknumber(Track)
  FXStateChunk=ultraschall.GetFXStateChunk(StateChunk)
  
  for fxindex=1,  ultraschall.CountFXFromFXStateChunk(FXStateChunk) do
    -- now go through every fx, as each fx can have their own parmlearn-entries
    
    for parmlearnindex=1,  ultraschall.CountParmLearn_FXStateChunk(FXStateChunk, fxindex) do
      -- now we go through the parm-learn-entries for 
      -- each track "Track" and each FX "fxindex" and 
      -- parameter-learn index "parmlearnindex"
      parm_idx, parmname, midi_note, checkboxflags, osc_message = ultraschall.GetParmLearn_FXStateChunk(FXStateChunk, fxindex, parmlearnindex)
      
      -- now let's output all of them into the console.
      -- first, we replace empty strings/returned nil-values with a string 
      -- with "" in it so it's easier to spot, when the string is an empty one
      if parmname=="" then parmname="\"\"" end
      if osc_message==nil then osc_message="\"\"" end
      
      -- now output all the stuff to the console
      print_alt("Track: "..Track,   -- track number 
                "FX: "..fxindex,    -- fx number
                "ParmLearnIDX: "..parmlearnindex,     -- the parmlearn-index
                " ->  ParmIDX: "..tostring(parm_idx), -- the idx of the parameter
                "  Parmname(\"\", byp or wet): "..tostring(parmname), -- the name of the parameter which is 
                                                                      -- either "", byp or wet, nothing else
                                                                      -- the actual parametername as displayed must be gotten
                                                                      -- from somewhere else
                "  MidiNote: "..tostring(midi_note),          -- the midi-note
                "\tCheckBoxFlags: "..tostring(checkboxflags), -- the flags of the checkbox
                "OSCMsg: "..tostring(osc_message))            -- a possible osc-message
    end
  end
  print(" ") -- insert an empty line after all parmlearns of a track 
             -- are displayed for better clarity
end

In regards of returnvalue parmname, it is either ""(any parameter) or "byp"(for bypass-parameter) or "wet"(for the wet-parameter) and never anything else.
This has something to do, with the way parm-learn-entries are stored in statechunks.
For instance, such an entry can look something like this:

Code:
PARMLEARN 7 10431 0 
PARMLEARN 8:wet 10431 0 
PARMLEARN 9:byp 10431 0
and parmname displays, what is added after the parameter-index, which is either "" or "wet" or "byp".
So if you want to get the actual parametername, you need to use TrackFX_GetParamName instead.
I will clear this more up in the docs.
__________________
Use you/she/her.Ultraschall-Api Lua Api4Reaper - Donate, if you wish

On vacation for the time being...
Meo-Ada Mespotine is offline   Reply With Quote
Old 08-28-2021, 02:10 PM   #724
TonE
Human being with feelings
 
Join Date: Feb 2009
Location: Reaper HAS send control via midi !!!
Posts: 4,030
Default

Thanks for your testing.

Oh, this info "parmname displays, what is added after the parameter-index, which is either "" or "wet" or "byp". " explains everything. So paramname can not be returned using your function. I thought it is supported as well, somehow. Ok, then I will try using parm_idx if this is returned correctly.
TonE is offline   Reply With Quote
Old 08-28-2021, 02:49 PM   #725
TonE
Human being with feelings
 
Join Date: Feb 2009
Location: Reaper HAS send control via midi !!!
Posts: 4,030
Default

Here is a version with all parameter names additionally.
PHP Code:
-- initialize Ultraschall-API
dofile
(reaper.GetResourcePath().."/UserPlugins/ultraschall_api.lua")

-- 
clear console and show introduction-text
print_update
("Show All ParmLearns from all FX in all tracks.\nShow all states returned by GetParmLearn_FXStateChunk.\n\n")

for 
Track=1reaper.CountTracks() do
  -- 
go through every track and get its FXStateChunk
  _
StateChunk=ultraschall.GetTrackStateChunk_Tracknumber(Track)
  
FXStateChunk=ultraschall.GetFXStateChunk(StateChunk)
  
  for 
fxindex=1,  ultraschall.CountFXFromFXStateChunk(FXStateChunk) do
    -- 
now go through every fx, as each fx can have their own parmlearn-entries
    
    
for parmlearnindex=1,  ultraschall.CountParmLearn_FXStateChunk(FXStateChunkfxindex) do
      -- 
now we go through the parm-learn-entries for 
      -- 
each track "Track" and each FX "fxindex" and 
      -- 
parameter-learn index "parmlearnindex"
      
parm_idxparmnamemidi_notecheckboxflagsosc_message ultraschall.GetParmLearn_FXStateChunk(FXStateChunkfxindexparmlearnindex)
      
      -- 
now let's output all of them into the console.
      -- first, we replace empty strings/returned nil-values with a string 
      -- with "" in it so it'
s easier to spotwhen the string is an empty one
      
if parmname=="" then parmname="\"\"" end
      
if osc_message==nil then osc_message="\"\"" end
      
if parm_idx~=nil then
         local fromTrack 
reaper.GetTrack(0,Track-1)
         
retparamname reaper.TrackFX_GetParamName(fromTrackfxindex-1parm_idx""end  --paramname filling
      
      
-- now output all the stuff to the console
      print_alt
("Track: "..Track,   -- track number 
                
"FX: "..fxindex,    -- fx number
                
"ParmLearnIDX: "..parmlearnindex,     -- the parmlearn-index
                
" ->  ParmIDX: "..tostring(parm_idx), -- the idx of the parameter
--                "  Parmname(\"\", byp or wet): "..tostring(parmname), -- the name of the parameter which is 
                
"  Parmname(\"\", byp or wet): "..tostring(paramname), -- the name of the parameter which is 
                                                                      
-- either ""byp or wetnothing else
                                                                      -- 
the actual parametername as displayed must be gotten
                                                                      
-- from somewhere else
                
"  MidiNote: "..tostring(midi_note),          -- the midi-note
                
"\tCheckBoxFlags: "..tostring(checkboxflags), -- the flags of the checkbox
                
"OSCMsg: "..tostring(osc_message))            -- a possible osc-message
    end
  end
  
print(" ") -- insert an empty line after all parmlearns of a track 
             
-- are displayed for better clarity
end 
TonE is offline   Reply With Quote
Old 08-28-2021, 02:52 PM   #726
Meo-Ada Mespotine
Human being with feelings
 
Meo-Ada Mespotine's Avatar
 
Join Date: May 2017
Location: Leipzig
Posts: 6,578
Default

I got it!

You counted through the wrong value. You used the parameter-count of an fx, but you need to
count through the available learned-values of an fx-parameter instead.
If an fx-parameter has no available learned-parameters, the function GetParmLearn_FXStateChunk
returns nil as described in the docs(always check for such things, all functions-descriptions include a
"returns blabla in case of an error" to give you a hint, that something went wrong.)
To know, that a function messed up, use the function SLEM() (for show last error message) extensively, or at least
at the end of it.
If that function shows an error-message, then you have an error in some function.
In your case, adding SLEM() at the end of the script reveals quickly where the error lies.

So GetParmLearn_FXStateChunk does, what it is intended to do. You just tried to index through them with the wrong value.
So evertime GetParmLearn_FXStateChunk didn't return anything, it's because you wanted a parmlearn from a parameter, that had none.

So how to fix it? Well, you just need to set a different variablename you already have requested into the for-loop in line 56 and
then it should work.
At least this part of the code(can't tell for the rest of it).

Code:
-- Line 53 and following:
             paramslearned = ultraschall.CountParmLearn_FXStateChunk(FXStateChunk, j)

             -- for k=1,numparams do     -- this counts through all parameters, but we want to
             for k=1,paramslearned do    -- count through all possible params-learned instead

Again, while debugging/coding, always add SLEM() (for show last error message) or even better SFEM() (for show first error message)
at the end of your script. All Ultraschall-API-functions are designed to give meaningful error-messages.
So if your script ends with a pop-up of an error-message, you have a bug in your code.
The error-message gives you a hint at which function, which parameter was affected and an error-message, what has happened.
You'll never want to go back coding-wise, once you had meaningful error-messages to work with

BTW:
You can use ultraschall.WriteValueToFile to write the file instead. This is more convenient than doing the file-IO yourself.
Ultraschall-API has plenty of read/write-file-functions available. Just look in the docs for "File Management" to find them.
__________________
Use you/she/her.Ultraschall-Api Lua Api4Reaper - Donate, if you wish

On vacation for the time being...
Meo-Ada Mespotine is offline   Reply With Quote
Old 08-28-2021, 03:12 PM   #727
TonE
Human being with feelings
 
Join Date: Feb 2009
Location: Reaper HAS send control via midi !!!
Posts: 4,030
Default

Somehow I would prefer a function which returns parm_idx as absolute position of current fx, and not counting the mapped parameters.
TonE is offline   Reply With Quote
Old 08-28-2021, 03:15 PM   #728
Meo-Ada Mespotine
Human being with feelings
 
Meo-Ada Mespotine's Avatar
 
Join Date: May 2017
Location: Leipzig
Posts: 6,578
Default

Quote:
Originally Posted by TonE View Post
Somehow I would prefer a function which returns parm_idx as absolute position of current fx, and not counting the mapped parameters.
I don't know, what you mean with that, tbh.
__________________
Use you/she/her.Ultraschall-Api Lua Api4Reaper - Donate, if you wish

On vacation for the time being...
Meo-Ada Mespotine is offline   Reply With Quote
Old 08-28-2021, 03:17 PM   #729
TonE
Human being with feelings
 
Join Date: Feb 2009
Location: Reaper HAS send control via midi !!!
Posts: 4,030
Default

Oh, just saw your new reply. But I want to count through all parameters, also the non-mapped ones, so I can edit those later in Excel. Then reimporting into Reaper via csv import.

UPDATE:
" You used the parameter-count of an fx, but you need to
count through the available learned-values of an fx-parameter instead."
No, I want to count through all parameters, also the non-mapped ones, in those cases I want to output -1 instead of nil for example. This is required so a user knows which parameters are available in the project, so you could edit those -1 value to new values, for later reimport with another csv-import-into-reaper.lua script.

Last edited by TonE; 08-29-2021 at 01:35 AM.
TonE is offline   Reply With Quote
Old 08-28-2021, 03:20 PM   #730
TonE
Human being with feelings
 
Join Date: Feb 2009
Location: Reaper HAS send control via midi !!!
Posts: 4,030
Default

For the non-mapped values I want to output -1 but still writing all the rest parameters.
TonE is offline   Reply With Quote
Old 08-29-2021, 02:58 AM   #731
TonE
Human being with feelings
 
Join Date: Feb 2009
Location: Reaper HAS send control via midi !!!
Posts: 4,030
Default

My problem comes from the fact the function

parm_idx, parmname, input_mode, channel, cc_note, cc_mode, checkboxflags = ultraschall.GetParmLearn_FXStateChunk2(FXStateChun k, j, k)

does not accept for k the normal sequence of parameters of any fx. k has to be the number of the mapped parameters. This is the problem, from my perspective. I would find a function much more useful or direct in its later use cases, if I could simply ask for ANY parameter id, which is k in my case, (no matter if midi-mapped or not) and getting the correct values for the above list of variables. For example returning -1 for the variables in the case of non-mapped parameters.

This would allow me running through all parameters, no matter if mapped or not.
TonE is offline   Reply With Quote
Old 08-31-2021, 12:45 PM   #732
Meo-Ada Mespotine
Human being with feelings
 
Meo-Ada Mespotine's Avatar
 
Join Date: May 2017
Location: Leipzig
Posts: 6,578
Default

It's hard to code efficiently but an easy way is to write a function, that goes through all Parmlearns and check, whether one of them returns the parameter-number you want to adress.

If parameter is not mapped, return -1,if yes, return the index i(which is the parmlearn-index you need on further).

You know, something like this

Code:
function getparmlearnid(FXStateChunk, fx, paramidx) 

  for i=1, ultraschall.CountParmLearn_FXStateChunk(FXStateChunk, j) do
     if paramidx==ultraschall.GetParmLearn_FXStateChunk(FXStateChunk, fx, i) then return i end
  end
  return - 1
end
This function should return the parmlearn-index for a parameter-index which you can pass as parmlearn-id-parameter to the GetParmLearn-function(if parameter is mapped) and -1 if the parameter isn't mapped.
Just use the returned value for the parameter parmlearnindex of GetParmLearn, unless it is -1(which means, no Parmlearn mapped for this parameter).
It isn't tested but should give you an idea how to approach this.
This function might help for potential SetParmLearn as well, as SetParmLearn expects the same value for Parmlearn-index as the GetParmLearn-function.

Aside from that, I can't help you any further right now. I'm currently off from here for a good reason and just logged in to fix a potential bug.
I completely lack time and energy to do any code-mentoring right now,sorry.
I know this stuff is tedious and the reason why I hate the Parmlearn/Mod-functions from my guts as it's hard to code this really convenient in the first place, as the needed information for that is hard to gather from somewhere reliably. Hence my design decision with parmlearn-index instead of parameter-index.
I might add some convenience functions for Parmlearn/Mod somewhen in the future but not anytime soon, not until I have the time to do any proper coding.

Maybe somebody else can chime in to help you further.
__________________
Use you/she/her.Ultraschall-Api Lua Api4Reaper - Donate, if you wish

On vacation for the time being...

Last edited by Meo-Ada Mespotine; 08-31-2021 at 01:03 PM.
Meo-Ada Mespotine is offline   Reply With Quote
Old 08-31-2021, 08:42 PM   #733
TonE
Human being with feelings
 
Join Date: Feb 2009
Location: Reaper HAS send control via midi !!!
Posts: 4,030
Default

No problem, thanks. I was also thinking just to add one more for loop, will be unefficient, but who cares, if it works in the end. I was thinking comparing parameter names instead of index values, if both are same, we know we are at correct position and can do something.

But will try your suggestion as well. Two more techniques to test. Have a nice off time. Thanks a lot.
TonE is offline   Reply With Quote
Old 09-03-2021, 08:40 AM   #734
aurelien
Human being with feelings
 
Join Date: Apr 2014
Posts: 94
Default

Hi Mespotine,
I guess the Reaper rollback to export format in 6.35 unfixed your fix

I had to edit the script this way to make it work

Line 5334 in ultraschall_functions_Render_Module.lua:
Code:
		Filearray[i]=MediaItemStateChunkArray[i]:match("%<SOURCE.-FILE \"(.-)\"")
Thanks!
aurelien is offline   Reply With Quote
Old 12-24-2021, 09:29 AM   #735
Meo-Ada Mespotine
Human being with feelings
 
Meo-Ada Mespotine's Avatar
 
Join Date: May 2017
Location: Leipzig
Posts: 6,578
Default

4.2.006 - "The Beatles - The continuing story of Bungalow Bill" - 24th of December 2021

Has now 1423 functions, with 17 new ones

new in this release:
  • Brickwall Limiting Support
    The rendering-functions support now brickwall-rendering and the render-preset-functions the new possibility to
    store the rendering-path as well(as of Reaper 6.43)
  • CAF-support
    CAF is now supported as well with rendering.
  • GFX_GetChar
    Gives you a more powerful version of gfx.getchar, which returns the characters and optionally a readable version of
    non-printable characters.
    It also allows you managing the clipboard directly inside of it, so you don't need to code cmd+x/c yourself.
  • New MetaData-functions added
    For ASWG, AXML, CAFINFO, FLACPIC, IFF and WAVEEXT. I also updated the docs for other metadata-functions to include
    newly added tags.
  • Deprecated Checker for scripters
    A new devtool allows you to check lua-scripts inside a folder, if they use deprecated functions. It also warns you,
    if one of them still uses a function that got actually removed.
  • Bugfixes
    And cleanup, cleanup, cleanup

    New features in 4.2.006
  • DeveloperTools: Check scripts in folder for deprecated functions - checks, whether a folder contains Lua-scripts that ue deprecated or removed API-functions
  • Docs: function changelogs - include now changelogs for each function beginning from Reaper 6.42+, SWS 2.12.1.3+, ReaBlink 0.4.0, JS 1.22+, ReaImGui 0.5.8+
  • Docs: deprecated-states - include now deprecated-states for each depreacted function which includes since when and a possible alternative
  • Doc-Engine: Docs_GetUSDocBloc_Changelog - returns the changelogs from each US-DocML-entry
  • Doc-Engine: Docs_GetUSDocBloc_Deprecated - returns the attributes of the deprecated-tag of an US-DocBloc
  • Doc-Engine: Docs_GetUSDocBloc_LinkedTo - returns the entries of the linked_to-tags insie an USDocML-entry
  • GFX-Management: GFX_GetChar - a more powerful version of gfx.getchar, with additional clipboard management and conversion of non-printable characters to readable ones
  • Helper Functions: ReturnReaperExeFile_With_Path - returns the name of the reaper-executable including its path
  • MetaData: Metadata_ASWG_GetSet - gets/sets ASWG-metadata
  • MetaData: Metadata_AXML_GetSet - gets/sets AXML-metadata
  • MetaData: Metadata_CAFINFO_GetSet - gets/sets metadata for CAF-files
  • MetaData: Metadata_FLACPIC_GetSet - gets/set metadata to embed pictures into flac-files
  • MetaData: Metadata_IFF_GetSet - gets/set metadata for iff
  • MetaData: Metadata_WAVEXT_GetSet gets/set metadata for wavext
  • ParmAlias: GetParmAlias_by_FXParam_FXStateChunk - gets the parmalias_id by fx-parameter, that you can use as parameter id for Set/Get/Delete-ParmAlias-functions
  • ParmLearn: GetParmLearnID_by_FXParam_FXStateChunk - gets the parmlearn_id by fx-parameter, that you can use as parmlearn_id for Set/Get/Delete-ParmLearn-functions(requested by TonE)
  • ParmLFOLearn: GetParmLFOLearn_by_FXParam_FXStateChunk - gets the parm_lfolearn_id by fx-parameter, that you can use as parameter id for Set/Get/Delete-ParmLFOLearn-functions
  • Render Management: GetRenderTargetFiles - returns the render-target and filenames of all render-files, if they would be rendered right now
  • Render Management: GetRenderCFG_Settings_CAF - gets settings of a render-string of the caf-format
  • Render Management: CreateRenderCFG_CAF - creates a render-string for the CAF-format


    Changes from 4.2.005 to 4.2.006
  • API: bugs - newly added functions from last release weren't working, due oversight -> fixed
  • API: deprecated - replaced most of the deprecated functions US-API used
  • API: minimum Reaper version - raised minimum Reaper-version to Reaper 6.20
  • API: Settings - Beta-functions-feature removed, as it was pointless and slowed down initializing US-API
  • Developer: EditReaScript - allows now setting docking state and watchlist-size; didn't add scripts, when the file already existed, contrary to what the docs suggested; didn't reset old values in reaper.ini -> fixed
  • DeveloperTools: ultraschall_developertool_CheckForNewConfigVars - tries now to read possible config-vars from reaper.exe directly(windows only atm)
  • DeveloperTools: ultraschall_developertool_Display-Altered-Config-Vars - shows now the diffs to old values as well
  • DeveloperTools: ultraschall_developertool_Display-Altered-ConfigFile-Entries - shows diffs to old values when entries are numerical; added missing ini-files
  • DocEngine: Docs_GetUSDocBloc_Description - had problems with description-tags without any line in it -> fixed
  • DocEngine: Docs_RemoveIndent - had inner variable exposed -> fixed
  • Docs: All docs - you can create now a custom.css file in the Documentation-folder to customize the style of the docs
  • Docs: MediaItemStateChunk-docs - added new behavior of Reaper 6.33 to just enclose source-files with " that have a space in filename or path
  • Docs: Reaper Internals - updated to Reaper 6.43 and ReaImGui 0.5.8
  • Docs: Reaper-API-docs - All-View jumped to the top of the document instead of just unhiding functioncalls -> fixed
  • Docs: RenderPreset-Configfile.txt - updated to Reaper 6.43
  • EventManager: general - didn't start on Linux distributions due case-typo in ultraschall_EventManager.lua-filename -> fixed (thanks to dronenb)
  • FileManagement: GetAllDirectoriesInPath - has now an optional filter-parameter, to just get directories of a certain pattern
  • FileManagement: GetAllFilenamesInPath - has now an optional filter-parameter, to just get filenames of a certain pattern; returned pure path as well -> fixed
  • FileManagement: GetAllRecursiveFilesAndSubdirectories - has now optional filter-parameters for folders and files
  • FXManagement: InputFX_GetEQBandEnabled - new bandtypes added, as added by Reaper 6.43
  • FXManagement: InputFX_GetEQParam - new bandtypes added, as added by Reaper 6.43
  • FXManagement: InputFX_SetEQBandEnabled - new bandtypes added, as added by Reaper 6.43
  • FXManagement: InputFX_SetEQParam - new bandtypes added, as added by Reaper 6.43
  • MediaItem Management: InsertMediaItemFromFile - didn't place editcursor correctly at the end of item, when length==-1 -> fixed
  • Mute: ToggleMute - didn't unmute under certain conditions; sometimes created additional envelope-points when unneccessary -> fixed
  • ParmLearn: AddParmLearn_FXStateChunk2 - parameter midi_channel falsely expected to be 0-15 not 1-16 as documented -> fixed(thanks to TonE)
  • ParmLearn: GetParmLearn_FXStateChunk2 - didn't check for non existing ParmLearns and threw nil error -> fixed(thanks to TonE)
  • ParmLearn: SetParmLearn_FXStateChunk2 - had massive errors in the docs -> fixed(thanks to TonE)
  • ProjectManagement: GetProject_Render_Normalize - supports now brickwall-settings
  • ProjectManagement: SetProject_Render_Normalize - supports now brickwall-settings
  • Rendering: AddRenderPreset - supports now brickwall-limiting and output-directory
  • Rendering: ApplyRenderTable_Project - supports now brickwall-limiting
  • Rendering: ApplyRenderTable_ProjectFile - supports now brickwall-limiting
  • Rendering: CreateNewRenderTable - supports now brickwall-limiting
  • Rendering: CreateRenderCFG_WAV - supports now 32 Bit PCM(7) and 8 Bit u-Law(8) as BitDepth
  • Rendering: GetOutputFormat_RenderCfg - supports now CAF as well; returned the decoded render-string only, not the base64-decoded one; the latter is now retval #3
  • Rendering: GetRenderCFG_Settings_AIFF - when passing nil, it returns now the default-project-render-settings for aiff
  • Rendering: GetRenderCFG_Settings_FLAC - when passing nil, it returns now the default-project-render-settings for flac
  • Rendering: GetRenderCFG_Settings_OGG - when passing nil, it returns now the default-project-render-settings for ogg
  • Rendering: GetRenderCFG_Settings_OPUS - when passing nil, it returns now the default-project-render-settings for opus
  • Rendering: GetRenderCFG_WAV - when passing nil, it returns now the default-project-render-settings for wav; supports now 32 Bit PCM(7) and 8 Bit u-Law(8) as BitDepth; returned wrong value as BitDepth -> fixed
  • Rendering: GetRenderCFG_WAVPACK - when passing nil, it returns now the default-project-render-settings for wavpack
  • Rendering: GetRenderCFG_Settings_XXX - all those functions could produce error, when sending in non-Base-64-strings -> fixed
  • Rendering: GetRenderPreset_RenderTable - supports now brickwall-limiting and the output-diretory, if stored; did not return secondary render-string, when having a presetname with spaces in it -> fixed
  • Rendering: GetRenderTable_Project - supports now brickwall-limiting
  • Rendering: GetRenderTable_ProjectFile - supports now brickwall-limiting
  • Rendering: IsValidRenderTable - supports now brickwall-limiting
  • Rendering: RenderProject_RenderTable - didn't return filenames due changes in statechunks in Reaper 6.33 -> fixed(thnx to aurelien)
  • Rendering: SetRenderPreset - supports now brickwall-limiting; didn't set some settings, when normalize-target had + in its value -> fixed
  • Rendering: various - many render-cfg-functions who work with floats didn't work properly -> fixed
  • User Interface: Windows_Find - had inner variable exposed -> fixed

Please update it via ReaPack using: https://github.com/Ultraschall/ultra..._api_index.xml
__________________
Use you/she/her.Ultraschall-Api Lua Api4Reaper - Donate, if you wish

On vacation for the time being...
Meo-Ada Mespotine is offline   Reply With Quote
Old 12-24-2021, 09:31 AM   #736
Meo-Ada Mespotine
Human being with feelings
 
Meo-Ada Mespotine's Avatar
 
Join Date: May 2017
Location: Leipzig
Posts: 6,578
Default

I'm going the change the direction of Ultraschall-API, away from new features, rather focusing more on my initial interest, DevTools and Docs, in the future.

New bugfixes will still come but the new features- and functions-list will be much shorter.

Merry Christmas
__________________
Use you/she/her.Ultraschall-Api Lua Api4Reaper - Donate, if you wish

On vacation for the time being...
Meo-Ada Mespotine is offline   Reply With Quote
Old 12-25-2021, 06:06 AM   #737
TonE
Human being with feelings
 
Join Date: Feb 2009
Location: Reaper HAS send control via midi !!!
Posts: 4,030
Default

Merry Christmas, thanks for the improvements, will check it soon, hopefully. Keep up the great work, Reaper dev friends.
TonE is offline   Reply With Quote
Old 01-04-2022, 04:24 PM   #738
loTrT
Human being with feelings
 
Join Date: Feb 2021
Posts: 13
Default

Hi Mespotine!
thank you so much for you hard work, its incredibily useful and solid.
great that its now possible to get the filenames with RenderProject_RenderTable and set the Brickwall limiter values.

I would like to mention two small bugs in the RenderTable construct:
["RenderResample"] = 10 (it goes up to 10 not only 9 like its instructed in your documentation)
["RenderString"] = IHBkZA== (this is the new DDP RenderString apparently with == at the end of the string and not IHBkZA= as returned by ultraschall.CreateRenderCFG_DDP())
loTrT is offline   Reply With Quote
Old 01-04-2022, 07:27 PM   #739
Meo-Ada Mespotine
Human being with feelings
 
Meo-Ada Mespotine's Avatar
 
Join Date: May 2017
Location: Leipzig
Posts: 6,578
Default

Quote:
Originally Posted by loTrT View Post
Hi Mespotine!
thank you so much for you hard work, its incredibily useful and solid.
great that its now possible to get the filenames with RenderProject_RenderTable and set the Brickwall limiter values.

I would like to mention two small bugs in the RenderTable construct:
["RenderResample"] = 10 (it goes up to 10 not only 9 like its instructed in your documentation)
["RenderString"] = IHBkZA== (this is the new DDP RenderString apparently with == at the end of the string and not IHBkZA= as returned by ultraschall.CreateRenderCFG_DDP())
Hmm, need to look into these. Thanx for pointing them out.

If it's easy to fix, I'll post the update tomorrow or the day after.

Edit:
yes, the DDP was a typo on my side.

The 10 you observed in RenderResample is a new resample-mode "r8brain free". Will add this information to the docs.
__________________
Use you/she/her.Ultraschall-Api Lua Api4Reaper - Donate, if you wish

On vacation for the time being...

Last edited by Meo-Ada Mespotine; 01-04-2022 at 07:33 PM.
Meo-Ada Mespotine is offline   Reply With Quote
Old 01-04-2022, 07:48 PM   #740
Meo-Ada Mespotine
Human being with feelings
 
Meo-Ada Mespotine's Avatar
 
Join Date: May 2017
Location: Leipzig
Posts: 6,578
Default

New Hotfix available:

- ProjectManagement: GetProjectStateChunk - fixed edgecase, that prevented getting a ProjectStateChunk
- RenderManagement: CreateRenderCFG_DDP - returned string was wrong due typo -> fixed(thnx to loTrT)

Please update your ReaPacks
__________________
Use you/she/her.Ultraschall-Api Lua Api4Reaper - Donate, if you wish

On vacation for the time being...
Meo-Ada Mespotine is offline   Reply With Quote
Old 01-07-2022, 06:27 PM   #741
Meo-Ada Mespotine
Human being with feelings
 
Meo-Ada Mespotine's Avatar
 
Join Date: May 2017
Location: Leipzig
Posts: 6,578
Default

New Hotfix available:

- TrackManagement: GetTrackLockState - didn't return lock-state reliably -> fixed(thanx to Distressor)
- WebRC: WebInterface_GetInstalledInterfaces - could break, if html-pages had no title-tag in them -> fixed

Please update your ReaPacks...
__________________
Use you/she/her.Ultraschall-Api Lua Api4Reaper - Donate, if you wish

On vacation for the time being...
Meo-Ada Mespotine is offline   Reply With Quote
Old 01-10-2022, 09:33 AM   #742
Meo-Ada Mespotine
Human being with feelings
 
Meo-Ada Mespotine's Avatar
 
Join Date: May 2017
Location: Leipzig
Posts: 6,578
Default

Notifications test
__________________
Use you/she/her.Ultraschall-Api Lua Api4Reaper - Donate, if you wish

On vacation for the time being...
Meo-Ada Mespotine is offline   Reply With Quote
Old 01-10-2022, 10:49 AM   #743
Meo-Ada Mespotine
Human being with feelings
 
Meo-Ada Mespotine's Avatar
 
Join Date: May 2017
Location: Leipzig
Posts: 6,578
Default

Another Hotfix available:

- MediaItemManagement: GetAllMediaItemsFromTrack - had problems, when a track had no item -> fixed(thnx to Distressor)

Please update your ReaPacks.
__________________
Use you/she/her.Ultraschall-Api Lua Api4Reaper - Donate, if you wish

On vacation for the time being...
Meo-Ada Mespotine is offline   Reply With Quote
Old 01-14-2022, 05:32 AM   #744
Reflected
Human being with feelings
 
Reflected's Avatar
 
Join Date: Jul 2009
Posts: 3,292
Default

Hey Meo-Ada Mespotine

the master of API!

Can you please help here (is it possible somehow?):
https://forum.cockos.com/showthread....47#post2515647
Reflected is offline   Reply With Quote
Old 01-15-2022, 02:09 PM   #745
Meo-Ada Mespotine
Human being with feelings
 
Meo-Ada Mespotine's Avatar
 
Join Date: May 2017
Location: Leipzig
Posts: 6,578
Default

Quote:
Originally Posted by Reflected View Post
Hey Meo-Ada Mespotine

the master of API!

Can you please help here (is it possible somehow?):
https://forum.cockos.com/showthread....47#post2515647
Sorry but I'm not deep enough in the specifics of heda's problem with templates(in fact, I didn't know that aspect, yet).
So I can't help on that one...sorry...
__________________
Use you/she/her.Ultraschall-Api Lua Api4Reaper - Donate, if you wish

On vacation for the time being...
Meo-Ada Mespotine is offline   Reply With Quote
Old 02-22-2022, 09:44 AM   #746
Meo-Ada Mespotine
Human being with feelings
 
Meo-Ada Mespotine's Avatar
 
Join Date: May 2017
Location: Leipzig
Posts: 6,578
Default

4.3 - "Eskobar - Someone New" - 22nd of February 2022

Has now 1457 functions, with 34 new ones

new in this release:
  • ParmLearn-dialog defaults
    You can now get/set the default settings for the Parm-Learn-dialog. So you can now reset it to your preferred settings before learning a new parameter.
  • Media Explorer features
    You can now get/set volume, rate, pitch and even output-channels of the media explorer and various checkboxes.
  • SetItem-functions
    There were set item-function missing, though their get counterpart was there. So, I added more set functions.
  • Rendering - Only Normalize Files That Are Too Loud
    You can now choose, whether to normalize only files that are too loud
  • Rendering FFMPEG-only
    With FFMPEG-dll installed, you have access to more render-output-functions. You can now create render-strings for these formats as well.
  • Developer Tools now automatically installed
    To simplify working with devtools, they are now automatically installed with ReaPack-update.
    If you happen to have some of them duplicated, run the action "ultraschall_Remove_Developertools_From_Reaper.lua "
  • Dev Tool: Log SetProjExtState/SetExtState access
    You can log now, if (proj)extstates are set in the ReaScript-console. That way you can monitor, if setting them runs smoothly.
    Just run the accompanying developer-tool for it.
  • Docs updates for Reaper Internals
  • Bugfixes
    as usual...


New features in 4.3
  • DeveloperTools: Toggle_Logging_SetExtState_SetProjExtState_access - logs set access to (proj)extstates while using US-API to the ReaScript console
  • ErrorMessagingSystem: DAEM - like ultraschall.DeleteAllErrorMessages(), just shorter
  • GFX-Management: GFX_GetTextLayout - returns the flag-value you can use for gfx.setfont, allowing different text-layouts
  • Markers: GetGuidFromNormalMarkerID - gets the guid of a normal marker by its index
  • Markers: GetNormalMarkerIDFromGuid - gets the index of a normal marker by its guid
  • MediaExplorer: MediaExplorer_SetAutoplay - sets the autoplay-checkbox
  • MediaExplorer: MediaExplorer_SetDeviceOutput - sets device-output of the Media Explorer
  • MediaExplorer: MediaExplorer_SetPitch - sets the pitch of the Media Explorer
  • MediaExplorer: MediaExplorer_SetRate - sets the rate of the Media Explorer
  • MediaExplorer: MediaExplorer_SetStartOnBar - sets the Start on bar-checkbox of the Media Explorer
  • MediaExplorer: MediaExplorer_SetVolume - sets the volume of the Media Explorer
  • MediaItems: SetItemAllTakes - sets the all-takes-setting of an item or a mediaitem-statechunk
  • MediaItems: SetItemChanMode - sets the channel mode of an item or a mediaitem-statechunk
  • MediaItems: SetItemFadeIn - sets fadein of an item or a mediaitem-statechunk
  • MediaItems: SetItemFadeOut - sets fadeout of an item or a mediaitem-statechunk
  • MediaItems: SetItemGUID - sets the GUID of an item or a mediaitem-statechunk
  • MediaItems: SetItemIGUID - sets the IGUID of an item or a mediaitem-statechunk
  • MediaItems: SetItemIID - sets the IID of an item or a mediaitem-statechunk
  • MediaItems: SetItemLoop - sets the loop-source-state of an item or a mediaitem-statechunk
  • MediaItems: SetItemMute - sets mutestate of an item or a mediaitem-statechunk
  • MediaItems: SetItemName - sets name of the first take in an item or a mediaitem-statechunk
  • MediaItems: SetItemPlayRate - sets the playrate-settings in an item or a mediaitem-statechunk
  • MediaItems: SetItemSampleOffset - sets the sample offset-state of an item or a mediaitem-statechunk
  • MediaItems: SetItemSelected - sets the selected-state of an item or a mediaitem-statechunk
  • MediaItems: SetItemVolPan - sets the volume and pan-values of an item or a mediaitem-statechunk
  • ParameterLearn: GetParmLearn_Default - gets default-settings for the parameter-learn-dialog(requested by akademie)
  • ParameterLearn: SetParmLearn_Default - sets default-settings for the parameter-learn-dialog(requested by akademie)
  • Rendering: CreateRenderCFG_FLV_Video - creates a render-string for flv export(with FFMPEG installed only)
  • Rendering: CreateRenderCFG_MPEG1_Video - creates a render-string for MPEG-1 export(with FFMPEG installed only)
  • Rendering: CreateRenderCFG_MPEG2_Video - creates a render-string for MPEG-2 export(with FFMPEG installed only)
  • Rendering: GetRenderCFG_Settings_MPEG1_Video - returns settings of render-string for MPEG-1, when FFMPEG is installed
  • Rendering: GetRenderCFG_Settings_MPEG2_Video - returns settings of render-string for MPEG-2, when FFMPEG is installed
  • TrackManagement: ConvertTrackstringToArray - converts all tracknumbers of a trackstring and returns them as an array
  • Themeing: GetAllThemeElements - returns a table with all Walter-theme-element-names available
  • Themeing: GetTrack_ThemeElementPositions - returns a table with all Walter-theme-elements of a track with names, position and visibility-states

    Changes from 4.2.006 to 4.3
  • DeveloperTools: findConfigVarsToggledByActions - fixed dozens of bugs; supports now all config-vars; improved the layout of the output file; has now "do you really want to run me?"-question, as this script could ruin your Reaper installation
  • Docs: Reaper Internals - updated to Reaper 6.47, JS-extension 1.301, ReaImGui 0.5.10, ReaBlink 0.4.4, SWS 2.13.0.0
  • MarkerManagement: AddCustomMarker - returns now the custom-marker-index, within all custom markers only, as well; allows now creating markers with the same name on the same position(workaround for Reaper-limitation)
  • MarkerManagement: AddCustomRegion - returns now the custom-region-index, within all custom regions only, as well; allows now creating regions with the same name on the same position(workaround for Reaper-limitation)
  • MarkerManagement: AddEditMarker - returns now the edit-marker-index, within all edit markers; allows now creating markers with the same name on the same position(workaround for Reaper-limitation)
  • MarkerManagement: AddEditRegion - returns now the edit-region-index, within all edit regions; allows now creating regions with the same name on the same position(workaround for Reaper-limitation)
  • MarkerManagement: AddNormalMarker - returns now the normal-marker-index, within all normal markers; improved automatic numbering; allows now creating markers with the same name on the same position(workaround for Reaper-limitation) -> fixed
  • MarkerManagement: CountNormalMarkers - did count custom-markers as well -> fixed
  • MarkerManagement: CountNormalMarkers_NumGap - didn't count normal markers only, but rather all -> fixed
  • MarkerManagement: EnumerateNormalMarkers - did include custom-markers as well -> fixed
  • MarkerManagement: SetNormalMarker - did set custom-markers as well -> fixed
  • MediaItemManagement: GetAllMediaItemsFromTrack - had problems, when a track had no item -> fixed(thnx to Distressor)
  • MediaItemManagement: SetItemPosition - did return -1 in case of an error, whereas it should return nil instead -> fixed
  • MediaItemManagement: SetItemLength - did return -1 in case of an error, whereas it should return nil instead -> fixed
  • MediaItemManagement: SetItemImage - did return -1 in case of an error, whereas it should return nil instead -> fixed
  • ProjectManagement: GetProjectStateChunk - fixed edgecase, that prevented getting a ProjectStateChunk
  • ProjectManagement: GetProject_Render_Normalize - allows now normalize only files that are too loud-option
  • ProjectManagement: SetProject_Render_Normalize - allows now normalize only files that are too loud-option
  • Rendering: AddRenderPreset - allows now normalize only files that are too loud-option
  • Rendering: ApplyRenderTable_Project - allows now normalize only files that are too loud-option
  • Rendering: ApplyRenderTable_ProjectFile - allows now normalize only files that are too loud-option
  • Rendering: CreateRenderCFG_AVI_Video - added formats that need FFMPEG installed
  • Rendering: CreateRenderCFG_DDP - returned string was wrong due typo -> fixed(thnx to loTrT)
  • Rendering: CreateRenderCFG_MKV_Video - added formats that need FFMPEG installed
  • Rendering: CreateRenderCFG_MOVMAC_Video - removed unused \0-byte at end of render-string -> fixed
  • Rendering: CreateRenderCFG_WebMVideo - added formats that need FFMPEG installed
  • Rendering: GetRenderCFG_Settings_AVI_Video - added formats, that need FFMPEG installed
  • Rendering: GetRenderCFG_Settings_MKV_Video - added formats, that need FFMPEG installed
  • Rendering: GetRenderCFG_Settings_MOVMac_Video - didn't work; was missing the format-dropdownlist-settings -> fixed
  • Rendering: GetRenderCFG_Settings_QTMOVMP4_Video - added video-format-retval; added formats, that need FFMPEG installed
  • Rendering: GetRenderCFG_Settings_WebMVideo - added formats, that need FFMPEG installed
  • Rendering: GetRenderPreset_RenderTable - allows now normalize only files that are too loud-option
  • Rendering: GetRenderTable_Project - allows now normalize only files that are too loud-option
  • Rendering: GetRenderTable_ProjectFile - allows now normalize only files that are too loud-option
  • Rendering: IsValidRenderTable - allows now normalize only files that are too loud-option
  • Rendering: RenderProject_RenderTable - allows now normalize only files that are too loud-option
  • Rendering: SetRenderPreset - allows now normalize only files that are too loud-option
  • TrackManagement: GetTrackLockState - didn't return lock-state reliably -> fixed(thanx to Distressor)
  • UserInterface: GetMediaExplorerHWND - didn't work under certain circumstances -> fixed
  • WebRC: WebInterface_GetInstalledInterfaces - could break, if html-pages had no title-tag in them -> fixed



Please update it via ReaPack using: https://github.com/Ultraschall/ultra..._api_index.xml
__________________
Use you/she/her.Ultraschall-Api Lua Api4Reaper - Donate, if you wish

On vacation for the time being...
Meo-Ada Mespotine is offline   Reply With Quote
Old 04-27-2022, 08:34 AM   #747
Meo-Ada Mespotine
Human being with feelings
 
Meo-Ada Mespotine's Avatar
 
Join Date: May 2017
Location: Leipzig
Posts: 6,578
Default

4.4 - "Dispatch - Open Up" - 27 of April 2022

Has now 1477 functions, with 20 new ones

new in this release:
  • SpectralPeak-View-functions
    You can now set the options for the spectral-peak-view of MediaItems.
  • AddProjectMarker
    This is an alternative to Reaper's own AddProjectMarker-function. It returns the GUID, the index of the added marker
    and fixes some edge-case-issues with the original function.
  • BatchConverter-FXStateChunk
    You can get and set the FXChain of the BatchConverter programmatically, now using FXStateChunks.
  • Docs
    Added functions of the new extensions ReaLim and ReaFab and updated the functions of all other extensions and Reaper itself.
    SetProjExtState and SetExtState-descriptions also include now a list of sections, used by scripts/extensions. That way, you
    can prevent naming conflicts and therefore accidentally overwritten configs/data.
  • Marker-Functions
    Rewritten, so they are much faster now, especially adding markers.
  • DevTool: Marker Guid Displayer
    This one displays the index, guid and name of all markers/regions in the current project.
    This way, you can monitor, if your marker-functions get the correct guids from a marker.
  • Bugfixes
    Per tradition...

New features in 4.4
  • BatchConverter: GetBatchConverter_NotifyWhenFinished - gets the state of the "notify when finished"-checkbox
  • BatchConverter: SetBatchConverter_NotifyWhenFinished - sets the state of the "notify when finished"-checkbox
  • DeveloperTools: Display All Marker Region Guids - monitors all marker/region-guids in the ReaScript-console
  • DeveloperTools: Display_ExtStateSectionsOfScriptsInFolder - displays all set-extstate-sections used in scripts within a folder
  • DeveloperTools: Display_ProjExtStateSectionsOfScriptsInFolder - displays all set-projextstate-sections used in scripts within a folder
  • Docs: Reaper Internals - added ReaLim 0.3.0 and ReaFab 0.3.10
  • FXManagement: GetBatchConverter_FXStateChunk - gets the FXChain currently used by the BatchConverter
  • FXManagement: SetBatchConverter_FXStateChunk - sets the FXChain used by the BatchConverter
  • Markers: AddProjectMarker - an alternative to Reaper's own function, that covers some edgecases and returns guid and actual marker/region-index as well
  • Markers: GetEditMarkerIDFromGuid - gets an edit-marker id by its guid
  • Markers: GetEditRegionIDFromGuid - gets an edit-marker id by its guid
  • Markers: GetGuidFromEditMarkerID - gets the guid of an edit-marker
  • Markers: GetGuidFromEditRegionID - gets the guid of an edit-marker
  • MetaData: MetaDataTable_Create - returns an empty metadatatable, which holds all possible metadata-entries
  • MetaData: MetaDataTable_GetProject - returns a metadatatable, which holds all metadata-entries of the current project
  • Projects: Main_SaveProject - saves a project and allows giving it a filename
  • Render: GetRenderTable_ProjectDefaults - returns a rendertable with all render settings of the project's defaults
  • SpectralView: SpectralPeak_GetColorAttributes - gets noise-threshold, opacity and variance of the spectral view
  • SpectralView: SpectralPeak_GetMaxColor - returns the maxmium color of the spectral view
  • SpectralView: SpectralPeak_GetMinColor - returns the minimum color of the spectral peak view
  • SpectralView: SpectralPeak_SetColorAttributes - sets noise-threshold, opacity and variance of the spectral view
  • SpectralView: SpectralPeak_SetMaxColor - sets the maximum color of the spectral peak view
  • SpectralView: SpectralPeak_SetMaxColor_Relative - sets the spectrum color of the spectral peak view, relative to the minimum spectral-view color
  • SpectralView: SpectralPeak_SetMinColor - sets the minimum color of the spectral peak view

Changes from 4.3 to 4.4
  • DeveloperTools: Config Var Displayer - crashed, when double-value is NaN -> fixed
  • Docs: Reaper API-docs - restructured the index into more useful categories; updated to Reaper 6.56, ReaImGui 0.6.1 and ReaPack 1.2.4
  • FileManagement: CreateValidTempFile - raised number of potential temp-file-variants to 2147483648
  • HelperFunctions: Main_OnCommandByFilename - didn't remove temporary scripts sometimes due Reaper bug -> fixed
  • HelperFunctions: MIDI_OnCommandByFilename - didn't remove temporary scripts sometimes, partially due Reaper bug -> fixed
  • Markers: AddCustomMarker - reworked code so it's faster now; sometimes, the returned guid could be wrong -> fixed
  • Markers: AddCustomRegion - reworked code so it's faster now; sometimes, the returned guid could be wrong -> fixed
  • Markers: AddEditMarker - reworked code so it's faster now; sometimes, the returned guid could be wrong -> fixed
  • Markers: AddEditRegion - reworked code so it's faster now; sometimes, the returned guid could be wrong -> fixed
  • Markers: AddNormalMarker - reworked code so it's faster now; sometimes, the returned guid could be wrong -> fixed
  • Markers: GetGuidFromNormalMarkerID - returned -1 in case of an error, though this makes no sense -> returns nil now
  • Markers: GetNormalMarkerIDFromGuid - returned nil or guid when no normal marker was found instead of -1 -> fixed
  • ProjectManagement: GetProjecStateChunk - didn't work under certain circumstances -> fixed
  • ProjectManagement: IsValidReaProject - didn't return true when parameter was 0, though it being a valid project -> fixed
  • Render: GetRender_ResampleMode - didn't return correct resample-mode when Render to File-Dialog was open(Reaper 6.43+) -> fixed
  • Render: GetRenderTable_Project - didn't correctly return "CloseAfterRender" -> fixed
  • Render: SetRender_ResampleMode - didn't set correct resample-mode when Render to File-Dialog was open(Reaper 6.43+) -> fixed
  • UserInterface: GetBatchFileItemConverterHWND - didn't return hwnd of batch-converter anymore -> fixed

Please update it via ReaPack using: https://github.com/Ultraschall/ultra..._api_index.xml
__________________
Use you/she/her.Ultraschall-Api Lua Api4Reaper - Donate, if you wish

On vacation for the time being...
Meo-Ada Mespotine is offline   Reply With Quote
Old 05-03-2022, 11:11 AM   #748
Gandhi360
Human being with feelings
 
Join Date: Apr 2022
Posts: 4
Default

Hi Mespotine,

First off, I wanted to thank you for your hard work!

I ran into severe performance issues when working with parmModTables, specifically GetFXStateChunk and SetFXStateChunk.

In my project, I have one track with a lot of FX automations which I want to link to another FX on the same track multiple times.
So for example, I have one "source" automation for one FX param, which I want to link to 50 different "target" FX params.

What I do code wise (pseudo code):
Code:
trackStateChunk = GetTrackStateChunk_Tracknumber(1)
Loop over 50 "targets" and in the loop and do all of the following:
fxStateChunk = GetFXStateChunk(trackStateChunk)
CreateDefaultParmModTable()
Adjust parmModTable according to my needs (change PARAM_NR, set PARMLINK and other stuff)
updatedFxStateChunk = AddParmMod_ParmModTable(fxStateChunk)
SetFXStateChunk(trackStateChunk, updatedFxStateChunk)
SetTrackStateChunk_Tracknumber(1, updatedTrackStateChunk)
This works perfectly, but each call to Get/SetFXStateChunk takes about 30 seconds, so in this case it's actually faster to do it manually. So I tried to optimize the performance by having to call Get/SetFXStateChunk only once:
Code:
trackStateChunk = GetTrackStateChunk_Tracknumber(1)
fxStateChunk = GetFXStateChunk(trackStateChunk)
Loop over 50 "targets" and in the loop and do all of the following:
CreateDefaultParmModTable()
Adjust parmModTable according to my needs (change PARAM_NR, set PARMLINK and other stuff)
fxStateChunk = AddParmMod_ParmModTable(fxStateChunk)
after loop do:
SetFXStateChunk(trackStateChunk, updatedFxStateChunk)
SetTrackStateChunk_Tracknumber(1, updatedTrackStateChunk)
When I do it like this, only the last FX param is edited. Is it because AddParmMod_ParmModTable can't be used on the same FXStateChunk without "writing" it back to the track first? Or is there a problem with how I am referencing variables (since I am a LUA noob)?

Actual and only relevant code ("optimized variant"):
Code:
_, trackStateChunk = ultraschall.GetTrackStateChunk_Tracknumber(1)
fxStateChunk = ultraschall.GetFXStateChunk(trackStateChunk)
updatedFxStateChunk = fxStateChunk

-- executed on button press
function main()
    source = sourceTable[GUI.Val("Listbox1")] + 1
    targetsString = GUI.Val("Textbox2")
    targets = splitString(targetsString, ",")
    shouldInvert = GUI.Val("Checklist1")
    offset = tonumber(GUI.Val("Textbox3"))

    for key,value in pairs(targets) do
        parmModTable = ultraschall.CreateDefaultParmModTable();
        parmModTable["PARAM_NR"] = math.floor((value + 16))
        parmModTable["PARAM_TYPE"] = ""
        parmModTable["PARAMOD_ENABLE_PARAMETER_MODULATION"] = true
        parmModTable["PARMLINK"] = true
        parmModTable["PARMLINK_LINKEDPLUGIN"] = 2
        parmModTable["PARMLINK_LINKEDPARMIDX"] = source
        parmModTable["PARAMOD_BASELINE"] = offset
        parmModTable["PARMLINK_OFFSET"] = 0
        parmModTable["PARMLINK_SCALE"] = 1.00

        if (shouldInvert == true) then
            parmModTable["PARMLINK_OFFSET"] = -1.00
            parmModTable["PARMLINK_SCALE"] = -1.00
        end
        
        updatedFxStateChunk = ultraschall.AddParmMod_ParmModTable(fxStateChunk, 1, parmModTable)
    end
end

-- executed on separate button press
function save()
    success, updatedTrackStateChunk = ultraschall.SetFXStateChunk(trackStateChunk, updatedFxStateChunk)
    success = ultraschall.SetTrackStateChunk_Tracknumber(1, updatedTrackStateChunk)
end
Thanks again!
Gandhi360 is offline   Reply With Quote
Old 05-05-2022, 03:51 AM   #749
Meo-Ada Mespotine
Human being with feelings
 
Meo-Ada Mespotine's Avatar
 
Join Date: May 2017
Location: Leipzig
Posts: 6,578
Default

Hmmm.

I think, I need to see all of it myself.

Could you do the following:

1. create a project with the fx BEFORE you add parameter-modulation
2. create a second project, which is a copy of the first project but you add the parameter-modulation by hand(!) so I see, what the intended result shall be.
3. create a third project, which is also a copy of the first project, but this time, you apply parameter-modulation with your code.
4. the code itself(unless it's the one from your post, then I'll take that one)
?

Post the rpp-files+code in here and I see, what I can do.

Keep in mind, that FXStateChunks can become very big with some plugins(like orchestra libraries, etc) so that could be actually the performance-bottleneck and therefore hard to optimize. So if that's the case, it might stay slow, no matter what. But maybe, in that case, I could try to improve it somewhat with your project-examples.

PS: it looks like you use Lokasenna's Gui-Lib in your code. Is this dependence important or can I ignore these portions?
__________________
Use you/she/her.Ultraschall-Api Lua Api4Reaper - Donate, if you wish

On vacation for the time being...
Meo-Ada Mespotine is offline   Reply With Quote
Old 05-06-2022, 05:28 AM   #750
Meo-Ada Mespotine
Human being with feelings
 
Meo-Ada Mespotine's Avatar
 
Join Date: May 2017
Location: Leipzig
Posts: 6,578
Default

PAAARTTYYYY!!! 1500 functions!!!


## Ultraschall Framework - Changelog

4.5 - "Frank Zappa - Help I'm a Rock" - 6th of May 2022

Has now 1500 functions, with 23 new ones

new in this release:
  • Celebration Time
    Because, I reached 1500 functions for Ultraschall-API. In the beginning, I was sure, that I would maybe have potential for
    300 functions.
    I somehow overdid it, did I? XD
  • Razor Edit
    I gave Razor Edit some love, so you can nudge, add and remove razor-edit-areas much easier for tracks or individual TrackEnvelopes.
  • AutomationItems
    As I needed to bugfix the split and delete-functions for Automation Items, I added some functions to mass-set the select states of automation-items.
  • Developer Actions for ReaScripts
    Need to quickly reopen the last edited script? Or want to open up another and you're too lazy to open up the
    actionlist?
    Behold, new developer-functions do this for you.
    And if you need to open up quickly a new temporary-script to write some small test-code-snippet, you can do it as well.
  • EditReaScript
    Always bothered, that the newly opened script doesn't immediately hold, what you need to start working right away?
    Well, EditReaScript can now automatically add some default-lines into a newly created script. So if you need to
    add your ReaPack-index-information time and again, use this new parameter to make stuff easier for you.
  • Bugfixes
    You're used to it, aren't you?

    ...up to the next 1500 functions, as soon as my overtyped numb fingers can type again... XD

New features in 4.5
  • AutomationItems: AutomationItem_DeselectAllInTrack - deselects all automation-items in a TrackEnvelope
  • AutomationItems: AutomationItem_DeselectAllSelectStates - deselects all automation-items in all TrackEnvelopes
  • AutomationItems: AutomationItem_GetAllSelectStates - get all automationitem-selection-states in all TrackEnvelopes
  • AutomationItems: AutomationItem_GetSelectStates - get all automationitem-selection-states in a TrackEnvelope
  • AutomationItems: AutomationItem_SelectMultiple - sets selection-state multiple automation-items in a TrackEnvelope
  • DeveloperTools: Create New Temporary Unlisted Lua ReaScript - creates a new temporary script, that isn't listed in the actionlist
  • DeveloperTools: Open Last ReaScript - opens the last edited ReaScript
  • DeveloperTools: Open A ReaScript with Dialog - opens a ReaScript, with a file-chooser-dialog
  • HelperFunctions: GetSetIDEAutocompleteSuggestions - gets/sets the number of suggestions in the IDE for autocomplete
  • Markers: GetTemporaryMarker - retrieves temporarily stored markers/regions for later use
  • Markers: StoreTemporaryMarker - temporarily stores markers/regions for later use
  • RazorEdit: RazorEdit_Add_Envelope - adds a razor-edit-area to a TrackEnvelope
  • RazorEdit: RazorEdit_Add_Track - adds a razor-edit-area to a Track
  • RazorEdit: RazorEdit_CountAreas_Envelope - counts the number of razor-edit-areas in a specific envelope
  • RazorEdit: RazorEdit_CountAreas_Track - counts the number of razor-edit-areas in a track(excluding envelopes)
  • RazorEdit: RazorEdit_GetRazorEdits_Track - returns all razor-edit-areas of a track
  • RazorEdit: RazorEdit_Nudge_Track - nudges the razor-edit-areas of a track
  • RazorEdit: RazorEdit_Nudge_Envelope - nudges the razor-edit-areas of a specific envelope
  • RazorEdit: RazorEdit_Remove - removes all razor-edit-areas of a track including its envelopes
  • RazorEdit: RazorEdit_Remove_Envelope - removes a razor-edit-area from a TrackEnvelope
  • RazorEdit: RazorEdit_RemoveFromEnvelope - removes all razor-edit-areas of a TrackEnvelope
  • RazorEdit: RazorEdit_RemoveFromTrack - removes all razor-edit-areas of a track, leaving envelopes untouched
  • RazorEdit: RazorEdit_Remove_Track - removes a razor-edit-area from a Track
  • Rendering: GetSetRenderBlocksize - gets/sets the render-blocksize
  • TrackStates: GetTrackPlayOffsState - get the Media Playback Offset-entry of a track
  • TrackStates: SetTrackPlayOffsState - sets the Media Playback Offset-entry of a track

    Changes from 4.4 to 4.5
  • AutomationItem_Delete - did also delete selected automation-items in other TrackEnvelopes -> fixed(thanx to X-Raym)
  • AutomationItem_Split - did also split automation-items in other TrackEnvelopes under certain conditions -> fixed(thanx to X-Raym)
  • Docs: general - anchors in the index of documents didn't scroll correctly -> fixed
  • HelperFunctions: Create2DTable - did create a 3d-table instead, when using default-values -> fixed
  • HelperFunctions: Create3DTable - did create a 4d-table instead, when using default-values -> fixed
  • HelperFunctions: EditReaScript - has new parameter that allows setting default-lines into a newly created script; returns now, if script had been created or already existed; always uses the last edited script as set in reaper.ini when filename==nil
  • HelperFunctions: MKVOL2DB - returned -44 instead of -144 as minimum dB-value -> fixed
  • RazorEdit: RazorEdit_GetAllRazorEdits - allows now excluding track and/or envelope-razoredit-areas from the list
  • TrackStates: SetTrackAutoRecArmState - reimplemented with a cleaner codebase(hopefully future proof)
  • UserInterface: GetItemButtonsVisible - added "hide when take is less than xx pixel"-option
  • UserInterface: SetItemButtonsVisible - added "hide when take is less than xx pixel"-option; optional parameter weren't optional -> fixed

Please update it via ReaPack using: https://github.com/Ultraschall/ultra..._api_index.xml
__________________
Use you/she/her.Ultraschall-Api Lua Api4Reaper - Donate, if you wish

On vacation for the time being...
Meo-Ada Mespotine is offline   Reply With Quote
Old 05-08-2022, 09:38 AM   #751
Gandhi360
Human being with feelings
 
Join Date: Apr 2022
Posts: 4
Default

Quote:
Originally Posted by Meo-Ada Mespotine View Post
Hmmm.

I think, I need to see all of it myself.

Could you do the following:

1. create a project with the fx BEFORE you add parameter-modulation
2. create a second project, which is a copy of the first project but you add the parameter-modulation by hand(!) so I see, what the intended result shall be.
3. create a third project, which is also a copy of the first project, but this time, you apply parameter-modulation with your code.
4. the code itself(unless it's the one from your post, then I'll take that one)
?

Post the rpp-files+code in here and I see, what I can do.

Keep in mind, that FXStateChunks can become very big with some plugins(like orchestra libraries, etc) so that could be actually the performance-bottleneck and therefore hard to optimize. So if that's the case, it might stay slow, no matter what. But maybe, in that case, I could try to improve it somewhat with your project-examples.

PS: it looks like you use Lokasenna's Gui-Lib in your code. Is this dependence important or can I ignore these portions?
Thanks for getting back so quickly!

I prepared and attached everything you requested to this post.
The two plugins I use can be downloaded for free:
DMXIS (1.7.4): https://www.dmxis.com/download/
Lightjams: https://www.lightjams.com/vst-dmx.html

I'll try to go a bit more in depth on what I am trying to achieve, what exactly the problem is and how to replicate it.

The use-case:
I programmed a light show for my band. All light is controlled via MIDI, which is then translated into DMX by using the DMXIS VST and the corresponding hardware, so the lights can actually understand the input. We often want to use the lights from the venue and since every venue has different lights and different DMX channel assignments, I have to assign these channels for every show.
My very first approach was to just use the DMXIS VST, add a modulation track for the corresponding channel and just copy and paste the needed automation points from another track. This became very tedious, since I don't want to do the exact same step up to 512 times for every show we play.
My second approach was to use the Lightjams VST (mainly because I can't run two instances of DMXIS at the same time) for my "main automation tracks". So on FX param 1, I created the automation track for the red-channel for RGB-lights, 2 for green and so on. Since most of the time there is more than 1 RGB-light on a stage, instead of copy and pasting the automation track for every light and every channel, I started linking the automation track. So for example I linked the DMXIS channels 1, 4, 7, 10 to channel (or FX param) 1 from Lightjams, channels 2, 5, 8, 11 to 2 and so on.
This is still tedious, but a lot more manageable. But still, for quick adjustments 1 hour before a show, it's not feasible. So I wanted to write a script which does the linking for me, where I just give it the input (source: 1, targets: 1,4,7,10).

The problem:
I tested and optimized the script on an almost blank project, much like the projects you requested, and it worked perfectly and fast. But when I used it in my actual project with all the automation tracks in it, the performance tanked extremely. I had to wait around 8 mins for 16 links (Working_But_Slow_Script).
I was able to optimize the speed and workflow a bit. I wanted to insert all my links into the FXStateChunk first, then set the FXStateChunk and TrackStateChunk via a separate button press only once, so GetFXStateChunk and SetFXStateChunk each would only have to be called once - GET at the start and SET at the end of the process. The speed is now feasible, but the script is only linking the last target (i.e. I enter targets: 1,4,7,10 - only 10 gets linked) (Fast_But_Semi_Functional_Script).
This is my main Problem right now. I want to edit the FXStateChunk "in memory" by adding my param modulation, before writing it back to the track, but I just don't get it to work.

Replication:
"Working_But_Slow_Script" will work just fine in the example projects. Once you try using it in the real project, it will load instantly, but once you entered the source and targets and hit "RUN", it will take a lot of time, depending on the amount of targets, but eventually finish.

The bug in "Fast_But_Semi_Functional_Script" can be seen in example project 3.
What I did (starting point is example project 1):
1. Run "Fast_But_Semi_Functional_Script"
2. Choose "RGB - R" in List, enter "1,4,7,10,13,16,19,22,25" as targets
3. Hit "RUN" button
4. Repeat step 2-3 for "RGB - G" and "RGB - B" in the same way, with +1 in the targets (so 2,5,8... for RGB - G and 3,6,9... for RGB - B)
5. Hit "SAVE" button

After this, only channel 27 in the DMXIS FX is correctly linked - all others don't have any link. The result should be like in example project 2.
If you run "Fast_But_Semi_Functional_Script" in the real project, it will take around 30 seconds to load (GetFXParamChunk to show the List) and 30 seconds when you hit "SAVE" (SetFXParamChunk). This is bearable, but if there's also a way to improve this, I'd be very happy.


Regarding Lokasenna's Gui-Lib:
If you want to try out the script out of the box, it's probably the fastest to just use the dependency before rewriting stuff for the inputs.

Whew, a lot of words, but I hope it helps you track down the problem as this would save me a lot of time and tedious work! Just let me know if anything it not clear or you need anything else.
Attached Files
File Type: zip 4_Real_Project.zip (161.2 KB, 55 views)
File Type: lua Working_But_Slow_Script.lua (4.0 KB, 57 views)
File Type: lua Fast_But_Semi_Functional_Script.lua (4.6 KB, 58 views)
File Type: zip 1-3_Example_Projects.zip (16.4 KB, 56 views)
Gandhi360 is offline   Reply With Quote
Old 05-10-2022, 04:57 AM   #752
Meo-Ada Mespotine
Human being with feelings
 
Meo-Ada Mespotine's Avatar
 
Join Date: May 2017
Location: Leipzig
Posts: 6,578
Default

Quote:
Originally Posted by Gandhi360 View Post
Thanks for getting back so quickly!

I prepared and attached everything you requested to this post.
The two plugins I use can be downloaded for free:
DMXIS (1.7.4): https://www.dmxis.com/download/
Lightjams: https://www.lightjams.com/vst-dmx.html

I'll try to go a bit more in depth on what I am trying to achieve, what exactly the problem is and how to replicate it.

The use-case:
I programmed a light show for my band. All light is controlled via MIDI, which is then translated into DMX by using the DMXIS VST and the corresponding hardware, so the lights can actually understand the input. We often want to use the lights from the venue and since every venue has different lights and different DMX channel assignments, I have to assign these channels for every show.
My very first approach was to just use the DMXIS VST, add a modulation track for the corresponding channel and just copy and paste the needed automation points from another track. This became very tedious, since I don't want to do the exact same step up to 512 times for every show we play.
My second approach was to use the Lightjams VST (mainly because I can't run two instances of DMXIS at the same time) for my "main automation tracks". So on FX param 1, I created the automation track for the red-channel for RGB-lights, 2 for green and so on. Since most of the time there is more than 1 RGB-light on a stage, instead of copy and pasting the automation track for every light and every channel, I started linking the automation track. So for example I linked the DMXIS channels 1, 4, 7, 10 to channel (or FX param) 1 from Lightjams, channels 2, 5, 8, 11 to 2 and so on.
This is still tedious, but a lot more manageable. But still, for quick adjustments 1 hour before a show, it's not feasible. So I wanted to write a script which does the linking for me, where I just give it the input (source: 1, targets: 1,4,7,10).

The problem:
I tested and optimized the script on an almost blank project, much like the projects you requested, and it worked perfectly and fast. But when I used it in my actual project with all the automation tracks in it, the performance tanked extremely. I had to wait around 8 mins for 16 links (Working_But_Slow_Script).
I was able to optimize the speed and workflow a bit. I wanted to insert all my links into the FXStateChunk first, then set the FXStateChunk and TrackStateChunk via a separate button press only once, so GetFXStateChunk and SetFXStateChunk each would only have to be called once - GET at the start and SET at the end of the process. The speed is now feasible, but the script is only linking the last target (i.e. I enter targets: 1,4,7,10 - only 10 gets linked) (Fast_But_Semi_Functional_Script).
This is my main Problem right now. I want to edit the FXStateChunk "in memory" by adding my param modulation, before writing it back to the track, but I just don't get it to work.

Replication:
"Working_But_Slow_Script" will work just fine in the example projects. Once you try using it in the real project, it will load instantly, but once you entered the source and targets and hit "RUN", it will take a lot of time, depending on the amount of targets, but eventually finish.

The bug in "Fast_But_Semi_Functional_Script" can be seen in example project 3.
What I did (starting point is example project 1):
1. Run "Fast_But_Semi_Functional_Script"
2. Choose "RGB - R" in List, enter "1,4,7,10,13,16,19,22,25" as targets
3. Hit "RUN" button
4. Repeat step 2-3 for "RGB - G" and "RGB - B" in the same way, with +1 in the targets (so 2,5,8... for RGB - G and 3,6,9... for RGB - B)
5. Hit "SAVE" button

After this, only channel 27 in the DMXIS FX is correctly linked - all others don't have any link. The result should be like in example project 2.
If you run "Fast_But_Semi_Functional_Script" in the real project, it will take around 30 seconds to load (GetFXParamChunk to show the List) and 30 seconds when you hit "SAVE" (SetFXParamChunk). This is bearable, but if there's also a way to improve this, I'd be very happy.


Regarding Lokasenna's Gui-Lib:
If you want to try out the script out of the box, it's probably the fastest to just use the dependency before rewriting stuff for the inputs.

Whew, a lot of words, but I hope it helps you track down the problem as this would save me a lot of time and tedious work! Just let me know if anything it not clear or you need anything else.
Ok, give me a few days to have a look. In case that I haven't answered after three weeks, give me a quick reminder in this thread, as in that case, it got swept under(there's a lot going on in my life right now, so this could happen unintentionally.)
__________________
Use you/she/her.Ultraschall-Api Lua Api4Reaper - Donate, if you wish

On vacation for the time being...
Meo-Ada Mespotine is offline   Reply With Quote
Old 05-19-2022, 07:44 AM   #753
Meo-Ada Mespotine
Human being with feelings
 
Meo-Ada Mespotine's Avatar
 
Join Date: May 2017
Location: Leipzig
Posts: 6,578
Default

4.6 - "Can - Halleluwah" - 19th of May 2022

Has now 1532 functions, with 32 new ones

new in this release:
  • FromPoint-functions
    You can get now Razor-Edits, TrackEnvelopes and TakeEnvelopes by their coordinates.
  • Razor-Edit-specials
    New Razor-Edit functions in general. Remove now by index and get, if at a specific position is a razor-edit or a gap between them.
    You can also check, whether a certain area overlaps with already existing razor-edit-areas.
  • JSFX-reload
    If you develop JSFX in an external editor and would like to update them in a project to use the latest version, you get functions to do so.
    This should speed up developing and testing jsfx a little better.
    Allows track, take and inputfx!
  • Windows Media Foundation support, as added per Reaper 6.57
  • Shownotes for podcasts
    A new marker-type, that allows storing shownotes. Will be enhanced within the next few releases for additional metadata.
  • User Interface functions for HWND
    More comfortable functions for getting Transport, Arrange and TCP.

New features in 4.6
  • DeveloperTools: MonitorRenderString_Diff - monitors the diffs of the render-string, when setting them in the RenderToFile-dialog and hit Save Settings
  • Envelopes: GetAllActiveEnvelopes_Take - returns all active take-envelopes
  • Envelopes: GetAllActiveEnvelopes_Track - returns all active track-envelopes
  • Envelopes: GetTakeEnvelopeFromPoint - returns the take-envelope at a certain coordinate
  • Envelopes: GetTrackEnvelopeFromPoint - returns the track-envelope at a certain coordinate
  • Envelopes: IsEnvelopeTrackEnvelope - checks, whether an Envelope is a TrackEnvelope
  • FXManagement: InputFX_JSFX_Reload - reloads a jsfx in inputfx, when you've changed the jsfx-source-file
  • FXManagement: TakeFX_JSFX_Reload - reloads a jsfx in a take, when you've changed the jsfx-source-file
  • FXManagement: TrackFX_JSFX_Reload - reloads a jsfx in a track, when you've changed the jsfx-source-file
  • Markers: AddShownoteMarker - adds a shownote-marker
  • Markers: CountShownoteMarkers - counts shownote-markers in a project
  • Markers: DeleteShownoteMarker - deletes a shownote-marker
  • Markers: EnumerateShownoteMarkers - gets a shownote-marker
  • Markers: GetGuidFromShownoteMarkerID - gets the guid of a shownote marker by its index
  • Markers: GetShownoteMarkerIDFromGuid - gets the index of a shownote marker by its guid
  • Markers: IsMarkerShownote - returns, if a marker is a shownote
  • Markers: SetShownoteMarker - sets an already existing shownote-marker
  • MidiEditor: MidiEditor_GetFixOverlapState - gets the Automatically Correct Overlapping Notes-option, as set in the Midi-Editor -> Options-menu
  • MidiEditor: MidiEditor_SetFixOverlapState - sets the Automatically Correct Overlapping Notes-option, as set in the Midi-Editor -> Options-menu
  • PodcastMetadata: PrepareChapterMarkers4ReaperExport - prepares chaptermarkers for metadata-export during rendering
  • PodcastMetadata: RestoreChapterMarkersAfterReaperExport - restores chaptermarkers after metadata-export during rendering
  • RazorEdit: RazorEdit_CheckForPossibleOverlap_Envelope - checks, whether a certain area overlaps with already existing razor-edit-areas of an envelope
  • RazorEdit: RazorEdit_CheckForPossibleOverlap_Track - checks, whether a certain area overlaps with already existing razor-edit-areas of a track
  • RazorEdit: RazorEdit_GetFromPoint - gets a razor-edit-area/gap by coordinate
  • RazorEdit: RazorEdit_IsAtPosition_Envelope - checks, if track has a razor-edit-area or a gap at position; also returns the position of the razor-edit-area or gap at position
  • RazorEdit: RazorEdit_IsAtPosition_Track - checks, if envelope has a razor-edit-area or a gap at position; also returns the position of the razor-edit-area or gap at position
  • RazorEdit: RazorEdit_RemoveByIndex_Envelope - removes a razor-edit-area by its index from an envelope
  • RazorEdit: RazorEdit_RemoveByIndex_Track - removes a razor-edit-area by its index from a track(envelopes stay untouched)
  • Rendering: CreateRenderCFG_WMF_Video - creates the format-settings of the windows media foundation-formats(MPEG-4, mp4, m4a)
  • Rendering: GetRenderCFG_Settings_WMF - gets the format-settings of the windows media foundation-formats(MPEG-4, mp4, m4a)
  • UserInterface: GetHWND_ArrangeView - returns hwnd of the arrangeview, its visible area and right of arrange-state
  • UserInterface: GetHWND_TCP - returns hwnd of the track control panel, its visible area and right of arrange-state
  • UserInterface: GetHWND_Transport - returns hwnd, position, float, dock and hidden-state of transport

    Changes from 4.5 to 4.6
  • Clipboard: PutMediaItemsToClipboard_MediaItemArray - could potentially create an undo-point -> fixed
  • Docs: Reaper Internals - updated to Reaper 6.58, SWS 2.13.1.0
  • MediaItems: ApplyActionToMediaItem - doesn't create an undo point anymore
  • MediaItems: ApplyActionToMediaItemArray2 - doesn't create an undo point anymore
  • MediaItems: GetAllMediaItemsInTimeSelection - doesn't create an undo point anymore
  • MediaItems: SetMediaItemsSelected_TimeSelection - doesn't create an undo point anymore; has now parameter for only items that are completely inside the time-selection
  • RazorEdit: RazorEdit_Remove_Envelope - accidentally removed items on first track -> fixed
  • RazorEdit: RazorEdit_Remove_Track - accidentally removed items on first track -> fixed
  • Rendering: AddSelectedItemsToRenderQueue - had inner variable exposed; could potentially create undo-points -> fixed

Please update it via ReaPack using: https://github.com/Ultraschall/ultra..._api_index.xml
__________________
Use you/she/her.Ultraschall-Api Lua Api4Reaper - Donate, if you wish

On vacation for the time being...
Meo-Ada Mespotine is offline   Reply With Quote
Old 05-25-2022, 03:26 PM   #754
daxliniere
Human being with feelings
 
daxliniere's Avatar
 
Join Date: Nov 2008
Location: London, UK
Posts: 2,549
Default

Hey Meo-Ada,
Have you found a way to access the "peaks display zoom for project" settings?
Actions 40155 and 40156 adjust peaks display zoom, but there is no action to reset to 100%.
__________________
Puzzle Factory Sound Studios, London [Website] [Instagram]
[AMD 5800X, 32Gb RAM, Win10x64, NVidia GTX1080ti, UAD2-OCTO, FireFaceUCX, REAPER x64]
[Feature request: More details in Undo History]
daxliniere is offline   Reply With Quote
Old 05-25-2022, 04:05 PM   #755
Edgemeal
Human being with feelings
 
Edgemeal's Avatar
 
Join Date: Apr 2016
Location: ASU`ogacihC
Posts: 3,892
Default

Quote:
Originally Posted by daxliniere View Post
Hey Meo-Ada,
Have you found a way to access the "peaks display zoom for project" settings?
Actions 40155 and 40156 adjust peaks display zoom, but there is no action to reset to 100%.
What about 42449?
Peaks: Reset peaks display zoom for project
Edgemeal is offline   Reply With Quote
Old 05-26-2022, 07:19 AM   #756
daxliniere
Human being with feelings
 
daxliniere's Avatar
 
Join Date: Nov 2008
Location: London, UK
Posts: 2,549
Default

Quote:
Originally Posted by Edgemeal View Post
What about 42449?
Peaks: Reset peaks display zoom for project
AHHH! This didn't exist when I first started using REAPER! Thank you, Edgemeal!

This has been a bug bear for years now!
__________________
Puzzle Factory Sound Studios, London [Website] [Instagram]
[AMD 5800X, 32Gb RAM, Win10x64, NVidia GTX1080ti, UAD2-OCTO, FireFaceUCX, REAPER x64]
[Feature request: More details in Undo History]
daxliniere is offline   Reply With Quote
Old 06-06-2022, 08:43 AM   #757
Gandhi360
Human being with feelings
 
Join Date: Apr 2022
Posts: 4
Default

Quote:
Originally Posted by Meo-Ada Mespotine View Post
Ok, give me a few days to have a look. In case that I haven't answered after three weeks, give me a quick reminder in this thread, as in that case, it got swept under(there's a lot going on in my life right now, so this could happen unintentionally.)
Hey there! Just wanted to throw in the reminder you mentioned. I hope life got a bit easier for you over the last few weeks but if there is still a lot going on, please do not feel pressured and take the time you need!
Gandhi360 is offline   Reply With Quote
Old 06-16-2022, 09:06 AM   #758
Meo-Ada Mespotine
Human being with feelings
 
Meo-Ada Mespotine's Avatar
 
Join Date: May 2017
Location: Leipzig
Posts: 6,578
Default

Quote:
Originally Posted by Gandhi360 View Post
Hey there! Just wanted to throw in the reminder you mentioned. I hope life got a bit easier for you over the last few weeks but if there is still a lot going on, please do not feel pressured and take the time you need!
Hadn't the time yet, but if it's a bug on my side, it will definitely fixed with the next release(unless it's something unfixable...but I hope it's not).
I promise
__________________
Use you/she/her.Ultraschall-Api Lua Api4Reaper - Donate, if you wish

On vacation for the time being...
Meo-Ada Mespotine is offline   Reply With Quote
Old 07-08-2022, 09:10 AM   #759
aurelien
Human being with feelings
 
Join Date: Apr 2014
Posts: 94
Default

Hi mespotine,
Small error in ultraschall_functions_Render_Module.lua, the GetRender_AutoIncrementFilename function is always returning true.

It seems it's related to how you handle the SNM_GetIntConfigVar return value, i fixed it this way, but i don't know exactly how the SNM_GetIntConfigVar is working.

Code:
function ultraschall.GetRender_AutoIncrementFilename()
--[[
<US_DocBloc version="1.0" spok_lang="en" prog_lang="*">
  <slug>GetRender_AutoIncrementFilename</slug>
  <requires>
    Ultraschall=4.00
    Reaper=5.975
    SWS=2.10.0.1
    JS=0.972
    Lua=5.3
  </requires>
  <functioncall>boolean retval = ultraschall.GetRender_AutoIncrementFilename()</functioncall>
  <description>
    Gets the current state of the "Silently increment filenames to avoid overwriting"-checkbox from the Render to File-dialog.
  </description>
  <retvals>
    boolean state - true, check the checkbox; false, uncheck the checkbox
  </retvals>
  <chapter_context>
    Rendering Projects
    Render Settings
  </chapter_context>
  <target_document>US_Api_Functions</target_document>
  <source_document>Modules/ultraschall_functions_Render_Module.lua</source_document>
  <tags>render, get, checkbox, render, auto increment filenames</tags>
</US_DocBloc>
]]
  local SaveCopyOfProject, hwnd, retval, length, state
  hwnd = ultraschall.GetRenderToFileHWND()
  if hwnd==nil then
    state=reaper.SNM_GetIntConfigVar("renderclosewhendone", 0)
	if state==5 then state=0 end
	if state==21 then state=1 end
  else
    state = reaper.JS_WindowMessage_Send(reaper.JS_Window_FindChildByID(hwnd,1042), "BM_GETCHECK", 1,0,0,0)
  end
  if state==0 then state=false else state=true end

  return state
end
And also line 5655 in ultraschall_functions_Render_Module.lua, it seems the line should be :
Code:
    if SilentlyIncrementFilename==nil then SilentlyIncrementFilename=false end
instead of
Code:
    if SilentlyIncrementFilename==nil then SilentlyIncrementFilename=true end
Thanks,
aurelien is offline   Reply With Quote
Old 07-08-2022, 09:15 AM   #760
Meo-Ada Mespotine
Human being with feelings
 
Meo-Ada Mespotine's Avatar
 
Join Date: May 2017
Location: Leipzig
Posts: 6,578
Default

Thnx, will fix this in the next release beginning of August(currently recovering from a surgery, so things are slower currently).
__________________
Use you/she/her.Ultraschall-Api Lua Api4Reaper - Donate, if you wish

On vacation for the time being...
Meo-Ada Mespotine is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -7. The time now is 10:14 PM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.