Cubase 5 - VST-Expression

- 1 -


Das Problem[1], für das »VST Expression« eine Lösung vorschlägt, existiert eigentlich schon ebenso lange, wie es MIDI gibt: man möchte mit Synthesizern bzw. Samplern die unterschiedlichen Spielweisen realisieren, die bei allen akustischen Instrumenten einen guten Teil zur Vielfalt und Lebendigkeit ihres Klanges beitragen.

Unten findet sich ein Beispiel von einer akustische Gitarre; dabei sind alle roten Symbole Hinweise auf verschiedene Spielweisen. Die Rauten bedeuten »Flagolett«; der aufwärts weisende Strich ist ein »Glissando« der linken Hand; das „H” steht für »Hammer On« (also das Erzeugen des Tons durch Aufschlagen der linken Hand statt Zupfen mit der rechten); das „+” schließlich ist eine gedämpfte »Dead Note«.

VST Expression Noten-Beispiel

Jeder dieser Töne klingt anders, und muß im Sampler mit einem neuen Sound gespielt werden:

Wenn man das mit einem Sampler realisieren wollte, mußte man entweder für jeden Sound eine neue Spur anlegen, und die einzelnen Noten über sie verteilen. In diesem einfachen Fall wären das fünf Spuren, um vier Takte zu realisieren - und in der Realität würden das dann locker viele hundert Tracks, in denen sich zum Schluß kaum jemand zurecht findet.

Eine zweite Möglichkeit wäre die Verwendung von sog. »Multi-Layer-Samples«, bei denen alle unterschiedlichen Spielweisen in einem Sound vereint sind, die man dann durch »Keyswitches« - Noten auf dem Keyboard, die nicht selber klingen, sondern nur zur Soundkontrolle dienen - ansteuern kann. Dadurch aber vermischen sich im Datenstrom die klingenden Noten mit Kontrollinformationen - im Notenbild entsteht heilloses Chaos, und auch in den anderen Editoren ist eine Zuordnung schwer möglich. Hinzu kommt, daß es sehr mühselig ist, für eine einzelne Note einen Keyswitch einzufügen, und gleich darauf einen zweiten, der auf den ursprünglichen Sound zurückschaltet.

VST-Expression versucht dieses Problem zu lösen, indem die »Artikulationen« - jene Symbole, die im Notenbild rot abgedruckt sind - ohne Umwege direkt abgespielt werden. Der MIDI-Player kennt die Symbole und setzt sie quasi selbstständig in jene Kommandos um, die der Sampler benötigt, um die Layer umzuschalten. Mit anderen Worten: das Notenbeispiel wird - ohne weitere Fummelei - so abgespielt, wie es dargestellt ist. Das Aufsplitten in verschiedene Tracks entfällt; Keyswitch-Noten sind nicht nötig; und nach einem Flageolett oder einer gedämpften Note schaltet der Player automatisch zurück.

Dabei ist dieses Feature nicht auf User beschränkt, die Noten lesen können; man kann das auch im Keyeditor bedienen. Das Beispiel oben sieht dann so aus:

VST Expression Key-Editor

Oben sieht man die Noten, im unteren Bereich die Artikulationen. In dem Beispiel gibt es davon sieben, die man durch Klicken mit der Maus bzw. durch das Selektieren eines Events und anschließender Menuauswahl im Note-Info setzen kann. (Die vierte Zeile hat keine Beschreibung - das liegt einfach daran, daß in der speziellen Situation der Platz dafür nicht ausreicht.)

Ich hatte in der Testphase ein Demo (s.u.) gebastelt (das man auch auf der Cubase-5-DVD findet), das sich mit Saxophon, drei Gitarren und einem Baß von dem auf der DVD mitgelieferten „Expression Set” bescheidet (das sind m.E. sehr gute Multi-Layer-Samples, die Yamaha aus den Libraries der aktuellen „Motiv”-Serie „geklaut” hat). Obwohl alles außer Saxophon hart quantisiert ist (und überhaupt nur ein rascher Entwurf ist), „lebt” das Ganze schon gar nicht schlecht. - Ich ertappe mich jedenfalls regelmäßig dabei, daß ich auf diese Sounds bevorzugt zurückgreife - man erreicht mit ihnen sehr rasch eine Art von „Dreidimensionalität”, für die man sonst einiges an Aufwand investieren müßte.

  1. [1] Ich will nicht erklären, wie dieses Feature bedient wird - das tut schließlich schon das Handbuch -, sondern nur einige Hinweise zum Konzept wie Hintergründe der Entstehung geben.



