ARTIST-Tag nach MB Picard nicht teilbar

Ich tagge viele meiner Alben mit Picard. Damit die Struktur der Multi-Interpreten aus Musicbrainz erhalten bleibt, belasse ich diese wie sie übertragen werden.

Scheinbare Struktur nach Übertragung: artist[0]join[0]artist[1]join[1]artist[2]join[2]artist[…]

Bsp.: The Bug vs. The Rootsman feat. He Man
Das kann allerdings beliebig kompliziert werden

Gibt es ein RegExp oder ein Scripting, das nahezu zuverlässig des String aufteilt.

Hinzukommt noch, das in manchen Fällen, der String ' feat. ', ' vs. ' bzw. jeder andere nicht mittels der Aktion Ersetzen getauscht werden kann. Scheinbar wird ein nicht sichtbares Zeichen eingefügt, das die Funktion nicht identifizieren kann.

Hat jemand etwas ähnliches beobachtet.

Datei bzw. Aktion kann bereitgestellt werden.

bkh

ehrlich gesagt, ich verstehe nicht so wirklich, was du willst.
Vielleicht kommen wir über einen passenden oder dann nicht passenden Ratschlag dichter an das Problem:
Es gibt eine Aktion vom Typ "Tag-Felder aufteilen", wo man einen Trenner definieren kann. Dann entstehen Multi-value-Felder. Ist es das, was du willst?

Stimmt ist etwas verwirrend beschrieben.

Ich verwende die Aktion vom Typ "Tag-Felder aufteilen"
nach der Aktion vom Typ "Tag-Felder formatieren"
1.
Feld: ARTIST
Formatstring: "$replace(%artist%,' feat. ',\,' Feat. ',\,' featuring ',\,' Featuring ',\)"

Feld: ARTIST
Trennzeichen: \

Dabei wird ' feat. ' nicht umformatiert, wenn der String aus MB Picard stammt.

Im Feld ARTISTSORT funktioniert es jedoch. Das ist aber sicher kein mp3Tag-Prob, ich würde 'lediglich' (grins) das irgendwie abfangen.

Richtig Klasse wäre es, wenn die oben beschriebene Struktur in ARTIST und JOIN in einzelnen (Multi-)Feldern abgelegt werden könnte.

THX bkh

Erscheint mir, ehrlich gesagt, nicht plausibel.
Du kannst den Ausdruck testen in Konverter>Tag-Tag. Vielleicht findest du dort den Unterschied.
wenn du statt des \ zwei \\ verwendest, müsste eigentlich gleich die Feldtrennung stattfinden.

MusicBrainz nennt den Trenner zwischen den Künstlern "Join Phrase". Die kann ein beliebiger Text (oder auch nur ein Leerschlag) sein.

Beispiel:

Das dürfte einigemassen tricky werden, die einzelnen Künstler sauber zu trennen:

Ganz genau, darin stecke ich erstmal fest.
Habe derzeit Aktionen mit vs., with, duet with, feat. usw. die können aber nur jeweils 2 Interpreten und auch nur mit der Einschränkung, das sie nicht von Picard stammen dürfen.

Versuche mal das Picard-Prob mittels RegEx einzugrenzen. Mal sehen.

Aber vielen Dank erstmal

bkh

In Picard selbst gibt es auch das Tag %artists%, das bereits alle Künstler als separate Werte ohne "Join Phrases" enthält.

Vielleicht hilft dir das, entweder in Picard oder in MP3Tag. Auch dort solltest Du Zugriff auf dieses Tag haben.

Ich verstehe aus dem Text oben noch nicht genau, was du mit den Werten machen willst. Willst Du ARTIST als einzelnen Wert lassen, aber die Join Phrases entfernen? Oder willst Du es zu einem Feld mit mehreren Werten umwandeln (was auch geht, aber von vielen Playern nicht unterstützt wird)? Beides sollte aber mit dem %artists% aus Picard möglich sein.

Ich möchte die Interpreten (und die join prases) jeweils als einzelne Werte abgelegt haben. Der Sinn dahinter liegt in einer ausufernden Artist-Liste in den Playern.

Vielen Dank für den Tipp, werde ich mal checken.

bkh

@phw hat Recht!

Der korrekte Inhalt von ARTISTS aus Picard sieht für Track #4 so aus (und wird nun neu auch in meinen mp3 richtig gespeichert)

Die beteiligten Künstler werden in ARTISTS (nicht in wie im Titel von @bkh geschrieben ARTIST) mit Strichpunkt getrennt aufgeführt, ohne Join Phrase.

Erster kleiner Teilerfolg:
Das Nicht-Teilen mittels Aktion "Ersetzen" konnte ich durch "Ersetzen mit regulärem Ausdruck" umgehen.

Mal sehen, ob ich jetzt noch die vielen verschiedenen JOIN-Phrases (and, vs., pres, feat. , & , ...) mit einem RegEx-Ausdruck gebacken bekomme.

Danke für eure Bemühungen

bkh

1 Like

Ich habe seit dem letzten Post vieles ausprobiert. Bin aber nicht wirklich weitergekommen bei Collaborationen mit mehr als zwei Interpreten.
Bsp:
Jax Jones feat. Demi Lovato & Stefflon Don
Jones, Jax feat. Lovato, Demi & Don, Stefflon

David Guetta & Afrojack feat․ Charli XCX & French Montana
Guetta, David & Afrojack feat. Charli XCX & French Montana

Martin Garrix & David Guetta feat․ Jamie Scott & Romy Dya
Garrix, Martin & Guetta, David feat. Scott, Jamie & Dya, Romy

Die Interpreten werden getrennt, ich kann aber die 'join phrases' nicht per RegEx merken und mittels einer neuen Aktion in das Tag JOIN eintragen.

