Welcome Guest

Pages: 1
An action to assign the Italian tempo to a custom field based on BPM
cpkPostMarch 2, 2015, 08:30
Advanced
Posts: 95
Registered:
March 1, 2015, 02:55
Normal topicAn action to assign the Italian tempo to a custom field based on BPM

This was for the fun of it. I wanted it to only be a display field and not use a custom field but for this is the only way I could make a custom panel show the Tempo. The screenshot shows it in use in a custom panel. The field is called Tempo.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Rules</key>
	<array>
		<dict>
			<key>actions</key>
			<array>
				<dict>
					<key>code</key>
					<integer>35</integer>
					<key>text1</key>
					<string>This action is intended to calculate and create a classical textual tempo descriptor based on the BPM that is still often used in sheet music.  For this to work, the BPM has to already exist and if it doesn't then the action will fail.  This is a calculated field and there is no point in saving it to the music track but without saving the variable to a custom field there isn't a way to display in on a custom panel.  So a custom field has to be created to save the Tempo in.</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>120</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>35</integer>
					<key>text1</key>
					<string>Verify if BPM data exists and fail if it doesn't.</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>16</integer>
					<key>list1</key>
					<array>
						<integer>7</integer>
					</array>
					<key>mask</key>
					<integer>512</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>86</integer>
					<key>mask</key>
					<integer>0</integer>
					<key>text1</key>
					<string></string>
				</dict>
				<dict>
					<key>code</key>
					<integer>6</integer>
					<key>list1</key>
					<array>
						<integer>120</integer>
					</array>
				</dict>
				<dict>
					<key>code</key>
					<integer>89</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>87</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>35</integer>
					<key>text1</key>
					<string>Begin testing and setting a named variable with the text for the tempo (approximate metronome with Italian markings).</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>141</integer>
					<key>list1</key>
					<array>
						<integer>7</integer>
					</array>
					<key>text1</key>
					<string>Tempo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>67</integer>
					<key>list1</key>
					<array/>
					<key>mask</key>
					<integer>67108869</integer>
					<key>text1</key>
					<string>96</string>
					<key>text2</key>
					<string>Tempo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>86</integer>
					<key>mask</key>
					<integer>1</integer>
					<key>text1</key>
					<string></string>
				</dict>
				<dict>
					<key>code</key>
					<integer>67</integer>
					<key>list1</key>
					<array/>
					<key>mask</key>
					<integer>67108869</integer>
					<key>text1</key>
					<string>143</string>
					<key>text2</key>
					<string>Tempo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>86</integer>
					<key>mask</key>
					<integer>1</integer>
					<key>text1</key>
					<string></string>
				</dict>
				<dict>
					<key>code</key>
					<integer>67</integer>
					<key>list1</key>
					<array/>
					<key>mask</key>
					<integer>67108869</integer>
					<key>text1</key>
					<string>168</string>
					<key>text2</key>
					<string>Tempo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>86</integer>
					<key>mask</key>
					<integer>1</integer>
					<key>text1</key>
					<string></string>
				</dict>
				<dict>
					<key>code</key>
					<integer>67</integer>
					<key>list1</key>
					<array/>
					<key>mask</key>
					<integer>67108869</integer>
					<key>text1</key>
					<string>200</string>
					<key>text2</key>
					<string>Tempo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>86</integer>
					<key>mask</key>
					<integer>1</integer>
					<key>text1</key>
					<string></string>
				</dict>
				<dict>
					<key>code</key>
					<integer>14</integer>
					<key>list1</key>
					<array>
						<integer>120</integer>
					</array>
					<key>text1</key>
					<string>Prestissimo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>89</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>87</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>14</integer>
					<key>list1</key>
					<array>
						<integer>120</integer>
					</array>
					<key>text1</key>
					<string>Presto</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>89</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>88</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>87</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>67</integer>
					<key>list1</key>
					<array/>
					<key>mask</key>
					<integer>67108864</integer>
					<key>text1</key>
					<string>161</string>
					<key>text2</key>
					<string>Tempo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>86</integer>
					<key>mask</key>
					<integer>1</integer>
					<key>text1</key>
					<string></string>
				</dict>
				<dict>
					<key>code</key>
					<integer>14</integer>
					<key>list1</key>
					<array>
						<integer>120</integer>
					</array>
					<key>text1</key>
					<string>Vivacissimo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>89</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>87</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>14</integer>
					<key>list1</key>
					<array>
						<integer>120</integer>
					</array>
					<key>text1</key>
					<string>Allegrissimo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>89</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>88</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>88</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>87</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>67</integer>
					<key>list1</key>
					<array/>
					<key>mask</key>
					<integer>67108864</integer>
					<key>text1</key>
					<string>113</string>
					<key>text2</key>
					<string>Tempo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>86</integer>
					<key>mask</key>
					<integer>1</integer>
					<key>text1</key>
					<string></string>
				</dict>
				<dict>
					<key>code</key>
					<integer>67</integer>
					<key>list1</key>
					<array/>
					<key>mask</key>
					<integer>67108869</integer>
					<key>text1</key>
					<string>107</string>
					<key>text2</key>
					<string>Tempo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>86</integer>
					<key>mask</key>
					<integer>1</integer>
					<key>text1</key>
					<string></string>
				</dict>
				<dict>
					<key>code</key>
					<integer>14</integer>
					<key>list1</key>
					<array>
						<integer>120</integer>
					</array>
					<key>text1</key>
					<string>Allegro Moderato</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>89</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>87</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>14</integer>
					<key>list1</key>
					<array>
						<integer>120</integer>
					</array>
					<key>text1</key>
					<string>Moderato</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>89</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>88</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>87</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>67</integer>
					<key>list1</key>
					<array/>
					<key>mask</key>
					<integer>67108864</integer>
					<key>text1</key>
					<string>121</string>
					<key>text2</key>
					<string>Tempo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>86</integer>
					<key>mask</key>
					<integer>1</integer>
					<key>text1</key>
					<string></string>
				</dict>
				<dict>
					<key>code</key>
					<integer>14</integer>
					<key>list1</key>
					<array>
						<integer>120</integer>
					</array>
					<key>text1</key>
					<string>Allegretto</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>89</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>87</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>67</integer>
					<key>list1</key>
					<array/>
					<key>mask</key>
					<integer>67108864</integer>
					<key>text1</key>
					<string>131</string>
					<key>text2</key>
					<string>Tempo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>86</integer>
					<key>mask</key>
					<integer>1</integer>
					<key>text1</key>
					<string></string>
				</dict>
				<dict>
					<key>code</key>
					<integer>14</integer>
					<key>list1</key>
					<array>
						<integer>120</integer>
					</array>
					<key>text1</key>
					<string>Allegro</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>89</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>87</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>14</integer>
					<key>list1</key>
					<array>
						<integer>120</integer>
					</array>
					<key>text1</key>
					<string>Vivace</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>89</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>88</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>88</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>88</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>88</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>88</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>67</integer>
					<key>list1</key>
					<array/>
					<key>mask</key>
					<integer>67108869</integer>
					<key>text1</key>
					<string>60</string>
					<key>text2</key>
					<string>Tempo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>86</integer>
					<key>mask</key>
					<integer>1</integer>
					<key>text1</key>
					<string></string>
				</dict>
				<dict>
					<key>code</key>
					<integer>67</integer>
					<key>list1</key>
					<array/>
					<key>mask</key>
					<integer>67108869</integer>
					<key>text1</key>
					<string>79</string>
					<key>text2</key>
					<string>Tempo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>86</integer>
					<key>mask</key>
					<integer>1</integer>
					<key>text1</key>
					<string></string>
				</dict>
				<dict>
					<key>code</key>
					<integer>67</integer>
					<key>list1</key>
					<array/>
					<key>mask</key>
					<integer>67108869</integer>
					<key>text1</key>
					<string>84</string>
					<key>text2</key>
					<string>Tempo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>86</integer>
					<key>mask</key>
					<integer>1</integer>
					<key>text1</key>
					<string></string>
				</dict>
				<dict>
					<key>code</key>
					<integer>67</integer>
					<key>list1</key>
					<array/>
					<key>mask</key>
					<integer>67108869</integer>
					<key>text1</key>
					<string>89</string>
					<key>text2</key>
					<string>Tempo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>86</integer>
					<key>mask</key>
					<integer>1</integer>
					<key>text1</key>
					<string></string>
				</dict>
				<dict>
					<key>code</key>
					<integer>14</integer>
					<key>list1</key>
					<array>
						<integer>120</integer>
					</array>
					<key>text1</key>
					<string>Andante Moderato</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>89</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>87</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>14</integer>
					<key>list1</key>
					<array>
						<integer>120</integer>
					</array>
					<key>text1</key>
					<string>Andante</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>89</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>88</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>87</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>14</integer>
					<key>list1</key>
					<array>
						<integer>120</integer>
					</array>
					<key>text1</key>
					<string>Andantino</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>89</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>88</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>87</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>67</integer>
					<key>list1</key>
					<array/>
					<key>mask</key>
					<integer>67108864</integer>
					<key>text1</key>
					<string>72</string>
					<key>text2</key>
					<string>Tempo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>86</integer>
					<key>mask</key>
					<integer>1</integer>
					<key>text1</key>
					<string></string>
				</dict>
				<dict>
					<key>code</key>
					<integer>14</integer>
					<key>list1</key>
					<array>
						<integer>120</integer>
					</array>
					<key>text1</key>
					<string>Adagio</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>89</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>87</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>14</integer>
					<key>list1</key>
					<array>
						<integer>120</integer>
					</array>
					<key>text1</key>
					<string>Adagietto</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>89</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>88</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>88</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>87</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>67</integer>
					<key>list1</key>
					<array/>
					<key>mask</key>
					<integer>67108869</integer>
					<key>text1</key>
					<string>44</string>
					<key>text2</key>
					<string>Tempo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>86</integer>
					<key>mask</key>
					<integer>1</integer>
					<key>text1</key>
					<string></string>
				</dict>
				<dict>
					<key>code</key>
					<integer>67</integer>
					<key>list1</key>
					<array/>
					<key>mask</key>
					<integer>67108869</integer>
					<key>text1</key>
					<string>49</string>
					<key>text2</key>
					<string>Tempo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>86</integer>
					<key>mask</key>
					<integer>1</integer>
					<key>text1</key>
					<string></string>
				</dict>
				<dict>
					<key>code</key>
					<integer>67</integer>
					<key>list1</key>
					<array/>
					<key>mask</key>
					<integer>67108869</integer>
					<key>text1</key>
					<string>54</string>
					<key>text2</key>
					<string>Tempo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>86</integer>
					<key>mask</key>
					<integer>1</integer>
					<key>text1</key>
					<string></string>
				</dict>
				<dict>
					<key>code</key>
					<integer>14</integer>
					<key>list1</key>
					<array>
						<integer>120</integer>
					</array>
					<key>text1</key>
					<string>Larghetto</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>89</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>87</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>14</integer>
					<key>list1</key>
					<array>
						<integer>120</integer>
					</array>
					<key>text1</key>
					<string>Largo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>89</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>88</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>87</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>14</integer>
					<key>list1</key>
					<array>
						<integer>120</integer>
					</array>
					<key>text1</key>
					<string>Lento</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>89</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>88</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>87</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>67</integer>
					<key>list1</key>
					<array/>
					<key>mask</key>
					<integer>67108864</integer>
					<key>text1</key>
					<string>24</string>
					<key>text2</key>
					<string>Tempo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>86</integer>
					<key>mask</key>
					<integer>1</integer>
					<key>text1</key>
					<string></string>
				</dict>
				<dict>
					<key>code</key>
					<integer>14</integer>
					<key>list1</key>
					<array>
						<integer>120</integer>
					</array>
					<key>text1</key>
					<string>Larghissimo</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>89</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>87</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>14</integer>
					<key>list1</key>
					<array>
						<integer>120</integer>
					</array>
					<key>text1</key>
					<string>Grave</string>
				</dict>
				<dict>
					<key>code</key>
					<integer>89</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>88</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>88</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>88</integer>
				</dict>
				<dict>
					<key>code</key>
					<integer>88</integer>
				</dict>
			</array>
			<key>allfiles</key>
			<false/>
			<key>date</key>
			<date>2015-03-02T12:16:57Z</date>
			<key>hidden</key>
			<false/>
			<key>name</key>
			<string>Get Tempo</string>
		</dict>
	</array>
	<key>build</key>
	<string>3853</string>
	<key>prefsVersion</key>
	<string>3851</string>
	<key>version</key>
	<string>3.4.0.1</string>