- 2 -


Solange man sich auf die mitgelieferten Sounds beschränkt, kann man das dahinter liegende Konzept links liegen lassen. Auf der Cubase-DVD findet sich neben dem „Expression Set” noch eine Variante vom „Halion Symphonic Orchestra” (allerdings leider nur als ein auf 90 Tage limitiertes Demo), mit der man gängige Spieltechniken der wichtigsten Orchesterinstrumente via VST-Expression steuern kann. Außerdem haben einige Drittanbieter angekündigt, daß sie ihre Libraries entsprechend anpassen wollen - Garritan, Vienna Symphonic Library und Peter Siedlaczek stehen da in Kontakt mit uns.

Es ist also durchaus möglich, die verfügbaren Artikulationen im Key- und Score-Editor einfach bloß zu verwenden, auch ohne Einblick in die zugrunde liegenden Konzepte. - Spätestens, wenn man eigene Sounds einbinden will, muß man sich jedoch mit dem Setup-Dialog auseinandersetzen.

Unten sieht man den Setup-Editor, wie er sich im Gitarrenbeispiel präsentiert (Klick für einen Screenshot in Originalgröße).


Das Konzept ist im Prinzip recht simpel: für jedes Instrument gibt es eine Expression-Map (im Dialog findet sich ganz links die Liste aller im Projekt verwendeten Maps), die ihrerseits aus einer Anzahl Sound-Slots besteht (in der Mitte). Es ist immer genau ein Sound-Slot „aktiv” - er wird dies, wenn 1) der ihm zugeordnete Remote-Key „live” gespielt wird, oder 2) der Player an den ihm zugeordneten Symbolen beim Abspielen der Sequenz „vorbei kommt”. Die Remote-Keys dienen lediglich dazu, die Slots im Livebetrieb oder bei der Aufnahme anzusteuern - sie werden nicht in Form von Noten aufgenommen, sondern als jene Symbole, die dem Slot zugeordnet sind.[1]

Wenn man in dem Beispiel oben während der Aufnahme ein „F1” auf dem Keyboard drückt, wird der „Pick-Harmonic”-Slot aktiviert und über alle dann einkommenden Noten so lange ein Rauten-Symbol gesetzt, bis die Taste wieder losgelassen wird. Wenn man diese Aufnahme wieder abspielt und der Player dann über ein Rauten-Symbol stößt, sucht er in der Liste den ihm zugeordneten Slot, und aktiviert ihn.

VST Expression Inspector

Den aktuell aktivierten Sound-Slot kann man im Track-Inspektor des Arrange-Windows sehen. Dabei markiert der linke Pfeil den aktiven Slot für den Live-Input bzw. die Aufnahme; der rechte jenen, der derzeit für die Wiedergabe des Sequenzers aktiviert ist.

Im Dialog - rechts oben im Screenshot, unter „Output Mapping” - kann man bestimmen, was geschieht, wenn ein Slot aktiviert wird: dann wird entweder ein Key-Switch an den Sampler geschickt, ein Programmwechsel ausgelöst, oder aber auch die „über ihn gesendeten” Noten auf einen anderen MIDI-Kanal geroutet, oder in Lautstärke oder Länge verändert.

Unten rechts werden - unter „Articulations” - die verfügbaren Symbole eingetragen. Das wichtigste Feld ist hier die „Type” -Rubrik, in der man bestimmt, ob man es mit einem „Attribute” oder einer „Direction” zu tun hat. Eine Direction gilt solange, bis eine andere sie ablöst - ein typisches Beispiel ist ein „pizz” (gezupft), das solange gültig bleibt, bis ein „arco” (gestrichen) die Anweisung rückgängig macht. Ein Attribute ist hingegen nur auf die Note bezogen, auf oder unter der es notiert ist - ein Staccato-Punkt etwa. Wenn über der nächsten Note dieser Punkt nicht wiederholt wird, ist die Anweisung aufgehoben, und der Sequenzer schaltet auf das „Default” zurück.

  1. [1] OK - ganz so simpel ist das wohl doch nicht. Dabei leuchtet das Konzept allen Usern fast unmittelbar ein, die auch das Problem kennen, das es zu lösen gilt. Umgekehrt ist es Musikern kaum zu vermitteln, die sich bei ihrer Arbeit von der Metapher des „Instruments” gelöst haben, und z.B. in Loops denken. - Das ist aber noch ein anderes Thema.



