Old 02-10-2013, 04:20 AM   #1
Breeder
Human being with feelings
 
Join Date: Nov 2010
Posts: 1,809
Default Tempo mapping and manipulation with SWS

SWS extension now includes a set of features for dealing with tempo. You might ask what's wrong with using native Reaper methods described in Tempo Mapping 101. Well, nothing really - features in SWS build on idea shown in that thread while trying to make the whole process easier without getting in your way.

Download:
Download here

Features and documentation:
Documentation can be found on wiki.cockos and is divided into two parts:

1. Tempo mapping
  • Accuracy (amount of tempo markers per measure) can be selected by the user.
  • Possibility of gradual (and thus more human) tempo map
  • Use MIDI to create tempo map and hear the results immediately.
  • Easier handling of songs with multiple time signatures

2. Tempo manipulation
  • Warp grid
  • Move tempo markers without doing a complete remap
  • Delete or change shape of tempo markers without disturbing the rest of the tempo map
  • Draw tempo map
  • Tools for managing gradual tempo changes
  • Select and adjust tempo in bulk
  • Increase density of the tempo map
  • Randomize tempo

Donations:
A lot of effort has been invested in this. If you seriously use it, please consider donating. Thanks!

Big thanks goes to user G-Sun for helping with the wiki and all the advice without which gradual tempo would never receive so much love!
Feel free to post questions and feedback

Last edited by Breeder; 03-15-2015 at 04:21 AM.
Breeder is offline   Reply With Quote
Old 02-10-2013, 07:04 AM   #2
G-Sun
Human being with feelings
 
G-Sun's Avatar
 
Join Date: May 2010
Location: Norway
Posts: 5,890
Default

Thanks a lot Breeder for coding all these wonderful tools!
Awesome work!

Quick manual:

1) Add markers (just as Tempo Mapping 101)
2) Run action: "sws/br: Convert project markers to tempo markers.."

Done!
__________________
Reaper x64, win 8.1
G-Sun.no - Music Blog - My music

Last edited by G-Sun; 08-14-2013 at 01:11 PM.
G-Sun is online now   Reply With Quote
Old 02-10-2013, 07:54 AM   #3
dug dog
Human being with feelings
 
Join Date: Jan 2009
Location: With Elvis Watching The Deflectives
Posts: 387
Default

I've been doing mostly grid-based stuff lately, but will have to revisit tempo mapping in the near future to check out these cool new tools.
dug dog is offline   Reply With Quote
Old 02-10-2013, 03:14 PM   #4
tls11823
Human being with feelings
 
tls11823's Avatar
 
Join Date: Aug 2010
Location: Harrisburg, PA USA
Posts: 1,335
Default

I've only had time to give this a quick glance, and it may be a few days before I have a chance to play around, but this looks very encouraging.

Thanks for putting forth the time and effort to lay this out. I think it's going to be quite helpful.
__________________
We act as though comfort and luxury were the chief requirements of life, when all that we need to make us happy is something to be enthusiastic about.
--Charles Kingsley... or maybe Albert Einstein... definitely somebody wiser than myself--
tls11823 is offline   Reply With Quote
Old 02-12-2013, 07:34 AM   #5
Guido
Human being with feelings
 
Join Date: Nov 2007
Posts: 674
Default

Hi,

A Big thank u to Breeder and G Sun for this!


GSun..have u ever heard of a band from the 40s 50s called the Tune Toppers?

Guido
Guido is offline   Reply With Quote
Old 02-12-2013, 10:45 AM   #6
mwe
Human being with feelings
 
mwe's Avatar
 
Join Date: Mar 2012
Location: Kentucky, USA
Posts: 254
Default

Any thoughts/plans on something like this for the API?

Code:
bool BR_MoveTempoTimeSigMarker(ReaProject* proj, int ptidx, double timepos)
mwe is offline   Reply With Quote
Old 02-12-2013, 11:01 AM   #7
Breeder
Human being with feelings
 
Join Date: Nov 2010
Posts: 1,809
Default

Quote:
Originally Posted by mwe View Post
Any thoughts/plans on something like this for the API?