Meine Frage ist nun, kann das überhaupt funktionieren, oder ist das vergebliche Liebesmüh

Danke für das tolle Programm und den mehr als guten Support hier in der Community.

bkh

Ist das wieder eine Anzeige in Musicbrainz? Wäre schön, wenn das jedes Mal deutlich würde.
Auch wäre es nett, wenn du deine Versuche hier veröffentlichen würdest, weil man dann besser die kleinen Änderungen oder anderen Ansätze beschreiben kann.

Zum Problem von uneinheitlich verwendeten Namen: da hilft nur Handarbeit oder eine Aktion, die dann bei per Hand markierten und vielleicht per Filter gezeigten die Künstlernamen wieder in die richtige Reihenfolge bringt. Automatisch wird das nicht gehen. Dafür gibt es zu viele Künstlernamen, die ein Komma enthalten dürfen und genau so stehen bleiben sollten.

Danke ohrenkino für die schnelle Antwort:

Die 'join phrases' verbinden mehrere Interpreten miteinander. Wie du richtig anmerkst, sind den Produzenten/Interpreten keine Grenzen gesetzt.
Rein technisch gesehen sind die join phrases genauso multi-tags wie die anderen auch.

Ich gehe zur Zeit genauso vor wie du beschrieben hast: Teilen/Featuren danach manuell nacharbeiten.

In dem MB-Tag ARTISTS liegen die Interpreten zwar jeweils getrennt vor:
ARTIST David Guetta & Afrojack feat․ Charli XCX & French Montana
ARTISTS David Guetta\Afrojack\Charli XCX\French Montana

Ziel:
ARTIST David Guetta\Afrojack\Charli XCX\French Montana
JOIN ' & \ feat. \ & '

Das Kopieren würde ich ja noch hinbekommen (grins), aber die join phrases in der korrekten Reihenfolge nach JOIN zu übertragen, übersteigt mein technisches Können.

Werde vmtl. bei Filtern mit Handarbeit bleiben (müssen).

Trotzdem vielen Dank

Ich gebe dir da recht,

Nochmal für mich als Nicht-Musicbrainz-Benutzer:
ist JOIN ein benutzer-definiertes Feld?
Sollen nur Daten in ARTIST geändert werden?
Geht es um eine Anzeige in Musicbrainz, die dort ggf. mit Programmieraufwand auf bestimmte Schlüsselwörter reagiert?
Woher weiß man, wo der (die?) Hauptkünstler aufhör(t)(en) und die gefeatureten anfangen?

Join Phrases sind ein Feld das über die MusicBrainz API geliefert wird und verwendet wird, um mehrere Interpreten wie im Beispiel geeignet zusammen zu bauen.

Aus meiner Sicht könnte wie von @ohrenkino vorgeschlagen, der manuelle Weg gegangen werden (inkl. Filter und Co.) oder eine angepasste MusicBrainz Tag-Quelle zum initialen Import verwendet werden.

In dieser angepassten MusicBrainz Tag-Quelle werden die beiden Felder ARTIST und JOIN dann einfach entsprechend der Anforderungen gefüllt.

Im Nachhinein wird das für bestehende Künstler nicht mehr automatisch aufgrund bereits gespeicherter Information funktionieren. Es gibt IMHO viel zu viele Varianten für die "Trennzeichen" die gleichzeitig auch Teil des Namens sein können. Prominentes Beispiel ist das "&" Zeichen.

Du kannst aber natürlich den von @florian beschriebenen Weg gehen.

Wie Du oben aus meinem Beispiel in #4 sehen kannst, ist jedes erdenkliche Zeichen bei MusicBrainz als «Join Phrase» möglich, sogar Leerschläge.
Deshalb scheint es mir nur beim Bezug dieser Informationen direkt von MB möglich, sie in geeigneter Form in eigene, benutzerdefinierte Tags zu speichern.

1 Like

Ich danke euch für die ausführlichen Antworten.

Ich habe mir sowas fast schon gedacht. In Scriptsprachen wäre eine algorithmische Aufteilung über ARTISTS theoretisch denkbar, aber über RegEx nicht.

Ein direkter Bezug über MB Ist (noch) nicht möglich, werde aber dort bzw. bei MB Picard einen Vorstoß plazieren.

Nochmals Dank für alles

bkh

Welcher Algorithmus erkennt denn den Künstler, den der mitgemacht hat und dann welche, die noch dazukommen?
Wenn du das hier formulieren kannst, dann ist das vermutlich auch mit einem regulären Ausdruck zu erledigen.
Also wenn z.B. im "feat." der Trenner ist, dann kann man so einen String wunderbar in den Teil davor und danach zerlegen und das Wort "feat." auch noch in "JOIN" unterbringen.
Wenn man allerdings "wissen" muss, von wem die Rede ist, sprich also erst mal in einer Datenbank (=Liste) nachsehen muss, dann würde vermutlich auch so etwas umzusetzen sein, was dann aber echt umständlich zu pflegen ist. Da wäre der Ansatz mit Filter und einigen generischen Mustern einfacher.
Deshalb: woher weiß ich, dass die Angaben in ARTIST noch mal bearbeitet werden müssen - und wenn, woran erkenne ich dann die Arbeitsvorschrift?

Ich weiß ich habe blaue Augen …

String von links parsen: artists(0) - der Bereich bis artist(1) ist join(0) - artists(1) - der Bereich bis artist(n) ist join(n-1) - artist(n) bis kein artists(n+1) mehr existiert

artist = artists(0)\\artists(1)\\artists(n)
join = join(0)\\join(1)\\join(n-1)

aber das wird es so nicht geben, glaub ich mal

THX