- 3 -


Viele User werden sich damit zufrieden geben, wenn sie mit Hilfe der Expression-Maps eine gut bedienbare Alternative zu Programmwechseln oder Key-Switches in die Hand bekommen. Dafür reicht es, wenn man eine eindeutige Verbindung zwischen musikalischem Symbol und Sound-Slot herstellt: man ordnet jedem Slot genau ein Symbol zu. Damit hat man letztlich bloß einen „glorified Umschalter” zur Verfügung, der ein wenig netter im Notenbild anzusehen ist und im Key-Editor - anders als MIDI-Programm-Changes - bequem editierbar ist.

Das erste Beispiel, mit dem ich beim Programmieren des Prototyps dieses Features herumgespielt hatte, war ein Cello-Sound im Sampler. Dabei bin ich sehr rasch über das Problem gestolpert, daß ein Cello arco (gestrichen) oder pizzicato (gezupft) gespielt wird, wobei in beiden Spielweisen immer noch z.B. ein Akzent gesetzt werden kann. Man hat mit diesem Akzent dann ein Symbol, das gleich zweimal auftaucht, und für zwei völlig unterschiedliche Sounds steht - ein „lauteres” Pizzicato kling völlig anders als eine „lauter” gestrichene Saite, obwohl in beiden Fällen dasselbe Zeichen über der Note steht. Die Eindeutigkeit der Zuordnung zwischen „Zeichen” und „Klang” geht hier verloren[1].

Ausgangspunkt für das schließlich realisierte Design ist die Beobachtung, daß man musikalische Symbole in Gruppen anordnen kann, innerhalb derer sich nur ein Symbol gleichzeitig verwenden läßt. Es ist sinnlos, eine Note kürzer wie auch länger (Staccato und Legato) oder unterschiedlich laut (unterschiedliche Akzente) abzuspielen, ebenso, wie sich arco und pizzicato, oder gestopft und nicht-gestopft (bei einer Trompete) gegenseitig ausschließen.

Ein User[2] des Expression-Setups definiert die Symbole zunächst unabhängig von den Sound-Slots, und weist sie einer Gruppe zu (1-4). Danach erst kann er sie in den entsprechenden vier Ebenen (die mit „Art(iculation).1” bis „Art.4” bezeichneten Kolumnen) der Sound-Slots benutzen. Beim Abspielen führt der MIDI-Player Buch über die momentan aktiven Symbole. Dabei kann immer nur genau ein Symbol aus einer der vier Gruppen gleichzeitig aktiv sein - wenn ein anderes Symbol der gleichen Gruppe erscheint, wird sein Vorgänger abgeschaltet, und es nimmt dessen Stelle ein. Der Player aktiviert schließlich jenen Slot, dessen Symbole die größte Gemeinsamkeit mit den derzeit aktiven Symbolen aufweist.

Das klingt jetzt reichlich kompliziert, und ich gebe durchaus zu, daß es auch kompliziert ist - selbst hausintern gab es gelegentlich Zweifel an der „Überambitioniertheit” des Ansatzes (und dessen Beschreibung ist hier bisher noch nicht einmal komplett). Wenn man das jetzt als Zumutung und nicht als Herausforderung betrachtet, ist das völlig in Ordnung - man kann das Feature ja trotzdem nutzen, indem man lediglich Symbole auf der ersten Ebene belegt, und den Rest frei lässt.