Code:
bool BR_MoveTempoTimeSigMarker(ReaProject* proj, int ptidx, double timepos)
Never tough anyone would want to use these commands in ReaScript, lol. Sure, I`ll throw it in, anything else?
Breeder is offline   Reply With Quote
Old 02-12-2013, 12:22 PM   #8
mwe
Human being with feelings
 
mwe's Avatar
 
Join Date: Mar 2012
Location: Kentucky, USA
Posts: 254
Default

Quote:
Originally Posted by Breeder View Post
Never tough anyone would want to use these commands in ReaScript, lol. Sure, I`ll throw it in, anything else?
The one that comes to mind is SWS/BR: Delete tempo marker (preserve overall tempo and positions if possible). If you could pass it the index of the marker you want to delete it might be handy.

I have a script that finds the closest marker to the cursor (skipping regions) and moves it to that position. I use it when I tempo map a song to speed up editing marker locations. After reading through the info on your actions, it occurred to me that it might be useful to be able to do something similar with a tempo marker.
mwe is offline   Reply With Quote
Old 02-12-2013, 12:48 PM   #9
Breeder
Human being with feelings
 
Join Date: Nov 2010
Posts: 1,809
Default

Will do then for those two.

Would you mind if I stole your idea and put another action "Move closest tempo marker to edit cursor" ?
Because it seems really cool and that way it can be available to anybody.
Breeder is offline   Reply With Quote
Old 02-12-2013, 02:00 PM   #10
mwe
Human being with feelings
 
mwe's Avatar
 
Join Date: Mar 2012
Location: Kentucky, USA
Posts: 254
Default

Quote:
Originally Posted by Breeder View Post
Will do then for those two.

Would you mind if I stole your idea and put another action "Move closest tempo marker to edit cursor" ?
Because it seems really cool and that way it can be available to anybody.
Feel free. In fact, it's more of a trade actually. I was having a hard time dealing with some of the peculiarities of project markers in Reaper. I took a peek at the SWS source code and found this in one of your actions

Code:
if ((mPos != prevMPos)||(mPos == prevMPos && prevRegion == 1) || (previous == 0))
which I changed to this
Code:
if ((current_marker[4] != previous_marker[4]) or \
   ((current_marker[4] == previous_marker[4]) and previous_marker[3] == 1)) or \
   (previous_marker[0] == 0)) :
Solved my problem. I guess I owe the code base something in return.
mwe is offline   Reply With Quote
Old 02-13-2013, 12:07 AM   #11
G-Sun
Human being with feelings
 
G-Sun's Avatar
 
Join Date: May 2010
Location: Norway
Posts: 5,890
Default

Quote:
Originally Posted by Guido View Post
Hi,

A Big thank u to Breeder and G Sun for this!


GSun..have u ever heard of a band from the 40s 50s called the Tune Toppers?
Sorry, no. Should I?
__________________
Reaper x64, win 8.1
G-Sun.no - Music Blog - My music
G-Sun is online now   Reply With Quote
Old 02-18-2013, 03:23 PM   #12
dug dog
Human being with feelings
 
Join Date: Jan 2009
Location: With Elvis Watching The Deflectives
Posts: 387
Default

I gave this a go the other day.

My memory isn't that great but it seems to me that this method is MUCH more straightforward than the older method.

Very nice. Thank you.
dug dog is offline   Reply With Quote
Old 03-10-2013, 03:24 AM   #13
Garrick
Human being with feelings
 
Garrick's Avatar
 
Join Date: Jul 2009
Location: Wellington
Posts: 4,258
Default

Just used this and key mapped moving tempo markers. So very good. The old tempo 101 is really good bit this is better.
Garrick is online now   Reply With Quote
Old 03-10-2013, 01:05 PM   #14
Mr. Data
Human being with feelings
 
Mr. Data's Avatar
 
Join Date: Sep 2008
Location: Location
Posts: 5,203
Default

Breeder and G-Sun,

when doing all this programming stuff, I hope you guys find some time to make music in between.

-Data
__________________
German Language Pack for REAPER? Get it here!
Deutsche Sprachdatei für REAPER? Hier zu haben!
Mr. Data is offline   Reply With Quote
Old 03-10-2013, 01:49 PM   #15
G-Sun
Human being with feelings
 
