# 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
}
MORBID ANGEL (usa) - Illud Divinum Insanus (2011)
Label : Season Of Mist
Sortie du Scud : 6 juin 2011
Pays : Etats-Unis
Genre : Death Metal
Type : Album
Playtime : 11 Titres - 57 Mins
Après huit ans d’absence, ce nouvel album de MORBID ANGEL était à peu près autant attendu que la venue de l’Antéchrist, et il faut admettre d’emblée qu’il déclenche depuis sa récente sortie une immense controverse… Célébrant le retour du frontman de l’Enfer, David Vincent, mais devant se passer de l’apport rythmique inégalable de Pete Sandoval, bloqué par des problème de disques dorsaux et remplacé par le très capable Tim Yeung (DIVINE HERESY, ALL THAT REMAINS, NILE, HATE ETERNAL et VITAL REMAINS, bonjour la carte de visite…), l’Ange Morbide revient des Hadès avec une livraison pour le moins surprenante, qui a laissé plus d’un fan sur le carreau !
J’admets, je concède, j’acquiesce. On ne peut raisonnablement pas occulter des chefs d’œuvre comme Altars Of Madness, Blessed Are The Sick, ou Domination. Ces albums ont défini quasiment à eux seuls un genre, le Death Metal technique, balbutié quelques années plus tôt par un NOCTURNUS dans lequel on retrouvait justement un ex-Morbid, Mike Browning.
Mais franchement, peut-on attendre d’un groupe qui a été absent presque une décennie de ressasser les sempiternelles recettes qui ont assuré son succès ? Ne doit-on pas au contraire exiger une nouvelle évolution, un pas en avant de la part d’un combo qui n’a eu de cesse de repousser les limites pour faire évoluer un style promis au départ à une marge de manœuvre très mince ?
Si votre réponse reste négative, alors je n’aurai qu’une seule chose à vous dire. Achetez/écoutez/volez le single « Nervermore », et ne cherchez pas à aller plus loin. Vous risqueriez, en écoutant Illud Divinum Insanus de tomber sur des choses que vous n’êtes pas prêts à entendre.
Mais toutefois, cet album n’est pas exempt de reproches.
Le grief majeur à formuler à son encontre est qu’il présente plus ou moins des musiciens assis le cul entre deux chaises. Je comprends tout à fait ce besoin de renouveau, et je serais même le premier à l’applaudir des deux mains s’il avait été plus franc et plus subtil. Mais à trop hésiter entre la tradition et l’inédit, on finit par proposer deux facettes complètement dissemblables et on déconcerte l’auditeur.
Car les titres à influence Technoïde/Indus, aussi bien sentis soient ils, provoquent une profonde cassure avec le reste de l’album, d’une facture plus classique, si bien que l’on a parfois l’impression d’écouter un Split LP. On savait que MORBID ANGEL avait des inclinaisons naturelles pour l’hybridation, le titre avec THE BERZERKER sur le sampler Hellspawn et la carrière de Vincent dans les GENITORTURERS en étaient des preuves formelles.
Donc rien de bien surprenant là dedans. Là ou les athéniens s’atteignirent, c’est que ces mêmes morceaux sont vraiment hermétiques, dans le sens ou la fusion est totale, et donc, placés de ça et là sur l’album, nous déconnectent totalement de l’ambiance « Pur Death » du reste de l’effort. Et là où l’équation se révèle ardue, c’est que ces morceaux sont parmi les plus intéressants ! Car si les « Nevermore », « Existo Vulgoré », « Blades For Baal » nous ramènent à l’époque bénie de Blessed Are The Sick / Domination, ce sont bien « Too Extreme ! », carrément Gabba, « Destructos VS The Earth/Attack » qui ferait passer Frontline Assembly pour une joyeuse confrérie de rastafari hilares, ou l’inclassable « Radikult », moitié « Doll Dagua » du révérend Manson, moitié « Antibody » du flingué Christian Fetish qui retiennent l’attention ! Complètement hors contexte dans un album de MORBID, ces titres, selon les blogs/webzines que vous fréquentez, seront tour à tour décrits comme des farces indigentes, des essais ratés, mais en tout cas, des choses indignes de la créativité de Trey Azagthoth ! Et pourtant…
Même si « I Am Morbid » est bien pesant malgré des passages mélodiques bien troussés, et si « 10 More Dead » est encore plus méchant que « Where The Slime Lives », et perpétuent donc la lignée d’un Death Metal de premier choix, je ne peux m’empêcher de craquer pour ces morceaux improbables qui font crier haut et fort à la trahison dans les chaumières !
Cela dit, comme je l’ai énoncé plus haut, il eut peut être été plus sur de la part du groupe de proposer un album dans la plus pure lignée de leurs sorties antérieures, quitte à sonner un peu passéiste, et de réserver ces quelques titres à un EP complémentaire. Ou alors, de jouer la carte du « Je fais ce que je veux et je t’emmerde » à fond, et sauter à pied joint dans le brouet nouveau, ce qui n’aurait rien eu d’étonnant de la part de ses membres qui n’en ont toujours fait qu’à leur tête.
Mais finalement, de la part d’un combo qui a toujours joué à merveille son rôle de poil à gratter de l’extrême, plus rien ne me surprend…
Je terminerais par ce postulat qui est fiable à cent pour cent.
Pour les puristes des ascètes, n’écoutez que les pistes suivantes, et dans cet ordre : 3, 4, 5, 6, 8, 9, ce qui vous fait au choix, un LP très court ou un extended EP.
Pour les allergiques au Death Metal qui ne sont pas à une bourrinade innovante près, respectez ce code : 1, 2, 7, 10, 11.
Pour tous les autres, concernés de près ou de loin par le retour d’un groupe de standing, vous pouvez écouter l’intégralité de Illud Divinum Insanus.
Vous ferez vos courses vous-même.
Ajouté : Mercredi 08 Juin 2011 Chroniqueur : Mortne2001 Score : Lien en relation: Morbid Angel Website Hits: 11838
|