Wenn man dem Design aber eine Chance gibt, ergibt es durchaus Sinn. Es bietet nämlich einen Lösungsansatz für das Problem, daß ein Sound sich aus unterschiedlichen Ebenen ergibt, die gleichzeitig mit verschiedenen musikalischen Symbolen beschrieben werden. Es gibt Symbole, die sich auf Lautstärke beziehen; solche, die die Spieltechnik bezeichnen; und wieder andere, die die Länge einer Note beschreiben - all diese Ebenen ergeben aber erst zusammengenommen einen bestimmten Sound. Ein Sampler kann halt nur genau einen Sound abspielen und ist nicht in der Lage, ihn aus seinen einzelnen Aspekten zu synthetisieren.

  1. [1] Beim ersten Anlauf, dieses Problem zu lösen, hatte ich es mit einer verschachtelte Struktur versucht: „Arco” und „Pizzicato” bildeten „Ordner”-Slots, in denen jeweils noch ein weiterer Slot für den Akzent steckte. Wirklich elegant war das nicht, und gefiel letztlich niemandem.
  2. [2] Im Idealfall ist dies der Designer einer Sample-Library, der sie für die Verwendung in Cubase anpaßt - VST-Expression lebt letztlich vom Content, der sich mit ihm verbindet.



- 4 -


Hier sind die Regeln, nach denen der MIDI-Player die abgespielten Artikulationen mit jenen abgleicht, die in den Sound-Slots einer Expression-Map festgelegt sind, um schließlich einen bestimmten Slot zu aktivieren:

  • „Symbol” und „Sound-Slot” sind zwei strikt voneinander unterschiedene Ebenen: es gibt jeweils genau einen aktiven Slot, der jedoch von bis zu vier verschiedenen Symbolen „scharf geschaltet” wird.
  • Es kann jeweils nur genau eine Artikulation derselben Ebene aktiv sein. Da es genau vier Ebenen gibt, gibt es auch maximal vier gleichzeitige Artikulationen.
  • „Directions” bleiben solange gültig, bis eine andere Artikulation auf derselben Ebene folgt (und zwar unabhängig von ihrem Typ); „Attribute” hingegen sind nur für die Note gültig, für die sie gesetzt sind. Dabei sind Directions frei im Datenstrom beweglich, Attribute hingegen fest mit einer Note verlinkt.
  • Der MIDI-Player führt eine Liste aller derzeit gültigen Artikulationen, und vergleicht diese mit der Liste der Artikulationen für jeden Sound-Slot in der aktiven Map. Dabei vergleicht er als erstes die Artikulationen der ersten Ebene, dann die der zweiten, usf. Wenn keine Übereinstimmung mehr vorliegt, bricht er den Vergleich ab, und macht beim nächsten Slot weiter. Der Slot, der die größte Übereinstimmung aufweist, wird schließlich aktiv geschaltet.
  • Die vier Ebenen werden unterschiedlich gewichtet: eine Übereinstimmung der ersten Ebene ergibt 8 Punkte, die der zweiten 4, der dritten 2, und der vierten schließlich einen Punkt. Das bedeutet, daß eine Übereinstimmung auf der ersten Ebene mehr Bedeutung hat, als die auf allen anderen zusammen.

Das klingt im ersten Moment ziemlich kompliziert, und das bleibt auch so beim zweiten oder dritten Blick. - In der Praxis relativiert sich das aber, sobald man auf der ersten Ebene die wichtigen „Umschalter” einbaut - also etwa „pizzicato” und „arco” bei den Streichern, „mute” und „unmute” bei den Bläsern - und auf den anderen Ebenen lediglich deren Variationen - also Lautstärken (Akzente), Längen (Staccato, Legato), oder Ornamente (Triller, Growl).

Man sollte mit den der Cubase-5-DVD beiliegenden Beipielsmaps ein wenig herumzuspielen, und sich - auch als User des Score-Editors - die Sache mal im Key-Editor ansehen. Dort wird wohl verständlich, wie sich die unterschiedlichen Symbole zur Auswahl eines Slot „konsolidieren” - danach dürften die oben aufgeschriebenen Regeln vielleicht ein wenig verständlicher werden.