G-Sun's Avatar
 
Join Date: May 2010
Location: Norway
Posts: 5,890
Default

Quote:
Originally Posted by Garrick View Post
Just used this and key mapped moving tempo markers. So very good. The old tempo 101 is really good bit this is better.
Good to hear Garrick!
Quote:
Originally Posted by Mr. Data View Post
Breeder and G-Sun,

when doing all this programming stuff, I hope you guys find some time to make music in between.

-Data
Shure. In between soldering preamps, designing and building a studio and reading up on virtual instruments
__________________
Reaper x64, win 8.1
G-Sun.no - Music Blog - My music
G-Sun is online now   Reply With Quote
Old 03-10-2013, 02:53 PM   #16
Mr. Data
Human being with feelings
 
Mr. Data's Avatar
 
Join Date: Sep 2008
Location: Location
Posts: 5,203
Default



-Data
__________________
German Language Pack for REAPER? Get it here!
Deutsche Sprachdatei für REAPER? Hier zu haben!
Mr. Data is offline   Reply With Quote
Old 03-10-2013, 03:35 PM   #17
Tod
Human being with feelings
 
Tod's Avatar
 
Join Date: Jan 2010
Posts: 10,225
Default

Hi Breeder and G-Sun, I've got a rather stupid question.

The other day I had a project that I needed to tempo map to an audio track. I took a look in this thread thinking I'd try this procedure instead of the normal 101 way which I'm quite comfortable with.

In short, I was in a hurry and felt kind of baffled in reading through this thread as far as how to proceed. I ended up just doing it the old way.

Anyway, my dumb question is, what would I do different from the old 101 way, what is the significance between the two approaches?

-----------
With the 101 way I just figure out the basic beat and set the Project tempo to it. Then I put markers on the 1st, 2nd, and 3rd bars to give me a 2 bar count-in.

From there I hit play from the front and starting at bar 4, I manually put markers in on each bar to the end of the song. Then I go through and visually adjust each marker to better line up with the front of each bar.

Then of course I run my macro. This works quite well.
-----------

So what do I do different then that?
Tod is offline   Reply With Quote
Old 03-11-2013, 01:16 AM   #18
G-Sun
Human being with feelings
 
G-Sun's Avatar
 
Join Date: May 2010
Location: Norway
Posts: 5,890
Default

Good morning Tod
Not a stupid question at all.

If your happy with a resolution of 1/1 (bar, whole-note),
then you can use the old way.
You will however find Breeders action "Convert project markers to tempo markers" faster and better than your macro.

The new Breeder actions would be preferred if you want:
- higher resolution on your tempo-map (like quarter-notes and 8-notes), or
- would prefer linear points, or
- would like a fast workflow of adjusting time-position for individual markers, or
- have a complex project with different time-signatures

In addition there are other tempo-tools
for selecting, converting and adjusting.

Happy tempoing!
__________________
Reaper x64, win 8.1
G-Sun.no - Music Blog - My music

Last edited by G-Sun; 03-11-2013 at 01:27 AM.
G-Sun is online now   Reply With Quote
Old 03-11-2013, 01:27 AM   #19
buckman
Human being with feelings
 
buckman's Avatar
 
Join Date: Jul 2008
Posts: 1,526
Default

Just to clarify, do you mean SWS v2.3.0 #4 (August 30, 2012) ?

Looking by my installed SWS and the latest on the website, these must be the most updated?

I am looking forward to any new tempo based tweaks, especially full length tracks, although having said that and trying (unsuccessfully) with Reaper to record DJ mixes, I have now moved to Ableton which is much better at the job..

I would still be interested though in how Reaper does this in say, an Acid style?
__________________
==
Reaper 4 needs Area Selection!
http://forum.cockos.com/project.php?issueid=122
buckman is offline   Reply With Quote
Old 03-11-2013, 01:48 AM   #20
G-Sun
Human being with feelings
 
G-Sun's Avatar
 
Join Date: May 2010
Location: Norway
Posts: 5,890
Default

