BPM.tapper [v1.0] - time BPM 's in MM [MM 2 / MM 3 limited ]

Download and get help for different MediaMonkey for Windows 4 Addons.

Moderators: Peke, Gurus

DaledeSilva
Posts: 906
Joined: Sun May 28, 2006 4:22 am
Location: Australia
Contact:

BPM.tapper [v1.0] - time BPM 's in MM [MM 2 / MM 3 limited ]

Post by DaledeSilva »

BPM.tapper is currently at release v1.0
it can be downloaded here:

http://www.ublik-om.net/software/bpm-tapper

BPM.tapper creates a dockable window within Media Monkey which allows you to tap to the beat of the currently playing song and save that easily to the mp3 file.

it is compatible with MM 3.0
(except for "skip song after save")

Feel free to post any issues with the script you find in this current thread.. please also read the "known issues" section when downloading as your issue may already be listed.

enjoy & happy tapping,
Dale.

(if you are curious, the initial thread where this began is here: http://www.mediamonkey.com/forum/viewtopic.php?t=15338)
Last edited by DaledeSilva on Thu Jul 06, 2017 7:45 pm, edited 4 times in total.
Product Designer & Indie Developer.
Building at the intersection of motion, art, and code.
Find me on twitter and all the other ones here.
surfer
Posts: 296
Joined: Fri Oct 22, 2004 4:55 am

Post by surfer »

Thanks a lot for your work once more and the update!!!

Some questions:

- What is the exact reason of the fields "diff." and "no."? What is the relationship between those 2 fields and the "tapping"?

- when in "Now Playing" the "BPM Tapper" window is focused. I'd suggest tapping with the space bar shoud be possible at once instead of having to use the mouse first.
DaledeSilva
Posts: 906
Joined: Sun May 28, 2006 4:22 am
Location: Australia
Contact:

Post by DaledeSilva »

surfer wrote:- What is the exact reason of the fields "diff." and "no."? What is the relationship between those 2 fields and the "tapping"?
no. shows the number of taps you have made so far
diff. shows whether your last tap was quicker or slower than the average.

surfer wrote:- when in "Now Playing" the "BPM Tapper" window is focused. I'd suggest tapping with the space bar shoud be possible at once instead of having to use the mouse first.
I'll look into it.. but while I can make a document wide detection, I am worried that it would detecet an eroneous click when pressing the save button. But I'm sure a variation will come about.
Product Designer & Indie Developer.
Building at the intersection of motion, art, and code.
Find me on twitter and all the other ones here.
surfer
Posts: 296
Joined: Fri Oct 22, 2004 4:55 am

Post by surfer »

Does this script work on the new MM 3.0 beta2?
If not, could you please update?
GuHu
Posts: 63
Joined: Mon Feb 12, 2007 6:25 am

Post by GuHu »

nice idea for the script.

Maybe it will be more convenient to use an external tool like

http://www.zdnet.de/downloads/prg/0/6/e ... 06-wc.html

which will do the job?

With regards,

GuHu
DaledeSilva
Posts: 906
Joined: Sun May 28, 2006 4:22 am
Location: Australia
Contact:

Post by DaledeSilva »

you're right.. if you music get's acurate bpms from that program, it's alot more efficient to use that.

however, the reason I created this script is that while that program can return an 'acurate' bpm, with slower music, it's usually not the beat we're interested in that mixmeister uses...
eg. for a song which we'd want to know is 60bpm, it would probably return 120bpm

so the timing is acurate.. but doesn't give any indication of the "speed" of the song.

Dale.
Last edited by DaledeSilva on Sun Nov 11, 2007 12:53 pm, edited 1 time in total.
Product Designer & Indie Developer.
Building at the intersection of motion, art, and code.
Find me on twitter and all the other ones here.
Bex
Posts: 6316
Joined: Fri May 21, 2004 5:44 am
Location: Sweden

Post by Bex »

I also use this for filetypes not supported by MixMeister! :)
Advanced Duplicate Find & Fix Find More From Same - Custom Search. | Transfer PlayStat & Copy-Paste Tags/AlbumArt between any tracks.
Tagging Inconsistencies Do you think you have your tags in order? Think again...
Play History & Stats Node Like having your Last-FM account stored locally, but more advanced.
Case & Leading Zero Fixer Works on filenames too!

All My Scripts
molnium
Posts: 14
Joined: Sun Jun 04, 2006 11:06 am

