# Rundung auf 20er Schritte im Tag BMP

**URL:** https://community.mp3tag.de/t/rundung-auf-20er-schritte-im-tag-bmp/7075
**Category:** Allgemein
**Created:** [July 24, 2008, 5:44pm UTC](https://community.mp3tag.de/t/rundung-auf-20er-schritte-im-tag-bmp/7075 "2008-07-24T17:44:11Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![otifant](https://community.mp3tag.de/letter_avatar_proxy/v4/letter/o/8baadc/32.png) [@otifant](https://community.mp3tag.de/u/otifant)
#### Post date: [July 24, 2008, 5:44pm UTC](https://community.mp3tag.de/t/rundung-auf-20er-schritte-im-tag-bmp/7075/1 "2008-07-24T17:44:11Z")

</div>

![:music:](https://community.mp3tag.de/uploads/default/original/1X/2ba05d1ade5eb0d15fc173be6f717dbe63890a70.gif ":music:")

Hallo, ich suche eine Möglichkeit den **TAG "BPM"** zu runden. Und zwar soll die Endwerte in **20er Schritten** (wenn gar nicht möglich dann in 10er Schritte) sein.

Sprich aus 123.56 wird 120,  
aus 131,12 wird 140,

also als Ergebnis die Werte 40,60,80,100,120,140 ....  
oder (wenn es nur in 10er Schritten geht) dann 40,50,60,70,80,90.

Die Rundung auf Integer-Werte geht mit problemlos:

$left($mul($replace(%BPM%,.,),10),$len($mul($div(%BPM%,1),10)))  
$ifgreater($mod(%BPM%,10),4,$add($div(%BPM%,10),1),$div(%BPM%,10))

Aber den z.B. den Wert 129,65 auf 140 zu runden scheitere ich leider

Danke  
Kersten  
 ![:music:](https://community.mp3tag.de/uploads/default/original/1X/2ba05d1ade5eb0d15fc173be6f717dbe63890a70.gif ":music:")

---

<div class="post-metadata">

### Author: ![DetlevD](https://community.mp3tag.de/user_avatar/community.mp3tag.de/detlevd/32/123_2.png) [@DetlevD](https://community.mp3tag.de/u/DetlevD)
#### Post date: [July 25, 2008, 6:09am UTC](https://community.mp3tag.de/t/rundung-auf-20er-schritte-im-tag-bmp/7075/2 "2008-07-25T06:09:23Z")

</div>

> [@otifant](#):
>
> ... Hallo, ich suche eine Möglichkeit den **TAG "BPM"** zu runden. Und zwar soll die Endwerte in **20er Schritten** (wenn gar nicht möglich dann in 10er Schritte) sein.
> 
> Sprich aus 123.56 wird 120,  
> aus 131.12 wird 140,  
> ...  
> Die Rundung auf Integer-Werte geht mit problemlos:  
> $left($mul($replace(%BPM%,.,),10),$len($mul($div(%BPM%,1),10)))  
> $ifgreater($mod(%BPM%,10),4,$add($div(%BPM%,10),1),$div(%BPM%,10))  
> ...

Du kannst eine dritte Aktion anhängen:

~~$ifgreater(%BPM%,$sub($add($mul($div(%BPM%,20),20),$max(1,$div(20,2))),1),$add($mul($div(%BPM%,20),20),20),$mul($div(%BPM%,20),20))~~

DD.20080725.1009.CEST

Dieser Vorschlag war nichts ☹ , denn die Funktion $max() gibt es zurzeit nicht Mp3tag.

DD.20080726.1300.CEST

---

<div class="post-metadata">

### Author: ![otifant](https://community.mp3tag.de/letter_avatar_proxy/v4/letter/o/8baadc/32.png) [@otifant](https://community.mp3tag.de/u/otifant)
#### Post date: [July 25, 2008, 5:09pm UTC](https://community.mp3tag.de/t/rundung-auf-20er-schritte-im-tag-bmp/7075/3 "2008-07-25T17:09:07Z")

</div>

> [@DetlevD](#):
>
> Du kannst eine dritte Aktion anhängen:
> 
> $ifgreater(%BPM%,$sub($add($mul($div(%BPM%,20),20),$max(1,$div(20,2))),1),$add($mul($div(%BPM%,20),20),20),$mul($div(%BPM%,20),20))

Hallo und vielen Dank für den Formatstring,

der aber immer aufrundet - sprich aus 144 wird 160 statt richtigerweise 140 - d.h. bei dem Beispiel müßten die Werte 140-149,99 auf 140 abgerundet werden und die Werte 150-160 auf 160 gerundet werden.

Danke  
Kersten

---

<div class="post-metadata">

### Author: ![DetlevD](https://community.mp3tag.de/user_avatar/community.mp3tag.de/detlevd/32/123_2.png) [@DetlevD](https://community.mp3tag.de/u/DetlevD)
#### Post date: [July 26, 2008, 12:03pm UTC](https://community.mp3tag.de/t/rundung-auf-20er-schritte-im-tag-bmp/7075/4 "2008-07-26T12:03:11Z")

</div>

Runden von BPM Werten mit bis zu 2 Dezimalstellen auf ganze Zahlen mit Rundungsschrittweite BPM\_ROUNDBY = n (mit n als Element von N+):

```
$div($mul($mul(%BPM_ROUNDBY%,100),$ifgreater($sub($div($mul($left($replace(%BPM%,.,)00,$add($len($div(%BPM%,1)),2)),10),$mul(%BPM_ROUNDBY%,100)),$mul($div($left($replace(%BPM%,.,)00,$add($len($div(%BPM%,1)),2)),$mul(%BPM_ROUNDBY%,100)),10)),4,$add($div($left($replace(%BPM%,.,)00,$add($len($div(%BPM%,1)),2)),$mul(%BPM_ROUNDBY%,100)),1),$div($left($replace(%BPM%,.,)00,$add($len($div(%BPM%,1)),2)),$mul(%BPM_ROUNDBY%,100)))),100)

```

Beispiele:  
BPM=149.99 und ROUNDBY=1 ergibt BPM=150.  
BPM=149.99 und ROUNDBY=2 ergibt BPM=150.  
BPM=149.99 und ROUNDBY=3 ergibt BPM=150.  
BPM=149.99 und ROUNDBY=4 ergibt BPM=148.  
BPM=149.99 und ROUNDBY=5 ergibt BPM=150.  
BPM=149.99 und ROUNDBY=6 ergibt BPM=150.  
BPM=149.99 und ROUNDBY=7 ergibt BPM=147.  
BPM=149.99 und ROUNDBY=8 ergibt BPM=152.  
BPM=149.99 und ROUNDBY=9 ergibt BPM=153.  
BPM=149.99 und ROUNDBY=10 ergibt BPM=150.  
BPM=149.99 und ROUNDBY=20 ergibt BPM=140.  
BPM=149.99 und ROUNDBY=40 ergibt BPM=160.  
BPM=149.99 und ROUNDBY=100 ergibt BPM=100.

Anfang Aktionengruppe **Round BPM to integer**

Aktion #1  
_Aktionstyp 5:_ **Tagfeld formatieren**  
_Feld:_ **BPM\_MIXMEISTER**  
_Formatstring:_ **$if2(%BPM\_MIXMEISTER%,%BPM%)**

Aktion #2  
_Aktionstyp 5:_ **Tagfeld formatieren**  
_Feld:_ **BPM\_ROUNDBY**  
_Formatstring:_ **1**

Aktion #3  
_Aktionstyp 5:_ **Tagfeld formatieren**  
_Feld:_ **BPM\_A**  
_Formatstring:_ **$mul(%BPM\_ROUNDBY%,100)**

Aktion #4  
_Aktionstyp 5:_ **Tagfeld formatieren**  
_Feld:_ **BPM\_B**  
_Formatstring:_ **$left($replace(%BPM%,.,)00,$add($len($div(%BPM%,1)),2))**

Aktion #5  
_Aktionstyp 5:_ **Tagfeld formatieren**  
_Feld:_ **BPM\_C**  
_Formatstring:_ **$div($mul(%BPM\_B%,10),%BPM\_A%)**

Aktion #6  
_Aktionstyp 5:_ **Tagfeld formatieren**  
_Feld:_ **BPM\_D**  
_Formatstring:_ **$div(%BPM\_B%,%BPM\_A%)**

Aktion #7  
_Aktionstyp 5:_ **Tagfeld formatieren**  
_Feld:_ **BPM\_E**  
_Formatstring:_ **$mul(%BPM\_D%,10)**

Aktion #8  
_Aktionstyp 5:_ **Tagfeld formatieren**  
_Feld:_ **BPM\_F**  
_Formatstring:_ **$ifgreater($sub(%BPM\_C%,%BPM\_E%),4,$add(%BPM\_D%,1),%BPM\_D%)**

Aktion #9  
_Aktionstyp 5:_ **Tagfeld formatieren**  
_Feld:_ **BPM**  
_Formatstring:_ **$div($mul(%BPM\_A%,%BPM\_F%),100)**

Aktion #10  
_Aktionstyp 9:_ **Tagfelder entfernen**  
_Folgende Tagfelder entfernen (mit Semikolon getrennt):_ **BPM\_A;BPM\_B;BPM\_C;BPM\_D;BPM\_E;BPM\_F;BPM\_ROUNDBY**

Ende Aktionengruppe **Round BPM to integer** (10 Aktionen)

oder

Anfang Aktionengruppe **Round BPM to integer**

Aktion #1  
_Aktionstyp 5:_ **Tagfeld formatieren**  
_Feld:_ **BPM\_MIXMEISTER**  
_Formatstring:_ **$if2(%BPM\_MIXMEISTER%,%BPM%)**

Aktion #2  
_Aktionstyp 5:_ **Tagfeld formatieren**  
_Feld:_ **BPM\_ROUNDBY**  
_Formatstring:_ **1**

Aktion #3  
_Aktionstyp 5:_ **Tagfeld formatieren**  
_Feld:_ **BPM**  
_Formatstring:_ **$div($mul($mul(%BPM\_ROUNDBY%,100),$ifgreater($sub($div($mul($left($replace(%BPM%,.,)00,$add($len($div(%BPM%,1)),2)),10),$mul(%BPM\_ROUNDBY%,100)),$mul($div($left($replace(%BPM%,.,)00,$add($len($div(%BPM%,1)),2)),$mul(%BPM\_ROUNDBY%,100)),10)),4,$add($div($left($replace(%BPM%,.,)00,$add($len($div(%BPM%,1)),2)),$mul(%BPM\_ROUNDBY%,100)),1),$div($left($replace(%BPM%,.,)00,$add($len($div(%BPM%,1)),2)),$mul(%BPM\_ROUNDBY%,100)))),100)**

Ende Aktionengruppe **Round BPM to integer** (3 Aktionen)

DD.20080726.1602.CEST

Aktion angepasst für BPM Werte mit bis zu 2 Dezimalstellen.

DD.20080728.1152

---

<div class="post-metadata">

### Author: ![otifant](https://community.mp3tag.de/letter_avatar_proxy/v4/letter/o/8baadc/32.png) [@otifant](https://community.mp3tag.de/u/otifant)
#### Post date: [July 27, 2008, 10:50am UTC](https://community.mp3tag.de/t/rundung-auf-20er-schritte-im-tag-bmp/7075/5 "2008-07-27T10:50:36Z")

</div>

> [@DetlevD](#):
>
> Runden von BPM Werten mit 2 Dezimalstellen auf ganze Zahlen mit Rundungsschrittweite BPM\_ROUNDBY = n (mit n als Element von N+):  
> Anfang Aktionengruppe **Round BPM to integer**
> 
> Aktion #1  
> _Aktionstyp 5:_ **Tagfeld formatieren**  
> _Feld:_ **BPM\_MIXMEISTER**  
> _Formatstring:_ **$if2(%BPM\_MIXMEISTER%,%BPM%)**
> 
> Aktion #2  
> _Aktionstyp 5:_ **Tagfeld formatieren**  
> _Feld:_ **BPM\_ROUNDBY**  
> _Formatstring:_ **1**
> 
> Aktion #3  
> _Aktionstyp 5:_ **Tagfeld formatieren**  
> _Feld:_ **BPM**  
> _Formatstring:_ **$div($mul($mul(%BPM\_ROUNDBY%,100),$ifgreater($sub($div($mul($replace(%BPM%,.,),10),$mul(%BPM\_ROUNDBY%,100)),$mul($div($replace(%BPM%,.,),$mul(%BPM\_ROUNDBY%,100)),10)),4,$add($div($replace(%BPM%,.,),$mul(%BPM\_ROUNDBY%,100)),1),$div($replace(%BPM%,.,),$mul(%BPM\_ROUNDBY%,100)))),100)**
> 
> Ende Aktionengruppe **Round BPM to integer** (3 Aktionen)
> 
> DD.20080726.1602.CEST

Hallo DetlefD,

vielen Dank für die perfekte Erklärung und Lösung meines Problemes. Deine Lösung 2 funktioniert perfekt. Aufpassen sollte man nur, wenn der Tag BPM bereits gerundete Werte enthält (weil z.B. die CD ausnahmsweise schon Werte enthält, den sonst ist das Ergebnis der Aktionen gleich 0. Nachdem ich jetzt rund 10.000 Titel mit BPM Werten versehen habe, kann ich als Rundungsergebnis am besten die 10 er Schrittweite empfehlen. Bei der von mir angedachten 20er Schrittweite fallen zu viele Titel in eine Kategorie.

Nochmals vielen Dank  
otifant 😃

---

<div class="post-metadata">

### Author: ![DetlevD](https://community.mp3tag.de/user_avatar/community.mp3tag.de/detlevd/32/123_2.png) [@DetlevD](https://community.mp3tag.de/u/DetlevD)
#### Post date: [July 28, 2008, 7:59am UTC](https://community.mp3tag.de/t/rundung-auf-20er-schritte-im-tag-bmp/7075/6 "2008-07-28T07:59:10Z")

</div>

> [@otifant](#):
>
> Hallo Detle ~~f~~ vD,  
> vielen Dank für die perfekte Erklärung und Lösung meines Problemes. Deine Lösung 2 funktioniert perfekt. Aufpassen sollte man nur, wenn der Tag BPM bereits gerundete Werte enthält ... , den sonst ist das Ergebnis der Aktionen gleich 0. ...

Das sollte mit der geänderten Version nicht mehr vorkommen (siehe oben).  
Die Formel akzeptiert neben Zahlen mit 1..2 Dezimalstellen auch ganze Zahlen als BPM Eingabewerte.

DD.20080728.1159.CEST

---

<div class="post-metadata">

### Author: ![Moonbase](https://community.mp3tag.de/user_avatar/community.mp3tag.de/moonbase/32/207_2.png) [@Moonbase](https://community.mp3tag.de/u/Moonbase)
#### Post date: [October 5, 2008, 2:56pm UTC](https://community.mp3tag.de/t/rundung-auf-20er-schritte-im-tag-bmp/7075/7 "2008-10-05T14:56:22Z")

</div>

Huch, wie kompliziert! Ohne jetzt die Chance zu haben, das nachzuprüfen (sitze grade an einer Linux-Box ohne MP3Tag), sollte doch auch Folgendes funktionieren:

**Runden von BPM auf ganze 10er-Werte**

```
$sub($add(%BPM%,5),$mod($add(%BPM%,5),10))

```

Sollte m.E. sowohl für Werte der Form "xxx.xx" als auch "xxx" funktionieren, da die Arithmetik-Funktionen (zumindest bei foobar) Strings zuerst in Integer-Werte konvertieren.

🕶

Nur mal interessehalber: Wozu benötigst Du eine solche "Vergröberung"?

Professionelle DJs bestätigen mir, dass für eine gute Arbeit beim Mixen eine Präzision von _mindestens_ 0.05 BPM erwartet wird. (Das ist ja auch der Grund, warum sich beim TBPM-Tag etliche Tools über die ID3v2-Spezifikation hinwegsetzen, die ja ein ganzzahliges (Integer-)BPM fordert.)

---

<div class="post-metadata">

### Author: ![fuzi1968](https://community.mp3tag.de/letter_avatar_proxy/v4/letter/f/9e8a1a/32.png) [@fuzi1968](https://community.mp3tag.de/u/fuzi1968)
#### Post date: [October 15, 2008, 4:34am UTC](https://community.mp3tag.de/t/rundung-auf-20er-schritte-im-tag-bmp/7075/8 "2008-10-15T04:34:22Z")

</div>

> [@Moonbase](#):
>
> (Das ist ja auch der Grund, warum sich beim TBPM-Tag etliche Tools über die ID3v2-Spezifikation hinwegsetzen, die ja ein ganzzahliges (Integer-)BPM fordert.)

Tja, die ID3v2 Spezi + der Inhalt der Felder hat ein wohl ahnungsloser geschrieben. Ist ja nicht das einzige Feld.

Meiner Meinung nach gehört das was neues gescheites her - was für alle Formate gültig wäre. Habe auch schon eine E-Mail an [w3.org](http://w3.org) geschrieben, evtl. ein XML Format wäre etwas lesbarer (und erweiterbarer), aber ...
