# Copyright (C) 2002-2004 gregoire HUBERT.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Author : gregoire HUBERT
#
# XML_node.objet
#
# This object is an XML node representation
#
# /- name (string)
# xml_node --- attributes (array)
# \- children (array) or value (string)
class xml_node {
var $name;
var $attributes = array();
var $children = array();
var $value = "";
function xml_node($name,$attributes,$children=array(),$value="") {
$this->name = $name;
if (is_array($attributes)) {
$this->attributes = $attributes;
}
$this->children = $children;
$this->value = $value;
}
}
# Copyright (C) 2003-2004 gregoire HUBERT.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Author : gregoire HUBERT
#
# xml_tree class
#
# This object parses an XML stream and offers a tree composed by xml_nodes
#
class xml_tree {
var $xml_stream;
var $current_node;
var $root_node;
var $index;
var $value;
function xml_tree() {
$this->root_node = new xml_node("__ROOT_NODE",array());
$this->current_node = $this->root_node;
}
function add_tree($xml_stream) {
# Managing the parser
$this->xml_stream = $xml_stream;
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser,XML_OPTION_CASE_FOLDING,0);
xml_parser_set_option($xml_parser,XML_OPTION_SKIP_WHITE,1);
if (!xml_parse_into_struct($xml_parser,$this->xml_stream,$this->value,$this->index)) {
xml_parser_free($xml_parser);
die("XML Parse error");
}
xml_parser_free($xml_parser);
# Now, $this->value and $this->index are informed, we can use the get_node methode.
$tab_result = $this->get_node(0,count($this->value) - 1);
$this->root_node->children[] = $tab_result[0];
$this->current_node = $this->root_node;
}
function get_node($index_start,$index_stop) {
#echo " \n";
#echo "GET-NODE($index_start,$index_stop) \n";
# What we are going to return is an array of xml_nodes
$return_tab = array();
# depth is only here to check if everything is all right
$tab_node = $this->value[$index_start];
$depth = $tab_node["level"]-1;
# Now we have to be sure we do not forget a single node
for ($index = $index_start;$index <= $index_stop;$index++) {
#echo "\$index = $index ";
# get the current node
$tab_node = $this->value[$index];
# what type of node is it ?
switch($tab_node["type"]) {
case "complete" :
# Depth integrity check
if ($tab_node["level"] != $depth+1) {
die("ERREUR # contrainte d'intégrité au noeud complet $index, niveau $depth + 1 au lieu de ".$tab_node["level"]);
}
#echo "Noeud complet trouvé position $index TAG ".$tab_node["tag"]." \n";
# Easy one, no children to manage, only a value...
$return_tab[] = new xml_node($tab_node["tag"],$tab_node["attributes"],"",$tab_node["value"]);
break;
case "open" :
# Depth integrity check
if ($tab_node["level"] != $depth +1 ) {
die("ERREUR # contrainte d'intégrité au noeud ouvert $index, niveau $depth au lieu de ".$tab_node["level"]);
}
# Open tag, we re-use this methode to return its children
# Where is the correspondong close tag ?
$node_index = $this->index[$tab_node["tag"]];
$flipped_node_index = array_flip($node_index);
#echo "This ".$tab_node["tag"]." is at coords ".$flipped_node_index[$index]." ";
$i=1;
do {
$next_index = $node_index[$flipped_node_index[$index] + $i++];
$next_tag=$this->value[$next_index];
}
while ($next_tag["level"]!=$tab_node["level"]);
#echo "Ouverture de noeud détectée pos $index TAG ".$tab_node["tag"]." \n Parcours jusqu au $next_index \n";
# good, we can now instanciate our node
$return_tab[] = new xml_node($tab_node["tag"],$tab_node["attributes"],$this->get_node($index+1,$next_index),"");
# As we called the get_node methode, we are sure that nodes have been parsed to the corresponding close tag
$index = $next_index;
break;
case "close" :
# Depth integrity check
if ($tab_node["level"] != $depth ){
die("ERREUR # contrainte d'intégrité au noeud fermé $index, niveau $depth au lieu de ".$tab_node["level"]);
}
#echo "Fermeture de noeud detectée pos $index TAG ".$tab_node["tag"]."
\n";
# This ugly thing is useless because reaching a close tag means that $index==$index_stop but who knows ? =)
# it will be skipped soon
$index = $index_stop;
break;
default:
die("Erreur de type de TAG non déterminé :'".$tab_node["type"]."'");
}
}
# We are out ... returns the array with collected children...
return ($return_tab);
}
# this function browse the xml tree and set the current node to the selected node
function give_node($path) {
if ($path[0]=="/") {
$current_node=$this->root_node;
$path=substr($path,1);
#echo "ABSOLUTE PATH GIVEN=$path ";
}
else {
$current_node = $this->current_node;
}
#echo "PATH GIVEN=$path ";
$tab_path = split("/",$path);
foreach ($tab_path as $node_expr) {
#echo "STUDYING EXPR='$node_expr' ";
$node = $current_node;
$expr_tab = split("\?",$node_expr);
$node_name = $expr_tab[0];
$attr_tab = 0;
if (count($expr_tab)>1) {
##echo "TROUVE AU MOINS UNE CONDITION SUR LES ATTRIBUTS... ";
$attr_expr_tab=split(",",$expr_tab[1]);
$attr_tab=array();
foreach($attr_expr_tab as $attr_expr) {
$attr_split_expr=split("=",$attr_expr);
$attr_tab[$attr_split_expr[0]]=$attr_split_expr[1];
}
}
$last=0;
foreach ($node->children as $children) {
#echo "COMPARING WITH '$children->name' ";
if ($children->name == $node_name) {
##echo "TROUVE NOEUD CORRESPONDANT $node_name ";
if (is_array($attr_tab)) {
$node_attributes = $children->attributes;
foreach ($attr_tab as $key=>$value) {
if ($node_attributes[$key] == $value) {
#echo "ATTRIBUTE & CHANGE CURRENT NODE TO ".$children->name." ";
$current_node = $children;
$last = 1;
}
}
}
else {
##echo "CHILD=".$children->name." ";
#echo "CHANGE CURRENT NODE TO ".$children->name." ";
$current_node = $children;
$last=1;
}
}
if ($last) {
break;
}
}
if (!$last) {
#echo "PATH ERROR $node_name ";
#die("MMmmmh It seems that this file is not a DIA XML format...sorry...");
return 0;
}
}
return $current_node;
}
function browse_tree($path) {
$node = $this->give_node($path);
if (is_object($node)) {
$this->current_node = $node;
return 1;
}
return 0;
}
# this method dumps an html representation of the xml tree
function xml_show($node = "",$level=0,$last=0) {
if ($node=="") {
$node=$this->root_node;
}
if (!is_object($node)) {
die("ERROR : node is not an object");
}
$line="";
for($i=1;$i<=$level;$i++) {
if ((i==$level-1) and ($last)) {
$line.=" ";
}
else {
$line.=" |";
}
if ($i==$level) {
$line.="`-";
}
}
$line.=$node->name;
#echo $line;
$line.="".count($node->children)."";
if (count($node->children)==1) {
$line.=" (".$node->value.") \n";
echo "$line";
}
else {
$line.=" \n";
echo "$line";
$i=1;
foreach($node->children as $children) {
if ($i==count($node->children)) {
$this->xml_show($children,$level+1,1);
}
else {
$this->xml_show($children,$level+1);
}
$i++;
}
}
}
#END_CLASS
}
STONE TEMPLE PILOTS (usa) - Purple (1994)
Label : Atlantic Records
Sortie du Scud : 7 juin 1994
Pays : Etats-Unis
Genre : Rock
Type : Album
Playtime : 11 Titres - 47 Mins
Au panthéon des tignasses crasseuses de Seattle, on honore régulièrement des pierres tombales notoires, celles qui brillent le plus, et qui sont inondées de fleurs. La religion alternative des 90’s loue ses icônes au-delà du raisonnable, attribuant à ces Elvis des temps modernes des vertus quasiment thérapeutiques, mais tenant plus de la pathologie guérie à grand coup de placebo qu’au miracle ès Lourdes. Plus de chaise roulante, plus de déambulateurs, vos héros sont morts de leur belle mort, et c’est tant mieux.
Mais il serait injuste d’oublier que le plus grand des sauveurs de la musique honnête ne vient pas du Nord Est des Etats-Unis, mais bien du sud. Comme quoi la géographie a parfois son importance…
Les STP, comme on se plait à les nommer entre fans, furent les malchanceux de la loterie du renouveau. Nous n’étions pas vraiment prêts à troquer nos MÖTLEY CRÜE et autres DEF LEPPARD contre des musiciens moyens affublés de sobriquets douloureusement authentiques et de chemises à carreaux bon marché. Et c’est ainsi que nous avons failli occulter le fait que parmi cette vague de bûcherons douteux, se cachaient de vrais compositeurs, capables en quelques minutes de nous faire comprendre que le cirque dans lequel nous végétions, même embelli d’un gros son à faire tomber les cordes de guitare, n’était peut être pas l’Eldorado que nous croyions.
Après un premier album approximatif, contenant l’hymne au stupre « Sex Type Thing », agrémenté d’un clip faussement torride, peu de téléspectateurs de l’époque misaient gros sur les Californiens. Riffs rebattus, attitude cheap, torse nu, rien n’indiquait l’achèvement à venir. Sitôt acheté, sitôt remisé, Core était de ces friandises acidulées qui séduisent lors du premier contact avec le palais, mais qui piquent désagréablement en cas de récidive.
Et lorsque Purple est sorti, sous des aspects abscons, sans titre, sans logo, le mystère que personne ne souhaitait vraiment élucider restait entier. Acquis plus par persévérance que réelle attente, écouté d’une oreille distraite la première fois, plus attentive la seconde, et complètement conquis la troisième, aiguillé en cela par un clip fort bien vu, « Vasoline » et son clown affreux qui en a traumatisé plus d’un, ce fut l’album de la révélation, de la consécration, aussi puissante qu’elle était inattendue.
Pourtant, avec « Meatplow », ça commençait mal. Ambiance lourde, pesante, chant plaintif, pas de quoi déplacer les foules. Plus Layne Staley que l’original, en beaucoup moins magique, la confirmation du conformisme ne semblait qu’à un lancer de caillou.
« Vasoline » redresse la barre, bien sur, avec sa guitare nonchalante et ses accroches vocales perverses. Mais le premier cri d’alarme, c’est « Lounge Fly », et sa rythmique déroutante. Ca plane, ça virevolte, ça descend en piqué, et ça frappe sans prévenir. « I wanna fuck, I wanna fuck, do you need me… », la poésie se fait crue, la musique suit, et le Cd suinte la séduction moite. Un break acoustique avant le solo final à la slide, et l’affaire est quasiment pliée.
Le tubesque « Interstate Love Song » est bien sur une féerie qui restera gravée dans nos mémoires meurtries par l’injustice d’avoir rejeté ce groupe avant de l’avoir vraiment connu, mais Scott Weiland n’est pas dupe, et même si sa voix se fait délicate, il nous réserve encore bien des piques, amplement méritées. La basse du frangin DeLeo louvoie à vue, égrène ses descentes et montées comme un chat qui longe un couloir, et les caresses le disputent à l’envie de voir le félin ressortir ses griffes.
Mais les STP n’en sont pas encore là, et « Still Remains » retente l’opération séduction avec encore plus de brio. Et le vers « Et si tu dois mourir avant moi, demande si tu peux emmener un ami », au regard des nombreux problèmes de santé de Scott à venir sonne comme une pré cognition funeste…Il en reste une formidable déclaration d’amour posée sur un refrain quasi irréel.
« Pretty Penny », presque indécemment unplugged, mise le va-tout sur les harmonies vocales et les percussions latino. La moitié de l’album s’est déjà envolée, et nous sommes sous le charme. Suranné, désuet, intemporel. Magique en quelque sorte.
Et pourtant, le meilleur n’est pas encore tout à fait passé.
« Silvergun Superman » continue sur la même recette, et l’on est bien obligé d’admettre que Core n’était qu’une fausse piste, une carte d’identité pas signée qu’on avait laissé négligemment traîner sur une table pour cacher ses desseins véritables.
Et « Big Empty », en preuve irréfutable, dissipe les derniers doutes. Cette basse mise en avant, cette voix désabusée et en même temps si convaincante furent autant d’éléments à décharge. Ces influences bluesy, jazzy, nous transportaient dans un vieux bar enfumé, la gorge irritée, et le verre toujours au trois quarts vides. On pensait sans doute à une ancienne petite amie, plaquée un peu trop vite, et dont le contact des lèvres nous manquait au plus haut point.
« Unglued » se veut violente, mais sans doute pour ne pas se détacher trop vite de l’héritage des anciens. « Army Ants », le point fort de l’album, est un modèle de construction gigogne. Tour à tour cajoleuse, agressive, planante, elle nous entraîne dans un tourbillon d’émotions palpables, et une fois de plus, la combinaison de la guitare inventive de Dean, et de la rythmique increvable de Robert et Eric créé un décalage propre à nous perdre dans les méandres de la variété de styles.
« Kitchenware & Candybars » n’a plus qu’à étaler ses dernières couleurs sur la toile, mais nous sommes déjà partie intégrante de celle-ci.
Mais comme un dernier clin d’œil pastiche, le groupe revient, version « Loveboat », pour signer de sa patte iconoclaste l’un des plus grands albums des années 90. Scott se veut crooner, et l’ombre de Mike Patton plane bas au dessus des têtes.
Non concept album qui pourtant s’appréhende et s’écoute en tant que tel, Purple est un écrin, dans lequel les STONE TEMPLE ont pris grand soin de déposer une tiare, un collier de rubis, et une aiguille empoisonnée.
Alors certes, Nevermind fut un chef d’œuvre prédicateur, Dirt un chapitre essentiel, et Ten, une table de loi à respecter scrupuleusement, mais Purple fut tout ça, et bien plus.
Une annotation de fin de page explicative. Une légende indispensable à la compréhension d’un changement d’époque et de mœurs. Un « rien à foutre » qui cherchait pourtant l’expiation.
Les héros les plus évidents ne sont pas forcément les sauveurs. Ceux-ci sont plus modestes, plus discrets. Mais leur souvenir et leurs faits d’armes restent dans l’histoire.
Pour l’éternité.
Ajouté : Mercredi 09 Mars 2011 Chroniqueur : Mortne2001 Score : Lien en relation: Stone Temple Pilots Website Hits: 10958
|