Re: BPM.tapper [v1.0] - time BPM 's in MM [MM 2 / MM 3 limited ]

Post by molnium »

Hello!

Many thanks for this extremely useful script!! I used it a lot, but now with MM 3.0.3++ it seems that it doesnt work anymore (doesn't save the BPM into the file), at least on my machine!?

On another take, i would like to add some features:
* read the BPM tag, if there is one, and put the value into the field
* buttons for dividing / multipliyng the value with 2 and 3

Like this, one can easily fix wrong BPMs wich are half or doubles of the real PBM, or in rare cases a third....

I tried to work on the html script, but since it didnt work on my machine, i couldn't test anything and gave up.

Many Thanks!!!
greetings
m


++edit: btw here is the modified BPMtapper.html

Code: Select all

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>
<HEAD>

<SCRIPT Language='VBScript'>

	Sub setBPM(value,skip)
		Dim SDB : Set SDB = CreateObject("SongsDB.SDBApplication")
		Dim curSong : Set curSong = SDB.Player.CurrentSong
		
		curSong.BPM = value
		curSong.UpdateDB
		curSong.WriteTags
		
		If skip Then
        	SDB.Player.Next()
			SDB.Player.PlaybackTime = SDB.Player.CurrentSongLength*0.1
		End If 
		
		Set curSong = Nothing
		Set SDB = Nothing
	End Sub
	
</SCRIPT>


<SCRIPT language=JavaScript>
	<!-- Original:  Derek Chilcote-Batto (dac-b@usa.net) -->
	<!-- Web Site:  http://www.mixed.net -->
	<!-- Modified by:  Ronnie T. Moore, Editor -->
	<!-- Later Modified into this version by Dale de Silva (www.oiltinman.net) for use in the programming MediaMonkey (www.mediamonkey.com)
	<!-- Ronnie T's script and many more are available free online at -->
	<!-- The JavaScript Source!! http://javascript.internet.com -->
	
	<!-- Netscape 4.x+ and MSIE 4.x+ compatible. --!>
	
	
	<!-- Begin
	ns = (navigator.appName == 'Netscape');
	ie = (navigator.appName == 'Microsoft Internet Explorer');
	
	secs2 = 0;
	count = 0;
	allBpm = 0;
	avgBpm = 0;
	bpm = 0;
	
	function resetAll() {
		<!--reset all--!>
		secs2 = 0;
		count = 0;
		allBpm = 0;
		bpm = 0;
		
		BPMtoSave = avgBpm
		avgBpm = 0;
		
		document.BEATSPERMINUTE.AVG.value = "";
		document.BEATSPERMINUTE.HIT.value = "";
		document.BEATSPERMINUTE.ACG.value = "";
	}
	
	function multB(e){
		if(avgBpm>0){
			avgBpm = avgBpm * e;
			// document.BEATSPERMINUTE.AVG.value = avgBpm;
			document.BEATSPERMINUTE.AVG.value = (Math.round(avgBpm * 100)) / 100;
			}
		return true;
	}
	
	function divB(e){
		if(avgBpm>0){
			avgBpm = avgBpm / e;
			// document.BEATSPERMINUTE.AVG.value = avgBpm;
			document.BEATSPERMINUTE.AVG.value = (Math.round(avgBpm * 100)) / 100;
			}
		return true;
	}	
	
	function saveBPM(){
		if(avgBpm>0){
			resetAll();
			document.BEATSPERMINUTE.AVG.value = "Saved";
			document.BEATSPERMINUTE.HIT.value = "";
			document.BEATSPERMINUTE.ACG.value = "";
			//VBscript call MUST go at end or the other actions wont complete
			if(document.BEATSPERMINUTE.SKIP.checked == true){
				setBPM(BPMtoSave,true);
			} else {
				setBPM(BPMtoSave,false);
			}
		} else {

		}
	}
	
	function bpmCounter(e) {

		//if (ns) clearBpm = e.which;
		//else if (ie) clearBpm = event.button;
		
		timeSeconds = new Date;
		secs = timeSeconds.getTime();
		
		if (count == 0) {
			document.BEATSPERMINUTE.AVG.value = "Begin When Ready";
			document.BEATSPERMINUTE.HIT.value = "";
			document.BEATSPERMINUTE.ACG.value = "";
			count = "start"
		} else if (count == "start"){
			document.BEATSPERMINUTE.AVG.value = "1st Click";
			document.BEATSPERMINUTE.HIT.value = "";
			document.BEATSPERMINUTE.ACG.value = "";
			count = 1
			secs2 = secs;
		} else {
			oldBpm = bpm;
			bpm = (1 / ((secs - secs2) / 1000)) * 60;
			bpmChg = (Math.round((bpm - oldBpm) * 10)) / 10;
			count++;
			allBpm = allBpm + bpm;
			oldAvg = avgBpm;
			avgBpm = allBpm / (count - 1);
			avgChg = (Math.round((avgBpm - oldAvg) * 10)) / 10;
			secs2 = secs;
			if (bpmChg >= 0) {
				PbpmChg = "+" + bpmChg
			} else {
				PbpmChg = bpmChg
			}
			if (avgChg >= 0) {
				PavgChg = "+" + avgChg
			} else {
				PavgChg = avgChg
			}
			document.BEATSPERMINUTE.AVG.value = (Math.round(avgBpm * 100)) / 100;
			document.BEATSPERMINUTE.ACG.value = PavgChg;
			document.BEATSPERMINUTE.HIT.value = count;
		}
		return true;
	}
	//document.onkeydown = bpmCounter;
	//document.onmousedown = bpmCounter;
	//  End -->
	
</SCRIPT>

<STYLE type="text/css">
	
	h1 {
		font-size: 11px;
		font-family:Verdana, Arial, Helvetica, sans-serif;
		text-align: center;
		color: #999999;
		
	}
	
	h2 {
		font-size: 10px;
		font-family:Verdana, Arial, Helvetica, sans-serif;
		text-align: center;
		color: #999999;
	}
	
	h3 {
		font-size: 9px;
		font-family:Verdana, Arial, Helvetica, sans-serif;
		text-align: center;
		color: #BBBBBB;
	}
	
	feedback {
		font-size: 15px;
		font-family:Verdana, Arial, Helvetica, sans-serif;
		color: #000000;
		text-align: right;
	}
		
	html {
	   overflow:false;
	}
	
body {
	margin-left: 0px;
	margin-top: 0px;
	margin-right: 0px;
	margin-bottom: 0px;
}
</STYLE>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></HEAD>
<BODY bgColor=#FFFFFF>

<FORM name=BEATSPERMINUTE>
	<table width="100%" height="100%" border="0">
      <tr>
        <td>
		  <h2>
		  <input name="tap" type=button value="        TAP        " onMouseDown="bpmCounter(null)" onKeyPress="bpmCounter(null)">
		  <BR/>
		  <input name="Button" type=button value=" Clear " onClick="resetAll()">
		  <input name="save" type=button value=" Save " onClick="saveBPM()">
		  <BR/>
		  <INPUT size=14 name=AVG>
		  <br>
		  <input name="mult2" type=button value=" &#8226; 2" onClick="multB(2)">
          <input name="div2" type=button value=" &divide; 2" onClick="divB(2)">
          <br/>
          <input name="mult3" type=button value=" &#8226; 3" onClick="multB(3)">
          <input name="div3" type=button value=" &divide; 3" onClick="divB(3)">
          <BR/>
		  Diff.<input size=2 name=ACG>No.<INPUT size=2 name=HIT>
		  <BR/>
		  Skip Song On Save 
		  <input name=SKIP type="checkbox" value="skip">
		  </h2>
	    <h3>If clicking "TAP" with your mouse doesn't seem to be registering every hit.. use your spacebar		  </h3>		</td>
      </tr>
    </table>
</FORM>

</BODY></HTML>
mistresso
Posts: 67
Joined: Sun Feb 24, 2008 11:15 am
Location: New Haven

Re: BPM.tapper [v1.0] - time BPM 's in MM [MM 2 / MM 3 limited ]

Post by mistresso »

Just wondering on the current status of this script, as the last poster said it wasn't working on MM3 very well.

External programs still seem to be the way to go - due to all the math that goes into guesstimating beats - but with the ever present doubling/halving issue with BPM calculations, having a batchable button to quickly override the false calcs would be very useful. To date I think I've only seen it in ONE app, (beaTunes?), even though it's requested numerous times on forums.

Still though, no one has even written a good external app that works well enough for us non-DJ's. Beatunes seems to have the most features, but like Rapid Evolution and most other apps, it works only off playlists and Itunes databases. Other apps are Mac-only (the main OS used by DJ's and musicians), or write to the comments field and hork up tags in other ways.

