# 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
}
SOULFLY (br) - Archangel (2015)

Label : Nuclear Blast Records
Sortie du Scud : 14 août 2015
Pays : Brésil
Genre : Néo Thrash Metal
Type : Album
Playtime : 10 Titres - 36 Mins
Max revient, une fois de plus... C'est pas possible, ce mec est devenu le Zappa du Metal extrême... Quatre albums en moins de deux ans, entre ses projets, CAVALERA CONSPIRACY, ou son nouveau joujou KILLER BE KILLED... Plus prolifique c'est impossible, mais là, ça le confine à la boulimie de travail...
On imagine mal le père Cavalera peinard chez lui à faire cuire des oeufs en tapant le bout de gras avec son voisin...
Mais c'est ainsi, et au fil du temps, le père Max C. est devenu une figure incontournable, une icône, au même titre que ses idoles Lemmy ou Ozzy. Alors après, les débats stériles sur l'intérêt de ses projets respectifs... On s'en tape, comme dirait la plèbe sur les forums, "si tu n'aimes pas, n'écoutes pas"... Max fait du Max, qu'il soit entouré de son frère, de potes ou des compères de SOULFLY...
SOULFLY justement, puisque c'est le propos du jour... Niveau inspiration, le groupe (mais en est-ce vraiment un ?) a connu des hauts, des très hauts, mais aussi des très bas, spécialement à l'époque de Primitive et les années suivantes, mais avec Dark Ages et dans une moindre mesure Conquer, Max avait repris du poil de la bête et avait gagné de nouveau en crédibilité.
Depuis, à force de démultiplier ses interventions, il était retombé dans ses travers et automatismes. Un Néo Thrash ou Post Thrash selon vos préférences, certes bouillonnant et puissant, mais légèrement en pilote automatique et pas forcément finaud. Omen avait très légèrement rectifié le tir, qui faiblit de plus belle sur Enslaved et Savages, sans pour autant faire chuter le tensiomètre à zéro.
Sans tourner autour du pot, disons le clairement, même avec ses influences bibliques et ses thématiques empruntées à l'histoire d'Abraham, Archangel, le dixième album du groupe ne sera pas celui du retour en grâce total, et ne fera aucune ombre au meilleur effort du groupe, l'insurpassable semble il Dark Ages.
On retrouve les ingrédients qui ont fait le succès de SOULFLY, et de Max par extension, ce Néo Thrash primaire et sauvage, mélangeant les influences ethniques et sonores, mais cherchant toujours à aller droit au but. Pour cet "anniversaire", la règle ne sera pas dérogée, puisque les invités sont légion. On retrouve dans un désir d'être up in time Todd Jones de NAILS sur "Sodomites", Matt Young de KING PARROT sur "Live Life Hard!", et même une réunion de famille avec le fiston Igor Jr, Richie d'INCITE et Anahid de MASTER OF PERSIA sur le final "Mother Of Dragons". Ces featuring sont plutôt de bon ton, même s'ils semblent plus découler d'une envie de rester branché que d'une réelle volonté d'apporter un petit plus musical.
Musicalement justement, aucune surprise, ou presque sur ce disque. Disque qui commence d'ailleurs très très mal avec un des morceaux les plus clichés que Max a pu écrire, et Dieu sait pourtant qu'il a souvent préféré les poncifs à la réflexion... Mais même MANOWAR n'aurait pas craché sur les paroles de "We Sold Our Souls To Metal", qui semble issu du cerveau peu fécond de chantres du True Metal, et qui est à peine digne de figurer sur une compilation de la New Wave Of British Heavy Metal... Mais heureusement, c'est une bombe sonore d'une puissance hors contrôle, ce qui rattrape en partie la niaiserie affligeante de son contenu littéraire... Avec un fond digne de CAVALERA CONSPIRACY, batterie en contretemps très basique et brutale, riffs en circonvolutions, avant un refrain très DISCHARGE. On constate d'emblée que la production est brute mais adaptée, et surtout, plaisir extraordinaire, la basse pour une fois est largement audible, ce qui est vraiment appréciable tant ses lignes apportent un plus à la rythmique.
Comme d'habitude, Max laisse traîner un peu de surplus par ci par là, et "Sodomites" renoue avec la tradition du pamphlet bien lourd et épais, tout en restant quand même assez percutant. Mais les hits Post Thrash sont nombreux ne vous inquiétez pas, et vous pourrez vous délecter des tirs de barrage que sont les imparables "Live Life Hard!", pour peu que vous supportiez les hurlements aigus de Matt Young, qui toutefois ne ruinent pas ce mid tempo ravageur.
Au rayon "très bien vu", on notera l'ethnique et troublant "Shamash" qui alterne les incantations divines et les sacrifices de riffs bien saignants, rappelant même le SEPULTURA de Roots par petites touches, l'énormissime "Deceiver" qui cavale sans se retourner et brûle tout sur son passage, "Archangel" et ses riffs à la DEFTONES, ses accalmies grondantes et sourdes, et ses déchirement soudains lâchés par un Max éructant comme jamais, et bien évidemment le final apocalyptique, signé de la plume "repas de famille qui tourne au carnage", mais qui assure de ne laisser aucune trace derrière le massacre avoué.
Le reste n'est pas déplaisant, loin de là, mais ne rivalise pas avec les sommets de la discographie de SOULFLY, tout en soulignant quand même un net regain de forme. Le mid tempo sautillant de "Titans" est assez convaincant, et "Ishtar Rising" à la grandiloquence pénétrante même si son riff sonne rebattu et convenu.
Tout ça pour dire quoi en fait... Pas grand chose, à part que SOULFLY continue son bout de chemin, qui commence à prendre de solides allures d'autoroute depuis le temps... Voilà vingt ans que Max mène sa barque hors de SEPULTURA, et ils serait temps d'admettre que malgré l'héritage laissé par Roots, Arise ou Beneath The Remains, SOULFLY semble être l'épouse la plus légitime de l'homme.
Archangel ne fait pas avancer les débats, est loin d'être le meilleur boulot du brésilien, son line-up à des allures d'auberge espagnole (Tony Campos s'est fait la malle entre temps), mais finalement, tout ça n'est pas très important. Retenez juste que c'est un bon disque, et que son créateur peut en être fier. Mais vous êtes fans de toute façon, ou détracteur, alors, quelle importance, vous savez déjà à quoi vous attendre.
Mais respect éternel à Max, pour tout ce qu'il fait pour le Metal... Par contre l'ami, encore un texte comme ton morceau d'ouverture et tu finis par un duo avec Joey DeMaio!! Je veux bien être indulgent, mais faut pas déconner non plus...
Ajouté : Lundi 07 Décembre 2015 Chroniqueur : Mortne2001 Score :     Lien en relation: Soulfly Website Hits: 7246
|