Quote:
Originally Posted by buckman View Post
Just to clarify, do you mean SWS v2.3.0 #4 (August 30, 2012) ?

Looking by my installed SWS and the latest on the website, these must be the most updated?

I am looking forward to any new tempo based tweaks, especially full length tracks, although having said that and trying (unsuccessfully) with Reaper to record DJ mixes, I have now moved to Ableton which is much better at the job..

I would still be interested though in how Reaper does this in say, an Acid style?
Sorry, it's not implemented in any official release yet.
You need the prerelease found here:
http://code.google.com/p/sws-extension/downloads/list
__________________
Reaper x64, win 8.1
G-Sun.no - Music Blog - My music
G-Sun is online now   Reply With Quote
Old 03-11-2013, 04:51 AM   #21
buckman
Human being with feelings
 
buckman's Avatar
 
Join Date: Jul 2008
Posts: 1,526
Default

Quote:
Originally Posted by G-Sun View Post
Sorry, it's not implemented in any official release yet.
You need the prerelease found here:
http://code.google.com/p/sws-extension/downloads/list
Ah ok no problem - does it include any media explorer Tempo options for Full tracks, in a DJ style capacity, so they are locked to tempo with the "Tempo Match" ?

I think this is the main thing I am personally looking for...
__________________
==
Reaper 4 needs Area Selection!
http://forum.cockos.com/project.php?issueid=122
buckman is offline   Reply With Quote
Old 03-11-2013, 06:05 AM   #22
Breeder
Human being with feelings
 
Join Date: Nov 2010
Posts: 1,809
Default

Quote:
Originally Posted by buckman View Post
Ah ok no problem - does it include any media explorer Tempo options for Full tracks, in a DJ style capacity, so they are locked to tempo with the "Tempo Match" ?

I think this is the main thing I am personally looking for...
Once you tempo map something and return timebase to beats (position, length, rate), items should stretch and change their position in accordance with tempo.
There are some quirks though (only one tempo change allowed per item). Read more here: http://wiki.cockos.com/wiki/index.ph..._tempo_markers

And btw, check pre forum for some interesting new features in regards to your question
Breeder is offline   Reply With Quote
Old 03-11-2013, 06:24 AM   #23
buckman
Human being with feelings
 
buckman's Avatar
 
Join Date: Jul 2008
Posts: 1,526
Default

Ok thanks.. I did see some bits in the Pre.. but its just full tracks to tempo sync once dragged into a project that I am looking at..

A bit like Mixmeister does with puttting its own warp and beat markers in so it guesses the correct tempo 99% of the time.

Although Ableton makes you warp a track before hand, I have now discovered and clicked with warping, and it does do a really good job, so maybe Reaper can't compete?
__________________
==
Reaper 4 needs Area Selection!
http://forum.cockos.com/project.php?issueid=122
buckman is offline   Reply With Quote
Old 03-11-2013, 09:24 AM   #24
Tod
Human being with feelings
 
Tod's Avatar
 
Join Date: Jan 2010
Posts: 10,225
Default

Quote:
Originally Posted by G-Sun View Post
If your happy with a resolution of 1/1 (bar, whole-note),
then you can use the old way.
You will however find Breeders action "Convert project markers to tempo markers" faster and better than your macro.

The new Breeder actions would be preferred if you want:
- higher resolution on your tempo-map (like quarter-notes and 8-notes), or
- would prefer linear points, or
- would like a fast workflow of adjusting time-position for individual markers, or
- have a complex project with different time-signatures

In addition there are other tempo-tools
for selecting, converting and adjusting.
Thanks Geir, it all makes sense now.
Tod is offline   Reply With Quote
Old 03-11-2013, 11:59 AM   #25
G-Sun
Human being with feelings
 
G-Sun's Avatar
 
Join Date: May 2010
Location: Norway
Posts: 5,890
Default Making a tempo map

I'd like to share with you my typical workflow,
that may be a little different than others do things.

I'll guess typical tempo-mapping is about nailing the most accurate map of the recorded audio.
My approach is more aimed at creating a best possible tempo-map for a song, from scratch.