I'd use MixMeister but it's TOO simple, and its speed means it reports a lot of the doubled/halved figures - but with no easy way to correct them save manual editing.
surfer
Posts: 296
Joined: Fri Oct 22, 2004 4:55 am

Re: BPM.tapper [v1.0] - time BPM 's in MM [MM 2 / MM 3 limited ]

Post by surfer »

It works excelently with MM 3.1:-)
mistresso
Posts: 67
Joined: Sun Feb 24, 2008 11:15 am
Location: New Haven

Re: BPM.tapper [v1.0] - time BPM 's in MM [MM 2 / MM 3 limited ]

Post by mistresso »

Hrm, maybe what we need then is just a simple script to rewrite existing BPM's that are selected. It wouldn't make as much sense in combination with the BPM tapper.

What I've seen with some integrated tappers though - ie, ones accompanying apps that did BPM analysis - was that they would actually look at the "original" BPM field, assume if you were tapping it out that it was inaccurate, and then try to contextually determine if you were hitting a fractional value of the stored value. IE, say the track was set to 120 incorrectly. The tapper will then "see" any tapped average of 60bpm +/- 10 beats as 60, and lock onto that value. Really helps for some of us rhythmically-challeneged people.
Just JP
Posts: 151
Joined: Sun Oct 01, 2006 6:53 pm
Location: New Jersey, USA

