# 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
}
REDROCKS (FRA) - Supernova (2013)

Label : Auto-Production
Sortie du Scud : 2013
Pays : France
Genre : Rock
Type : Album
Playtime : 10 Titres - 53 Mins
On les avait découverts l’an dernier avec un premier EP extrêmement prometteur mais souffrant quelque peu d’une qualité de composition fluctuante et d’une trop grande proximité avec leur modèle revendiqué, PORCUPINE TREE. Les lyonnais de REDROCKS sont-ils parvenus à corriger ces petits défauts de jeunesse avec ce premier album ?
Une première écoute suffit à confirmer l’émancipation du quatuor : si l’ombre de Steven Wilson plane toujours sur sa musique, elle s’est suffisamment estompée pour mettre en lumière toutes les facettes du prisme musical qu’est REDROCKS. Essayez d’imaginer un MUSE débarrassé de sa théâtralité pompeuse mais piochant toujours allègrement dans le répertoire rock des années 70 (GENESIS et PINK FLOYD plutôt que QUEEN, l’univers de REDROCKS étant résolument moins glamour que celui de Bellamy and co.). A l’image d’une supernova balançant toute sa matière incandescente aux quatre coins de l’univers, cet album part dans toutes les directions avec pour inévitable corollaire une certaine dispersion. Les trois premiers morceaux par exemple semblent avoir été écrits par trois groupes différents tant ils n’ont rien en commun. De ce fait, Supernova s’avère beaucoup plus difficile à appréhender que son prédécesseur et lui coller une étiquette relève de la gageure. Tant mieux pour la diversité et l’originalité, mais attention à ne pas trop désorienter un public qu’il faudrait d’abord séduire.
Le groupe n’a donc pas choisi la solution de facilité qui consistait à capitaliser sur un sens inné de la mélodie et une sensibilité à fleur de peau plutôt que sur un versant rock plus agressif mais pas toujours bien maîtrisé. On peut même dire que Supernova se révèle globalement plus rugueux que Cosmic Dream, impression confirmée par une production toujours aussi léchée mais moins lisse que par le passé. Egalement propriétaire du studio dans lequel a été enregistré l’album, le batteur-producteur-compositeur Jean Prat semble avoir voulu s’éloigner un peu du son PORCUPINE TREE, ce qui se ressent notamment dans son jeu de batterie plus vraiment superposable à celui de Gavin Harrison. Il se dégage de ces 9 nouvelles compos une douleur sourde qui tranche singulièrement avec l’onirisme des précédentes, comme en témoigne la présence en bonus de la magnifique ballade « Cosmic dream » tirée de l’EP du même nom et qui semble en net décalage avec le reste. Peut-être aurait-il été plus judicieux pour ne pas nuire à la cohésion de l’album, de l’inclure plutôt sous forme de vidéo, le clip qui l’accompagne étant une belle réussite.
Rugueux et sombre, Supernova l’est dès les premières notes du morceau éponyme qui ouvre l’album sur un crescendo tendu aux arrangements très soignés mais somme toute assez convenu dans sa construction et miné par un chant qui dérape sérieusement dans les aigus : une fois de plus, REDROCKS s’obstine à commencer par sa compo la moins brillante ! Volontiers zappeur et impatient, le grand public risque de ne pas lui pardonner cette maladresse… Qu’importe, cet album exigeant ne lui est pas destiné ! Ce n’est pas tant que les compos soient absconses ou décousues, on est très loin de la musique expérimentale et si l’on touche au rock progressif, c’est plus par l’esthétique sonore que par la structure des morceaux. Mais à l’inverse du premier EP la plupart des titres privilégient la tension et une relative âpreté à l’évidence de mélodies imparables dont le groupe est capable. Tout comme les femmes avec lesquelles on fait le plus long chemin ne sont pas celles qui se déshabillent le premier soir, cet album nécessite plusieurs écoutes obstinées pour dévoiler tous ses charmes mais n’en sera que plus passionnant une fois apprivoisé. Ecoutez par exemple « Maniac » : le morceau commence comme une ballade un peu terne mais se développe à mesure que de nouvelles pièces s’emboitent sur la structure de base et touche au merveilleux une fois ce puzzle complété par la guitare électrique. Dans le même ordre d’idée une écoute distraite de « Better be blind » pourrait faire croire à une tentative pas forcément adroite de sonner Hardcore mais dérive rapidement vers un riff monstrueux d’efficacité appuyé par une section rythmique au groove implacable, rappelant les meilleures incursions Metal de PORCUPINE TREE. Mais la plus belle réussite de cet opus est sans doute « call in the air », un morceau totalement inclassable et exsudant une folie douce qui finira par s’insinuer en vous. Certains lui préfèreront peut-être « Complaint » et son piano chargé d’émotion que n’aurait pas renié le grand Trent Reznor ; un titre sur lequel REDROCKS retrouve cette capacité à pondre une mélodie apte à mettre tout le monde d’accord dès la première écoute.
Avec Supernova, REDROCKS nous prouve qu’il n’est pas qu’un simple clone de PORCUPINE TREE mais peut tout faire, tout devenir. Face à un album d’une telle diversité, ayant pour seul fil conducteur une exigence musicale de chaque instant, bien malin est celui qui pourra prédire quel visage revêtira ce talentueux quatuor à son prochain opus. Une seule chose est sûre, il sera très différent. En effet, au moment où j’écris ces lignes, le groupe est à la recherche d’un nouveau chanteur. Avis à la population, les bonnes places ne restent jamais libres longtemps…
Ajouté : Mercredi 10 Avril 2013 Chroniqueur : Cyco_Nico Score :      Lien en relation: Redrocks Website Hits: 11832
|