# 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
}
GENERAL LEE (FRA) - Roads (2010)

Label : H!PH!PH!P
Sortie du Scud : 8 novembre 2010
Pays : France
Genre : Post Hardcore
Type : Album
Playtime : 9 Titres - 60 Mins
Voilà un album qui a fait débat sur le net. Un de plus, qui a suscité la controverse, non par son manque de qualités, non par une approche médiocre de la musique, mais de part ses influences, visiblement trop « proches » pour être honnêtes.
J’ai pensé un moment à diviser cette chronique en deux parties, avec d’un côté le « pour », et de l’autre le « contre ». Un peu comme pour Lulu de Reed et METALLICA.
Mais GENERAL LEE n’est ni Reed ni METALLICA. Et leur travail – ceci dit sans aucune condescendance – n’a certainement pas la même importance. D’où cette chronique simple et habituelle.
GENERAL LEE est un groupe français de Post Hardcore, ça, beaucoup de gens le savent. Ils sont excellents dans leur domaine, ça aussi, c’est presque un lieu commun. Mais le reproche majeur adressé au groupe par bon nombre de critiques et de fans du style, est leur trop grande ressemblance avec un cador du genre, l’incontournable CULT OF LUNA.
Qui – toujours selon certains – tourne au plagiat. Ce qui est évident pour eux à l’écoute de ce Roads, sorti il y a deux ans. Alors, à partir de ce postulat, le débat peut commencer.
De l’importance des influences dans la carrière des groupes. Doit on juger un groupe pour ce qu’il est, ce qu’il représente, ce qu’il est susceptible d’offrir au public, sa démarche, son éthique, l’image qu’il renvoie ?
Un peu pour tout ça, mais surtout, et dans un désir d’objectivité, par la qualité de son travail.
J’ai moi-même un système de notation très simple.
Si la musique proposée est de qualité, impeccablement exécutée, bien produite, j’accorde automatiquement la moyenne. Ce qui me parait la moindre des choses, et ce, quel que soit le style, et que j’en sois friand ou pas. Ensuite, les points au dessus se justifient par une quelconque originalité, des morceaux accrocheurs, des mélodies travaillées ou enthousiasmantes, un petit plus au niveau de l’interprétation, et une foultitude d’autres détails plus « instinctifs ».
A contrario, des points en dessous s’expliquent par une interprétation calamiteuse qui ne doit rien au style pratiqué (par exemple, je ne jugerai jamais négativement certains groupes de Post Indus minimalistes pour la simple raison qu’ils jouent dissonant ou qu’ils se contentent de quelques notes), une production infâme (idem, pour certains groupes de Black ou de Grind, ce paramètre peut être pris en compte mais dans une logique inversée), ou des morceaux passe-partout, sans âme, et joués comme à la parade (ce qui s’applique la plupart du temps à des productions typiquement Heavy ou AOR…). Ceci et cela bien sur, les paramètres énoncés n’étant pas limitatifs ou exhaustifs.
Alors, dans le cas de GENERAL LEE, qui n’a jamais caché son amour de CULT OF LUNA, au point de leur ressembler parfois comme deux gouttes d’eau, que faire… Influence ou plagiat ?
Révérence ultime ou simple copie carbone pour susciter le respect et l’attirance ?
Je n’en sais rien. Et je m’en tape.
On aurait pu condamner les STONES pour bien des choses. MUSE aussi. Les GUNS. Ou à un degré moindre, EXHUMER, THULCANDRA, CELTIC FROST, WARHAMMER (par extension), et des milliers d’autres…
Alors oui, GENERAL LEE ressemble beaucoup à CULT OF LUNA. Et ceci, les fans de COL le confirment. Mais ils ne s’en sont jamais cachés. Et quitte à ressembler à quelqu’un, autant choisir un pilier, une référence, et pas un second couteau.
Mais ceci dit, pour ressembler à CULT OF LUNA, il faut déjà avoir un certain bagage. Ce que GENERAL LEE possède, sans aucun doute. On ne ressemble pas aux meilleurs si l’on est qu’un jean foutre. Il faut bosser, ou avoir le don dès le départ.
Alors Roads.
Alors Roads est un excellent album. Un album de Post Hardcore de qualité, traditionnel dans ses choix, et son optique abordable par rapport à d’autres groupes plus bruitistes/torturés. Si l’on est fan du genre, on l’écoute avec plaisir. La production est à mon goût un peu propre, mais rien ne dit que ça ne soit pas un choix délibéré.
Les passages écorchés sont douloureux, les segments atmosphériques/acoustiques nostalgiques et « spirituels », dans le sens littéral du mot.
Le groupe prend toujours le temps d’instaurer une ambiance, et peu de morceaux se développent sur moins de six minutes.
Mais – car il y a un mais – je trouve leur approche un peu timorée, par rapport à un combo comme ZAPRUDER par exemple. Ils se laissent parfois trop guider par les codes inhérents et les figures imposées, et certains breaks semblent un peu téléphonés, ce qui rend l’ensemble par moments trop sage.
Mais je les juge par rapport à eux-mêmes, et non par rapport à un autre groupe aussi illustre soit il.
Si j’avais du descendre tous les clones d’ISIS, de NEUROSIS, de SLAYER, de NAPALM DEATH, de DILLINGER ESCAPE PLAN, j’aurais passé mon temps à coller des pains par paquets de cent.
Je confirme donc que Roads mérite largement sa moyenne. Ne serait ce par exemple, que pour le pont presque Pop de « In Reverse », juste superbe.
Alors maintenant, faites ce que vous voulez, parce qu’après tout, vous seul pouvez décider. Nous, critiques, ne sommes là que pour essayer de vous aiguiller, mais nous savons pertinemment que le choix final vous appartient.
Et heureusement d’ailleurs.
Sinon certaines carrières de monstres de la musique auraient été tuées dans l’œuf.
Ajouté : Mercredi 12 Décembre 2012 Chroniqueur : Mortne2001 Score :     Lien en relation: General Lee Website Hits: 12538
|