</dict>
</plist>

Image

2MR2PostMarch 2, 2015, 09:28
Avatar photo
Administrator
Posts: 2084
Registered:
August 23, 2012, 19:27
Normal topicRe: An action to assign the Italian tempo to a custom field based on BPM

Nice.

Posting the innards of an action has its risks as Yate will auto update the format whenever changes occur....which is often.

Here's a hidden feature. If you hold down the Shift key and bring up the context menu in an action you will see options to save the action to the clipboard as text or very poor stand alone HTML. 🙂

cpkPostMarch 2, 2015, 19:19
Advanced
Posts: 95
Registered:
March 1, 2015, 02:55
Normal topicRe: An action to assign the Italian tempo to a custom field based on BPM

AH!!! I was really not happy that I was unable to copy from the action editor so I went this route with the .plist. Why would you hide such a feature as copying something to the clipboard? But, Thank you for telling me about it! I will repost the action as text below - it will certainly be more readable that way. 🙂

For those that are curious about why it seems to jump all over the place in testing the BPM, it is because I implemented this as a sort of binary search where the list of possible tempos is split in half for each test repeatedly until the textual tempo range is found for the BPM. It is typically faster than a linear search through a list.

Comment This action is intended to calculate and create a classical textual tempo descriptor based on the BPM that is still often used in sheet music.  For this to work, the BPM has to already exist and if it doesn't then the action will fail.  This is a calculated field and there is no point in saving it to the music track but without saving the variable to a custom field there isn't a way to display in on a custom panel.  So a custom field has to be created to save the Tempo in.