Ich habe noch ein paar ungeordnete Anmerkungen zu Punkten, zu denen bereits Fragen aufgetaucht sind:

  • Wenn man den Typ von Artikulationen von „Direction” auf „Attribut” oder vice versa ändert, bedeutet dies, daß bereits vorhandene Artikulationen ihre Funktion verlieren. Das Verändern des Typs im Setup-Dialog verändert nicht gleichzeitig jenen von bereits existierenden Daten.
  • Hingegen ist es möglich, den Output eines Slots nachträglich zu editieren. Wenn man eine Expression-Map für eine andere Sample-Library weiter verwenden will, muß man lediglich die beim Scharfschalten eines Sound-Slots gesendeten Befehle unter dem „Output-Mapping” anpassen.
  • Alle Artikulationen, wie sie von VST-Expression genutzt werden, sind schlicht Text-Events (Directions) bzw. „Note-Linked”-Events (Attribute), wie sie schon seit jeher im Score-Editor verwendet werden. Man kann also auch im Nachhinein eine Expression-Map erstellen, die diese Symbole gewissermaßen „umdeutet” (aber spätestens an dieser Stelle wird es wirklich kompliziert).
  • Es gibt einen „Default-Slot”, mit dem der Player initialisiert wird, und dies ist immer der erste Slot in der Expression-Map. Wenn man die Slot-Zuweisungen via Remotekeys mit dem externen Keyboard vornimmt (z.B. bei der Aufnahme), muß der erste Slot einer Taste zugeordnet werden, sofern man gleichzeitig „Latch-Mode” aktiviert hat. Das ist eigentlich selbstverständlich, sorgt aber für Verwirrung, weil normalerweise „Latch-Mode” ausgeschaltet ist - in diesem Fall wird der erste Slot eingeschaltet, wenn man keine Taste gedrückt hält. - Für Flexibilität bezahlt man leider den Preis, daß man sich in ihr gelegentlich verläuft.
  • Das MIDI-Thru ist komplett entkoppelt von der Ausgabe des MIDI-Players. Das muß man sich kurz klar machen, wenn man nach dem Positionieren an eine bestimmte Stelle nicht den Sound durchgereicht bekommt, der dort für den Player gilt. Das ist nicht wenig verwirrend - ich gebe zu, daß das Design hier nicht sonderlich glücklich gewählt ist.



- 5 -


Das Feature ist recht neu, und leidet noch unter einigen Kinderkrankheiten.

  • Die wohl peinlichste Macke ist die, daß beim Cycle-Rücksprung nicht auf den Default-Slot zurückgeschaltet wird, sondern statt dessen der letzte aktive Slot einfach aktiviert bleibt.
  • Es gibt Situationen, wo an derselben Songposition unterschiedliche Slots scharf geschaltet werden, abhängig davon, ob man den Player dorthin spielen läßt oder mit der Maus positioniert - MIDI-Chase ist in diesem Bereich außerordentlich tricky, und hat hier einen Denkfehler im Code.
  • Auch beim Cueing durch Klicken mit der Maus auf eine Note bekommt man gelegentlich einen falschen Sound zu hören.

Das sind ein paar unschöne Nicklichkeiten, die aber mit dem nächsten Maintenance-Update behoben werden sollten.

Das Thema „Artikulationen” ist in dieser Implementierung natürlich längst nicht ausgereizt, und ich habe definitiv vor, da noch einige Dinge nachzurüsten. Es gibt bereits einige Anregungen von Usern und Testern (Hans Zimmer hat da eine längere Wunschliste hochgemailt), und ich habe selbst auch eine ganze Reihe von Ideen (die ich erst genau dann verraten kann, wenn sie in der nächsten Version vom Marketing angekündigt sind - das ist der Nachteil, wenn man proprietäre Software schreibt).

Ich war jedenfalls schon bei der Programmierung des Features überrascht, was man mit ihm anstellen kann, und wie einschneidend es sich auf die Art und Weise auswirken kann, in der man seine Kompositionen in Cubase organisiert - ich hatte in der Designphase nur eine Sammlung von „Usecases”, die anfangs nur eine sehr ungefähre Ahnung vom Sinn erlauben, den ein Feature am Ende hat. Dem momentanen Feedback nach zu urteilen, sehen das viele User ebenso - wobei es natürlich nur eine (allerdings in ihrer Größe gerne unterschätzte) Minderheit ist, die damit tatsächlich etwas anfangen kann.



- 6 -