I'll often start with a
1) Cue/scratch take with let's say vocal, acoustic guitar and tapping my foot. Often just one mic.
then
2) I tempo-map it, using a resolution of 4/4 or 8/8.
I do prefer linear tempo, but maybe square is more practical for this. Accuracy is not the big point. The main goal is getting basic values for tempo, as it changes through the song.
then
3a) I delete as many tempo-markers as possible, without loosing important changes, tweaking and deleting more. I'll insert a meteronome. And I'll split the cue track on my resolution, to follow all tempo-changes. Or
3b) I open a new/blank project. And use the tempo mapped first project as a guid-line.
4) I'll try to add midi-based instruments first, to allow more changes to tempo if necessary.
5) I'll sing through the song, and commit to the tempo-map
6) I'll add audio-based tracks and whatever is needed

I'm very happy with Breeders help in making a good tempo-workflow possible. Yet, there are a few FRs left to make 3b) my preferred way

I'll upload a few pictures if anyone's interested.

Best
__________________
Reaper x64, win 8.1
G-Sun.no - Music Blog - My music
G-Sun is online now   Reply With Quote
Old 03-11-2013, 12:42 PM   #26
Tod
Human being with feelings
 
Tod's Avatar
 
Join Date: Jan 2010
Posts: 10,225
Default

Quote:
Originally Posted by G-Sun View Post
I'll upload a few pictures if anyone's interested.
Sure I'd like to see them.
Tod is offline   Reply With Quote
Old 04-05-2013, 07:42 AM   #27
sears
Human being with feelings
 
Join Date: Feb 2013
Posts: 6
Default

I'm sure I'm missing something basic. This is my first time using any SWS extensions.

I don't see the SWS actions the wiki talks about. The two SWS/BR actions I can find by pressing "?" are

SWS/BR: Move edit cursor to next tempo marker
SWS/BR: Move edit cursor to previous tempo marker

I just reinstalled the latest version of the SWS.
sears is offline   Reply With Quote
Old 04-05-2013, 08:12 AM   #28
dug dog
Human being with feelings
 
Join Date: Jan 2009
Location: With Elvis Watching The Deflectives
Posts: 387
Default

This might help. The version you need is a pre-release version 2.3.0.13 or later available here:

http://code.google.com/p/sws-extensi...bel:Prerelease
dug dog is offline   Reply With Quote
Old 04-06-2013, 08:39 PM   #29
Garrick
Human being with feelings
 
Garrick's Avatar
 
Join Date: Jul 2009
Location: Wellington
Posts: 4,258
Default

This is working so well thank you very much
Cheers gsun, always thought you were a good sort, and breeder i'm sure you're good sort to.

Garrick is online now   Reply With Quote
Old 04-07-2013, 07:09 AM   #30
sears
Human being with feelings
 
Join Date: Feb 2013
Posts: 6
Default

Quote:
Originally Posted by dug dog View Post
This might help. The version you need is a pre-release version 2.3.0.13 or later available here:

http://code.google.com/p/sws-extensi...bel:Prerelease
There I go. What a snap. Thanks!
sears is offline   Reply With Quote
Old 04-08-2013, 10:07 AM   #31
mwe
Human being with feelings
 
mwe's Avatar
 
Join Date: Mar 2012
Location: Kentucky, USA
Posts: 254
Default

Quote:
Originally Posted by Breeder View Post
Will do then for those two.

Would you mind if I stole your idea and put another action "Move closest tempo marker to edit cursor" ?
Because it seems really cool and that way it can be available to anybody.
Just got a chance to try this. Only a dummy project and brief run through but seems to work great. Thanks.
mwe is offline   Reply With Quote
Old 04-11-2013, 09:33 AM   #32
G-Sun
Human being with feelings
 
G-Sun's Avatar
 
Join Date: May 2010
Location: Norway
Posts: 5,890
Default

Updated info with a short version for those confused by all actions and options

http://forum.cockos.com/showpost.php...07&postcount=2
__________________
Reaper x64, win 8.1
G-Sun.no - Music Blog - My music
G-Sun is online now   Reply With Quote
Old 04-11-2013, 10:29 AM   #33
Tod
Human being with feelings
 
Tod's Avatar
 
Join Date: Jan 2010
Posts: 10,225
Default