Comment Verify if BPM data exists and fail if it doesn't.
Test if the BPM field exists
if false
	Clear the Custom 6 (Tempo) field
	Exit
else
	Comment Begin testing and setting a named variable with the text for the tempo (approximate metronome with Italian markings).
	Copy the BPM field to named variable 'Tempo'
	Test if the numeric value of named variable 'Tempo' > "96" (Set result)
	if true
		Test if the numeric value of named variable 'Tempo' > "143" (Set result)
		if true
			Test if the numeric value of named variable 'Tempo' > "168" (Set result)
			if true
				Test if the numeric value of named variable 'Tempo' > "200" (Set result)
				if true
					Set the Custom 6 (Tempo) field to "Prestissimo"
					Exit
				else
					Set the Custom 6 (Tempo) field to "Presto"
					Exit
				endif
			else
				Test if the numeric value of named variable 'Tempo' < "161" (Set result)
				if true
					Set the Custom 6 (Tempo) field to "Vivacissimo"
					Exit
				else
					Set the Custom 6 (Tempo) field to "Allegrissimo"
					Exit
				endif
			endif
		else
			Test if the numeric value of named variable 'Tempo' < "113" (Set result)
			if true
				Test if the numeric value of named variable 'Tempo' > "107" (Set result)
				if true
					Set the Custom 6 (Tempo) field to "Allegro Moderato"
					Exit
				else
					Set the Custom 6 (Tempo) field to "Moderato"
					Exit
				endif
			else
				Test if the numeric value of named variable 'Tempo' < "121" (Set result)
				if true
					Set the Custom 6 (Tempo) field to "Allegretto"
					Exit
				else
					Test if the numeric value of named variable 'Tempo' < "131" (Set result)
					if true
						Set the Custom 6 (Tempo) field to "Allegro"
						Exit
					else
						Set the Custom 6 (Tempo) field to "Vivace"
						Exit
					endif
				endif
			endif
		endif
	endif
	Test if the numeric value of named variable 'Tempo' > "60" (Set result)
	if true
		Test if the numeric value of named variable 'Tempo' > "79" (Set result)
		if true
			Test if the numeric value of named variable 'Tempo' > "84" (Set result)
			if true
				Test if the numeric value of named variable 'Tempo' > "89" (Set result)
				if true
					Set the Custom 6 (Tempo) field to "Andante Moderato"
					Exit
				else
					Set the Custom 6 (Tempo) field to "Andante"
					Exit
				endif
			else
				Set the Custom 6 (Tempo) field to "Andantino"
				Exit
			endif
		else
			Test if the numeric value of named variable 'Tempo' < "72" (Set result)
			if true
				Set the Custom 6 (Tempo) field to "Adagio"
				Exit
			else
				Set the Custom 6 (Tempo) field to "Adagietto"
				Exit
			endif
		endif
	else
		Test if the numeric value of named variable 'Tempo' > "44" (Set result)
		if true
			Test if the numeric value of named variable 'Tempo' > "49" (Set result)
			if true
				Test if the numeric value of named variable 'Tempo' > "54" (Set result)
				if true
					Set the Custom 6 (Tempo) field to "Larghetto"
					Exit
				else
					Set the Custom 6 (Tempo) field to "Largo"
					Exit
				endif
			else
				Set the Custom 6 (Tempo) field to "Lento"
				Exit
			endif
		else
			Test if the numeric value of named variable 'Tempo' < "24" (Set result)
			if true
				Set the Custom 6 (Tempo) field to "Larghissimo"
				Exit
			else
				Set the Custom 6 (Tempo) field to "Grave"
				Exit
			endif
		endif
	endif
endif
Pages: 1
Mingle Forum by Cartpauj | Version: 1.1.0beta | Page loaded in: 0.015 seconds.