Heute wurde ein Hotfix-Update von Cubase 5 online gestellt, das neben einer Reihe von kleineren Fixes ein paar Änderungen an VST-Expression an Bord hat:

  • Die bereits erwähnten Bugs und Unschönheiten wurden beseitigt.
  • Man kann jedem Soundslot zwei Controller zuordnen, die gesendet werden, wenn er aktiviert wird. Das sollte man nicht verwechseln mit der Funktion, die in der Vienna Symphonic Library Controller für das Morphen zwischen zwei Sample-Layers haben - die Controller werden mit einem fixen Wert genau einmal gesendet.
  • Man kann jedem Soundslot eine Farbe zuweisen, in der im Key-Editor all die Noten dargestellt werden können, die über ihn ausgegeben werden. Das war ganz oben auf der Wunschliste (was mich auch nicht weiter wundert).
  • Das „MIDI-Thru” - also das „Durchschleifen” von live auf dem Keyboard gespielten Events - wurde überarbeitet. Es wird jetzt immer auf jenem Soundslot gesendet, der auch beim Abspielen an der aktuellen Songposition zuständig ist - wobei das nur für Directions funktioniert, nicht für Attribute. Directions verhalten sich also jetzt mehr oder weniger wie Programmwechsel.

Die beiden letzten Punkte liegen eigentlich auf der Hand, und mancher wird sich wundern, warum sie nicht gleich zu Beginn in der jetzt vorliegenden Form implementiert wurden. Leider finde ich keinen Ansatz, die Gründe so zu erklären, daß das einigermaßen nachvollziehbar wird, ohne vorher ausführlich die Herausforderung darzustellen, die unser Datenmodell (Stichwort: überlappende Parts) bzw. die Programmierung der MIDI-Engine (Stichwort: komplexe State Machine) mit sich bringen. Ich war jedenfalls mit Dingen, die auf den ersten Blick ganz trivial wirken, eine gute Zeit beschäftigt.



- 7 -


Die Kollegen von der Vienna Sound Library haben wirklich kapiert, worum es bei VST Expression geht – das Video gibt einen sehr schönen Einstieg in das Feature. Dabei übertreffen die von der VSL realisierten Expression-Maps mühelos die wildesten Vorstellungen über mögliche „Use Cases”, die wir beim Design des Features diskutiert hatten.



- 8 -


Noch ein YouTube-Fund: mein VST-Expression-Demo (das man auch auf der Cubase5-DVD findet) als Screen-Movie mit japanischen Kommentaren. Sehr cool – da habe ich also doch noch, unvermutet, meinen weltweiten Number-Something-Hit.



- 9 -


Ein weiterer YouTube-Fund: Greg Ondo's Demo zeigt knapp und schlagend die zentralen Punkte, um die sich „VST Expression” dreht.



- 10 -


Der Artikel in Sound On Sound beschreibt recht schön, wie man VST-Expression in der Praxis benutzen kann:

[…] Let’s imagine you wanted a phrase to be both staccato (short notes) and fortissimo (relatively loud). If you were using just keyswitched articulation changes, you might need an instrument with three sample layers: one for just staccato, a second for fortissimo, and a third for staccato and fortissimo. However, only the most detailed sample libraries are going to provide this degree of sample layer coverage for all the possible combinations of performance characteristics — and even then, it would eat up a lot of RAM to hold all the layers active.

You could, of course, emulate some of these performance variations via MIDI in the way you play; shorter notes for staccato and higher velocities for fortissimo. While you can do this as part of your performance, you can also add it after the fact via an Expression Map.

The screenshot[…]shows an example where five different performance types have been built from three articulations. In each case, the Output Mapping section has been used to change the MIDI data in real time on playback. For fortissimo (ff), I’ve increased the MIDI velocity to 150 percent of its actual value, while for staccato, I’ve shortened the length of the MIDI note to 20 percent of its actual value. And where both fortissimo and staccato are required, I’ve applied both of these changes.[…]

2 Kommentare

[Drucken]
Array 85.25.210.234&&15:10 - 10.12.&&2&&(unknown)&&&&Mozilla/5.0 (compatible; adscanner/)&& 88.99.27.172&&15:10 - 10.12.&&1&&(unknown)&&&&Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.50.2 (KHTML, like Gecko) Version/5.0.6 Safari/533.22.3&& 173.244.36.55&&15:11 - 10.12.&&1&&(unknown)&&&&Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36&& 46.229.168.130&&15:11 - 10.12.&&1&&(unknown)&&&&Mozilla/5.0 (compatible; SemrushBot/2~bl; +http://www.semrush.com/bot.html)&&