Quote:
Originally Posted by G-Sun View Post
Updated info with a short version for those confused by all actions and options

http://forum.cockos.com/showpost.php...07&postcount=2
Heh heh, there you go...
Tod is offline   Reply With Quote
Old 04-11-2013, 12:35 PM   #34
nofish
Human being with feelings
 
nofish's Avatar
 
Join Date: Oct 2007
Location: home is where the heart is
Posts: 6,832
Default

Just wanted to say thanks for all the work that went into this.

Used these new actions recently (with the help of the Wiki entry, so thanks for this also), worked out like a charm.

http://forum.cockos.com/showthread.php?t=120591
nofish is offline   Reply With Quote
Old 04-11-2013, 01:10 PM   #35
Breeder
Human being with feelings
 
Join Date: Nov 2010
Posts: 1,809
Default

Quote:
Originally Posted by mwe View Post
Just got a chance to try this. Only a dummy project and brief run through but seems to work great. Thanks.
And thank you for the neat idea - it is needed neat for faster workflow!

Quote:
Originally Posted by nofish View Post
Just wanted to say thanks for all the work that went into this.
Thank you! It`s a great thing to see all those sleepless nights learning C++ actually helped other people too
Breeder is offline   Reply With Quote
Old 04-11-2013, 01:31 PM   #36
heda
Human being with feelings
 
heda's Avatar
 
Join Date: Jun 2012
Location: Spain
Posts: 3,987
Default

Thank you indeed
I would not be able to use reaper without these tempo mapping features. Not everybody working at fixed tempo
heda is offline   Reply With Quote
Old 04-11-2013, 01:54 PM   #37
dug dog
Human being with feelings
 
Join Date: Jan 2009
Location: With Elvis Watching The Deflectives
Posts: 387
Default

Quote:
Originally Posted by G-Sun View Post
Updated info with a short version for those confused by all actions and options

http://forum.cockos.com/showpost.php...07&postcount=2
Nicely summarized. Gave me a good laugh. And, again, many thanks.
dug dog is offline   Reply With Quote
Old 04-12-2013, 01:48 AM   #38
G-Sun
Human being with feelings
 
G-Sun's Avatar
 
Join Date: May 2010
Location: Norway
Posts: 5,890
Default

Quote:
Originally Posted by Breeder View Post
Thank you! It`s a great thing to see all those sleepless nights learning C++ actually helped other people too
Award for you:

Attached Images
File Type: png Supercoder.png (57.6 KB, 5788 views)
__________________
Reaper x64, win 8.1
G-Sun.no - Music Blog - My music
G-Sun is online now   Reply With Quote
Old 04-16-2013, 03:56 PM   #39
Tod
Human being with feelings
 
Tod's Avatar
 
Join Date: Jan 2010
Posts: 10,225
Default

Hi G-Sun, Breeder, and all.

I may have found a problem with tempo mapping. Actually finzic came across it first.

http://forum.cockos.com/showthread.php?t=104927

This has nothing to do with you guys and your tempo mapping actions. I believe this is a problem with Reaper.

It will not process BPMs of 240 and over. It works fine with BPM-239 but from 240 on it basically cuts the BPM in half. BPM-240 becomes 120, BPM-260 becomes 130, etc..

Also instead of createing full measure tempo markers it's making them half measure tempo markers. In other words instead of going from Bar-1/Beat-1 to Bar-2/Beat-1 it's going from Bar-1/Beat-1 to Bar-1/Beat-3. You can see that in the pict below. The Project Settings remained the same but the Transport BPM changed which makes sense.



Heres a picture of trying to create double time with a basic 120-BPM project. In other words going from BPM-120 to 240. It just doesn't like BPM-240 and above.



This should probably be in the Bug reports but I wanted to run it by you guys first in case I'm missing something.
Tod is offline   Reply With Quote
Old 04-16-2013, 03:59 PM   #40
Breeder
Human being with feelings
 
Join Date: Nov 2010
Posts: 1,809
Default

I'm not having problems with BPM over 240 here. It's all normal.

Can you please pm with the problematic project and the settings you're using for converting?
Breeder 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 04:43 AM.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.