|
|
|
04-28-2008, 05:20 PM
|
#1
|
Human being with feelings
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 8,062
|
For BETA-testing : New Reaper Commands
Latest update on 6th June :
https://stash.reaper.fm/1357/reaper_x...s_commands.dll
Updated on 24th May :
There's a lot of changes not included in this first post, I should probably gather all the changes into a new changelog/readme...
---
Changes :
-Added command "Loop And Play Selected Items".
-Added Commands "Skip Select Items In Selected Tracks..." and "Skip Select Items From Selected Items..."
-Hopefully fixed the issue with command "Choose New Source File For Selected Takes" when changing the source file from one format to another, eg. wav->mp3 or ogg->wav.
7th May :
-Added command "Insert Shuffled Random File".
-No other, at least not significant, changes to anything else.
5th May :
-Added command "Repeat Paste...".
*Not much else unfortunately has been improved or fixed yet, sorry.
Older versions had changes :
-Added command "Launch External Tool : Midi Mixer". This launches the utility program Midi Mixer by "BrunetteModels", described in the forum thread : http://www.cockos.com/forum/showthread.php?t=20823
-Hopefully fixed bug that crashed Reaper when cancel or close were pressed in the Open File dialog of the "Choose New Source File For Selected Takes"-command. Issue when changing take source files with different formats (wav, ogg, flac etc...) NOT fixed yet. The WAV-files mask in the Open Dialog is not a joke... ;-)
-Removed redundant and useless test hooking into Reaper command "Insert Media".
-Fixes to "Reverse takes source files as new take", but still far from perfect.
-Added command "Invert Item Selection"
-Added command "Choose New Source File For Selected Takes"
-Added command "Reverse takes source files as new take", which is currently largely broken.
31st April :
-Moved all new commands to a new main menu item "Extensions", thanks to SWS for pointing out how to do that
Any comments, bug reports or ideas are appreciated. If you have downloaded any other extension DLL from the Reaper stash or a private link given by me, please delete that DLL from your Reaper/Plugins-folder and use this new one instead. (This to remove possible conflicts.)
Quote:
Reaper Xenakios Commands DLL
This plugin gives new functionality to Reaper. Everything is quite beta and may not work as expected. You should not use these on important projects etc...These are not endorsed or supported by Cockos but were made possible by their Reaper Plug-In Extensions SDK. http://www.reaper.fm/sdk/plugin/
The following new commands are available :
*Rename Selected Take And Media Source File
This pops up a dialog that let's you easily rename one or more selected takes in Reaper. The renaming of source media files is not yet implemented. The Send To ReaBIN option also doesn't do anything yet.
*Rename Selected Takes With BWAV Description
If the source file of the selected take(s) contains broadcast wave description info that Reaper can read, it will be copied to the take's name.
*Save Project Markers As Text
Prompts for a file name and then saves the project's markers/regions as a text file. There are no formatting options (yet).
*Select First/Last Take Of Selected Items
On multitake items, does what it says.
*Select Takes Of Selected Items Cyclically
On multitake items, selects the takes in a cyclical fashion, e.g. 1-2-3-4-5-1-2..., for items containing 5 takes.
*Resample Pitch Shift Item One Semitone Up/Down
Applies Reaper's existing commands to pitch shift the selected takes in a resampling manner. (That is changing both the playspeed and pitch in sync.)
*Set Volume And Pan Of Selected Takes...
Let's you change the volume and pan of all selected takes in one go.
*Toggle Selected Takes Normalized/Unity Gain
Let's you toggle between takes normalized or at neutral gain setting (0.0db). If takes already have a gain setting that is different from 0db, this will first set the gain to 0db and only after then will it normalize.
Some random experimental/zany stuff :
*Pan Selected Tracks Symmetrically
Pans the selected tracks from left to right using symmetrical values. E.g. 3 selected tracks get panned to 100% L, Center, 100% R. 4 selected tracks get panned to 100% L, 33% L, 33% R, 100% R.
*Randomize Item Positions +-0.25 secs
In a moment of frustration, cut all your items in the project to a few hundred pieces, select them and apply this (a few times). :-D There is no notification for Reaper to store an Undo-state of this!
*Insert Random File
Inserts a random audio file from a list of files determined by the command "Choose files for random insert"
*Choose Files for random insert
Opens a file dialog where you can choose multiple audio files to be randomly inserted with the command "Insert Random File". The list is always cleared when this command is invoked. So, you can only conveniently choose and use files from a single folder.
|
__________________
I am no longer part of the REAPER community. Please don't contact me with any REAPER-related issues.
Last edited by Xenakios; 06-06-2008 at 06:51 AM.
|
|
|
04-28-2008, 06:12 PM
|
#2
|
Human being with feelings
Join Date: Jul 2006
Location: Hungary
Posts: 3,129
|
wooo
thank you very much Xenakios,
really useful commands!
a must have for every Reaper user, imo.
__________________
panda in the desert
|
|
|
04-28-2008, 06:56 PM
|
#3
|
Human being with feelings
Join Date: Mar 2007
Posts: 21,551
|
How do you access these commands? Are they in menus?
Don't see em.
|
|
|
04-28-2008, 07:08 PM
|
#4
|
Human being with feelings
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 8,062
|
Quote:
Originally Posted by Lawrence
How do you access these commands? Are they in menus?
Don't see em.
|
Most are not in the main menus, to avoid cluttering them. There are no APIs yet to place the new commands to the menus "smartly". So these are available from the Find Action list and the keyboard shortcut bindings in the preferences. (The action names start with "Xenakios" and "Silly".)
__________________
I am no longer part of the REAPER community. Please don't contact me with any REAPER-related issues.
|
|
|
04-28-2008, 10:30 PM
|
#5
|
Scribe
Join Date: Jan 2007
Location: Van Diemen's Land
Posts: 12,166
|
Xenakios -
Thank you so much for these, there is so much potential here. You are blazing a terrific trail and I look forward to testing them.
Just a suggestion for the future - it might be a stupid idea, so just take it for whatever you think it worth.
Might it be worth considering in the future perhaps adding these to the Main Menu, perhaps via an extra Main Menu command called "Extras" or something? Just a thought ...
|
|
|
04-28-2008, 10:36 PM
|
#6
|
Human being with feelings
Join Date: Jul 2006
Location: Hungary
Posts: 3,129
|
.. afaik more to come.
soon.
__________________
panda in the desert
|
|
|
04-28-2008, 10:38 PM
|
#7
|
Human being with feelings
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 8,062
|
Quote:
Originally Posted by nicholas
Might it be worth considering in the future perhaps adding these to the Main Menu, perhaps via an extra Main Menu command called "Extras" or something? Just a thought ...
|
Well, I already tried to hack something like that, but I think it may require some additions to Reaper itself to work. But I think an extra main menu top level item called "Extras" or "Extensions" would be a very good idea.
__________________
I am no longer part of the REAPER community. Please don't contact me with any REAPER-related issues.
|
|
|
04-28-2008, 10:40 PM
|
#8
|
Human being with feelings
Join Date: Jul 2006
Location: Hungary
Posts: 3,129
|
and what about a user def. button-bar, with user graphics for each action?..
hmmmm.
(just like the scripts in Vegas..)
__________________
panda in the desert
|
|
|
04-28-2008, 11:05 PM
|
#9
|
Human being with feelings
Join Date: Feb 2007
Location: Sydney Oz
Posts: 8,480
|
Hey Xenakios, I've tried out the 'rename take' command which works...one thing I notice is, they don't actually rename once you hit ok...not until you click in the timeline somewhere, then they update. I'll try it on my other machine later to check as well. I macroed 'unselect all items' in after it and that works for a workaround.
It does seem a more direct link into Reaper though, ie no properties windows popping up briefly between actions, as in the old rename code. Nice work!
Last edited by Bevosss; 04-28-2008 at 11:10 PM.
|
|
|
04-28-2008, 11:16 PM
|
#10
|
Human being with feelings
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 8,062
|
Quote:
Originally Posted by Bevosss
Hey Xenakios, I've tried out the 'rename take' command which works...one thing I notice is, they don't actually rename once you hit ok...not until you click in the timeline somewhere, then they update. I'll try it on my other machine later to check as well. I macroed 'unselect all items' in after it and that works for a workaround.
It does seem a more direct link into Reaper though, ie no properties windows popping up briefly between actions, as in the old rename code. Nice work!
|
Hmm, interesting. I explicitly do call the Reaper API function to update the timeline after renaming. In fact, if I didn't it would cause something like that to happen, ie. the items not actually updating the names on the screen. I don't know why you are having this problem...
Yeah, heh heh this all direct integrated fiddling with Reaper's stuff, no need in the code to call up Reaper's dialogs and try to change things there...
edit : Hmm, it seems there's something else wrong too with the take renaming code, seems items spread on several tracks sometimes don't get anything else but blank names. (Not just a visual problem on the timeline, the take properties actually show blank.) I will have to look at this more closely. edit 2 : It isn't a problem even for items on several tracks, seems to be some kind of problem with memory allocation for the take name strings. I will try fixing this but it may be a good idea to avoid using this particular function in the mean time.
edit 3 : It seems the DLL I put up, has the routines it calls messed up a bit. The command for renaming takes calls an old routine that only supports single selected takes and shows the behaviour of not updating the timeline. "*Broadcast Wave Info Test 1" is actually the new code to rename multiple takes and is BADLY broken, too.
__________________
I am no longer part of the REAPER community. Please don't contact me with any REAPER-related issues.
Last edited by Xenakios; 04-28-2008 at 11:35 PM.
|
|
|
04-28-2008, 11:43 PM
|
#11
|
Human being with feelings
Join Date: Feb 2007
Location: Sydney Oz
Posts: 8,480
|
Does the same thing on both my (vastly different) machines, ie not updating straight away. My workaround works fine though.
Can we have the 'escape' key work as well, instead of the cancel button? You can hit ok for the same result, but only if you haven't already edited it.
|
|
|
04-28-2008, 11:49 PM
|
#12
|
Human being with feelings
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 8,062
|
Quote:
Originally Posted by Bevosss
Does the same thing on both my (vastly different) machines, ie not updating straight away. My workaround works fine though.
Can we have the 'escape' key work as well, instead of the cancel button? You can hit ok for the same result, but only if you haven't already edited it.
|
Yeah, I can probably fix that but need to fix the code for multiple take renaming first, hehe...
edit : Ok, hopefully now fixed. Should work for multiple takes, updates the items on the timeline, pressing ESC equals Cancel and the dialog close button (the "X" on the top right corner) works, too.
https://stash.reaper.fm/1177/reaper_x...s_commands.dll
You probably need to redefine the keyboard shortcut key for this function.
__________________
I am no longer part of the REAPER community. Please don't contact me with any REAPER-related issues.
Last edited by Xenakios; 04-29-2008 at 12:13 AM.
|
|
|
04-29-2008, 01:34 AM
|
#13
|
Human being with feelings
Join Date: Feb 2007
Location: Sydney Oz
Posts: 8,480
|
Quote:
Originally Posted by Xenakios
Yeah, I can probably fix that but need to fix the code for multiple take renaming first, hehe...
edit : Ok, hopefully now fixed. Should work for multiple takes, updates the items on the timeline, pressing ESC equals Cancel and the dialog close button (the "X" on the top right corner) works, too.
https://stash.reaper.fm/1177/reaper_x...s_commands.dll
You probably need to redefine the keyboard shortcut key for this function.
|
Yep, working perfect now...thanks X! This makes renaming takes so fast now (and ReaConsole rocks for renaming tracks with the 'n' command! You and sws are blazing a trail here.) I used the older version yesterday recording a couple of songs, after saving each take I quickly renamed it using Alt-N...nice.
I also tried your '*Pan Selected Tracks Symmetrically' action, really cool also!
Here's a pdf of your instructions, chuck it into your reaper folder if you want to access it from the help menu.
https://stash.reaper.fm/oldsb/38898/Commands.dll-PDF.pdf
|
|
|
04-29-2008, 01:50 AM
|
#14
|
Human being with feelings
Join Date: May 2007
Location: Hungary,Europe
Posts: 800
|
coooool...
thanks Xenakios!!
/boka
__________________
15" Retina MBP, Adobe CC, UA Apollo
Last edited by boka; 04-29-2008 at 03:27 AM.
|
|
|
04-29-2008, 03:43 AM
|
#15
|
Human being with feelings
Join Date: Jul 2006
Location: in a hotel room near you
Posts: 1,175
|
X.
Thank you very much for such a wonderful tool.
|
|
|
04-29-2008, 03:48 AM
|
#16
|
Human being with feelings
Join Date: Feb 2007
Location: Sydney Oz
Posts: 8,480
|
Xenakios, when you get 'rename take and source file' working, would it be too much to ask to make that a separate action?
I'd like to have one keystroke for renaming takes (alt-n), and another for renaming the source file (say shift-n), without using the mouse. I guess it's just a matter of the same dialogue box coming up, with the focus on the 'rename take and source file' button?
Many thanks if you like this, and can oblige.
|
|
|
04-29-2008, 06:14 AM
|
#17
|
Human being with feelings
Join Date: Feb 2007
Location: Sydney Oz
Posts: 8,480
|
Xenakios, I have another request:
'Silly Extensions: insert random file'...if you make this insert lotto-style ie no repeats, I can macro that up with 'go to and select next item' and 'remove item' as a kick-replacer.
Love your work man!
|
|
|
04-29-2008, 06:31 AM
|
#18
|
Human being with feelings
Join Date: Feb 2007
Posts: 3,221
|
very very exciting...thanks for your hard work.
|
|
|
04-29-2008, 07:56 AM
|
#19
|
Code Monkey
Join Date: Sep 2007
Location: Madison, WI
Posts: 857
|
Very nice, Xen. Copying some ReaConsole commands, I see!
Bevosss, I'll add rename take to the ReaConsole TODO list, too.
Adding the menu shouldn't be too bad. Let me see if I can whip up a quick example. EDIT: Here it is.
Last edited by sws; 04-29-2008 at 08:58 AM.
Reason: link to example
|
|
|
04-29-2008, 02:19 PM
|
#20
|
Human being with feelings
Join Date: Mar 2007
Location: Austin Texas
Posts: 253
|
AWESOME!
Simply AWESOME!
|
|
|
04-29-2008, 02:35 PM
|
#21
|
Human being with feelings
Join Date: Jul 2006
Location: Hungary
Posts: 3,129
|
yeah!
as i wrote, more to come. and its already in the .dll
(Toggle Normalize, for eg.)
woooooooo!
__________________
panda in the desert
|
|
|
04-29-2008, 02:56 PM
|
#22
|
Code Monkey
Join Date: Sep 2007
Location: Madison, WI
Posts: 857
|
Quote:
Originally Posted by Xenakios
*Select Takes Of Selected Items Cyclically
|
Xen: This isn't working as expected, and doesn't the default 'T' (Select next take) do that anyway?
|
|
|
04-29-2008, 03:04 PM
|
#23
|
Human being with feelings
Join Date: Jul 2006
Location: Hungary
Posts: 3,129
|
sws:
it works as expected here. is a kind of "round robin" behaviour for multitaked items, like snare, kick, hats, etc.
put for eg 8 samples into one multitaked item, copy that item across the song, and apply this command on all these multitaked items. now Reaper will play the takes cyclically, starting with the 1st take.
T/Shift+T is not the same, no.. or at least not 'automated' like this command.
__________________
panda in the desert
|
|
|
04-29-2008, 03:13 PM
|
#24
|
Human being with feelings
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 8,062
|
To make the "cyclical take select" more concrete :
Before :
After :
__________________
I am no longer part of the REAPER community. Please don't contact me with any REAPER-related issues.
|
|
|
04-29-2008, 03:18 PM
|
#25
|
Code Monkey
Join Date: Sep 2007
Location: Madison, WI
Posts: 857
|
Ah, thanks for the clarification, I understand now.
|
|
|
04-29-2008, 05:33 PM
|
#26
|
Human being with feelings
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 8,062
|
Quote:
Originally Posted by Bevosss
Xenakios, I have another request:
'Silly Extensions: insert random file'...if you make this insert lotto-style ie no repeats, I can macro that up with 'go to and select next item' and 'remove item' as a kick-replacer.
Love your work man!
|
Hmm, I would maybe like to reserve that for the new ReaBIN-plugin...I hate how the file list is so limited and non-controllable with these commands. (I did those now just to experiment, not really to be usable for anything...)
But as it might take some time for me to get that new ReaBIN to a publicly usable state, I might look at putting this in the mean time to the extension commands.
__________________
I am no longer part of the REAPER community. Please don't contact me with any REAPER-related issues.
|
|
|
04-29-2008, 05:48 PM
|
#27
|
Human being with feelings
Join Date: Feb 2007
Location: Sydney Oz
Posts: 8,480
|
Quote:
Originally Posted by Xenakios
But as it might take some time for me to get that new ReaBIN to a publicly usable state, I might look at putting this in the mean time to the extension commands.
|
My thoughts exactly...cool!
|
|
|
04-29-2008, 11:11 PM
|
#28
|
Human being with feelings
Join Date: May 2007
Location: Hungary,Europe
Posts: 800
|
Quote:
Originally Posted by Xenakios
To make the "cyclical take select" more concrete ....
|
It's clear now, thanks for the explanation!
I wonder if there is point in making (a second), an advanced version of this function as well so as not to cyclically but to randomly select takes. So if there is a multitake containing 5 items you copy it 5 times and it gets the order randomly for instance take numbers 1,4,2,5,3
This could also rock for snares, hihats...etc. and we could decide which of the methods give better result.
what do you think of this?
rgds,
boka
__________________
15" Retina MBP, Adobe CC, UA Apollo
Last edited by boka; 04-30-2008 at 12:13 AM.
|
|
|
04-30-2008, 03:32 AM
|
#29
|
Human being with feelings
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 8,062
|
Quote:
Originally Posted by boka
It's clear now, thanks for the explanation!
I wonder if there is point in making (a second), an advanced version of this function as well so as not to cyclically but to randomly select takes. So if there is a multitake containing 5 items you copy it 5 times and it gets the order randomly for instance take numbers 1,4,2,5,3
This could also rock for snares, hihats...etc. and we could decide which of the methods give better result.
what do you think of this?
rgds,
boka
|
Yes, sure it would make sense, but I think strictly only for collections of items where there is always the same number of takes in all items.
If anyone with a bigger brain than mine can tell me a way to handle varying numbers of takes in the items AND still have "shuffled lotto-style random" at the same time, please feel welcome to chime in...
__________________
I am no longer part of the REAPER community. Please don't contact me with any REAPER-related issues.
|
|
|
04-30-2008, 03:55 AM
|
#30
|
Human being with feelings
Join Date: May 2007
Location: Hungary,Europe
Posts: 800
|
Let's say we have any kind of loop that fits to the bpm. you put markers on every 1/16th and slice it up and implode all the 1/16 items into a multitake. Then you duplicate that multitake as many times as you need and you call the procedure mentioned above " random take " and your loop variation is done. Of course this is a lotto style yeah, but not rarely it would give very intersting and inspiring result.
I hope that someone can help you solve the difficulties at varying numbers and random stuff.
cheers,
boka
__________________
15" Retina MBP, Adobe CC, UA Apollo
|
|
|
04-30-2008, 04:00 AM
|
#31
|
Human being with feelings
Join Date: Oct 2006
Location: swing on the spiral of our divinity
Posts: 2,242
|
"set volume and pan of selected items"
Would it be possible to have faders in the popup window for this task??
Pretty please!
|
|
|
04-30-2008, 04:04 AM
|
#32
|
Human being with feelings
Join Date: Oct 2006
Location: swing on the spiral of our divinity
Posts: 2,242
|
Also, how about a "fit tempo to selection" command? What it would do...
You have a clip, and you know it's 4 bars in length. You could hit a key command, tell Reaper it's 4 bars in length, and Reaper would work out the tempo. It could even drop tempo markers at the start and end of the clip, so you could very easily map out your song, just by cutting it up into 4 bar slices.
|
|
|
04-30-2008, 04:05 AM
|
#33
|
Human being with feelings
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 8,062
|
Quote:
Originally Posted by Amberience
"set volume and pan of selected items"
Would it be possible to have faders in the popup window for this task??
Pretty please!
|
I don't exactly see the point, as there is no way to preview the sound anyway...What could be faster than to type in the desired value for volume (it's in decibels), press tab and type in the pan (valid range is -100 for left to 100 for right) and then press enter and it's done? I did this command much for the reason that the Reaper's own item properties is annoying to use to set the take volume and pan. (In addition to the Reaper dialog not handling vol and pan of multiple selected items at once.)
But maybe at some point, when I know how to handle the Windows slider controls.
__________________
I am no longer part of the REAPER community. Please don't contact me with any REAPER-related issues.
|
|
|
04-30-2008, 04:07 AM
|
#34
|
Human being with feelings
Join Date: Oct 2006
Location: swing on the spiral of our divinity
Posts: 2,242
|
Would just look pretty, that's all.
|
|
|
04-30-2008, 04:19 AM
|
#35
|
Human being with feelings
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 8,062
|
Quote:
Originally Posted by Amberience
Also, how about a "fit tempo to selection" command? What it would do...
|
Unfortunately, I think the extension APIs don't support inserting tempo/time signature markers or even setting the static project tempo yet. I suppose some hacked solution might be possible, but I'd greatly prefer not to use anything like that.
__________________
I am no longer part of the REAPER community. Please don't contact me with any REAPER-related issues.
|
|
|
04-30-2008, 09:11 PM
|
#36
|
Human being with feelings
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 8,062
|
__________________
I am no longer part of the REAPER community. Please don't contact me with any REAPER-related issues.
|
|
|
04-30-2008, 09:28 PM
|
#37
|
Scribe
Join Date: Jan 2007
Location: Van Diemen's Land
Posts: 12,166
|
Quote:
Originally Posted by Xenakios
|
Thanks, and adding them to the menu is a nice professional touch that also makes it much easier to use these.
|
|
|
04-30-2008, 10:29 PM
|
#38
|
Human being with feelings
Join Date: Feb 2007
Location: Sydney Oz
Posts: 8,480
|
Quote:
Originally Posted by Xenakios
|
If you use the command 'choose new source file for selected takes', clicking on the close button(x) or cancel button crashes Reaper. Also trying to replace an .ogg file with a wav crashes Reaper (yes, I see only wav files are supported, just reporting any behaviour I notice ).
Xenakios, when this window comes up, how about having the current source file showing? Otherwise, we may not be sure which one it is...
Actually the 'replace source file' steps in Reaper do this (which I have a hotkey for), so it seems a logical route.
Cheers X!
|
|
|
04-30-2008, 10:52 PM
|
#39
|
Human being with feelings
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 8,062
|
Quote:
Originally Posted by Bevosss
If you use the command 'choose new source file for selected takes', clicking on the close button(x) or cancel button crashes Reaper. Also trying to replace an .ogg file with a wav crashes Reaper (yes, I see only wav files are supported, just reporting any behaviour I notice ).
Xenakios, when this window comes up, how about having the current source file showing? Otherwise, we may not be sure which one it is...
Actually the 'replace source file' steps in Reaper do this (which I have a hotkey for), so it seems a logical route.
Cheers X!
|
Ok, the dialog cancel crashing confirmed and fixed. The inability to change wav's to ogg's etc needs a bit more work. But Reaper didn't crash here when attempting that...Anyway, confirmed by Justin that my lazy approach there won't work. I have to look into the file dialog showing the current filename, but it can turn into extra headache...I hope not.
__________________
I am no longer part of the REAPER community. Please don't contact me with any REAPER-related issues.
|
|
|
04-30-2008, 10:54 PM
|
#40
|
Human being with feelings
Join Date: Jul 2007
Posts: 489
|
maybe I missed it....
But where do I place this .dll in my Reaper directory?
Jay
Edit - never mind...figured it out.
Last edited by vicenzajay; 04-30-2008 at 10:57 PM.
|
|
|
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 10:52 AM.
|