Re: BPM.tapper [v1.0] - time BPM 's in MM [MM 2 / MM 3 limited ]

Post by Just JP »

The script works great for my needs in MM 3.1 also. I don't use the "save" button but it would be nice if I could.

I use it either manually check a BPM value determined by MixMeister or when I'm to lazy to open MixMeister for an individual tracks. One thing I find myself wishing for is the ability to skin the script. I use the Eclipse skin which is a dark skin and BPM.Tapper is very white.

Jim
Image
DaledeSilva
Posts: 906
Joined: Sun May 28, 2006 4:22 am
Location: Australia
Contact:

Re: BPM.tapper [v1.0] - time BPM 's in MM [MM 2 / MM 3 limited ]

Post by DaledeSilva »

mistresso wrote:What I've seen with some integrated tappers though - ie, ones accompanying apps that did BPM analysis - was that they would actually look at the "original" BPM field, assume if you were tapping it out that it was inaccurate, and then try to contextually determine if you were hitting a fractional value of the stored value. IE, say the track was set to 120 incorrectly. The tapper will then "see" any tapped average of 60bpm +/- 10 beats as 60, and lock onto that value.
I like that idea.
good one, I will try and incorporate it.
Just JP wrote:One thing I find myself wishing for is the ability to skin the script. I use the Eclipse skin which is a dark skin and BPM.Tapper is very white.
Jim
I will give it a background image that you can replace.


I guess the reason that I haven't fixed / worked on this script is because i've always got another script in int he back of my mind that will incorporate this into it. However, that script also hasn't been addressed yet.
I will see what I can do to get these small edits happening.

thanks for commenting on my script!

:)
Product Designer & Indie Developer.
Building at the intersection of motion, art, and code.
Find me on twitter and all the other ones here.
mistresso
Posts: 67
Joined: Sun Feb 24, 2008 11:15 am
Location: New Haven

Re: BPM.tapper [v1.0] - time BPM 's in MM [MM 2 / MM 3 limited ]

Post by mistresso »

Heh, well the search is still on for a seasoned BPM analyzer that actually does everything we want without making a big mess or running off the Itunes library. It's funny that with all the music apps we have for the PC, there is simply nothing out there that writes to the ID3 tag and isn't totally half-assed. Heck, most of the apps haven't even been updated since 2005.

I think most people look at the calculus required to actually figure out BPM's - which is still only 60% accurate at best - and flee in terror.

I just wish some of the audio engineers out there would put their heads together and come out with an open source library that could be shared.I can't blame the folks who want to make a buck off their hard work, but the fact is that the science still does not work reliably - which seems to scream for a cooperative and not capitalistic solution at this point.
Just JP
Posts: 151
Joined: Sun Oct 01, 2006 6:53 pm
Location: New Jersey, USA

Re: BPM.tapper [v1.0] - time BPM 's in MM [MM 2 / MM 3 limited ]

Post by Just JP »

DaledeSilva wrote:
I will give it a background image that you can replace.
Thanks!

I believe there are several scripts like this that were written a while ago which are very useful but get "lost" unless you stumble across them. Just the fact that we are discussing it now will bring this script to the attention of a whole group of users.

Keep up the good work.

Jim
Post Reply