# 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
}
DECAPITATED (pl) - Carnival Is Forever (2011)

Label : Nuclear Blast Records
Sortie du Scud : 12 juillet 2011
Pays : Pologne
Genre : Death Metal technique
Type : Album
Playtime : 8 Titres - 42 Mins
Dire que toute la sphère Metal était impatiente de savoir comment les sales gosses de DECAPITATED allaient se relever du choc subi avec la perte de leur père spirituel, Vitek, qui avait fondé le groupe à l’âge de 12 ans, était encore bien en-dessous de la réalité. Cinq années après leur dernier opus, Organic Hallucinosis et quatre après ce terrible accident de bus qui n’avait pas non plus épargné Covan, le vocaliste de l’époque, les polonais ont finalement choisi de poursuivre leur carrière, à un endroit où de nombreux groupes auraient fait le choix de s’arrêter. On ne saura probablement jamais si ce Carnival Is Forever est une façon de perpétuer la mémoire de Vitek, cependant, je ne pense pas qu’il aurait voulu que son bébé s’en aille avec lui. Ce qui semble par contre absolument certain, c’est que les 21 grammes dont s’allègent le corps humain à la mort ne sont pas le poids de l’âme, mais le poids du talent. Gageons que ce disque est un cheveu plus léger.
Fort d’un nouveau line-up qui voit Rafal Piotrowski et Kerim Lechner intégrer respectivement les postes chant et batterie, DECAPITATED n’a au final, plus que Vogg (guitare) comme unique survivant. Ce qui explique peut-être que ce groupe qui se présente aujourd’hui à nous, n’a plus rien à voir avec celui des années 2000. La brisure est aussi musicale, car si les polonais avaient pondu ce genre de travaux à ses débuts, le nom de DECAPITATED aurait brûlé illico dans les abysses de l’anonymat et de l’indifférence. Carnival Is Forever, c’est un creux, une absence de matière et l’inexistence charnelle d’une formation dont le seul blaze impose pourtant un rendu maximal. « The Knife », « United », « Pest » sont autant de compositions qui garnissent cette rondelle sur le papier mais qui à l’écoute sont purement fictives. Il est loin le temps où DECAPITATED bousculait les codes du Death technique. Ce full-lenght montre un groupe désuni, désordonné et qui fait les mauvais choix. Ou plutôt, qui ne fait aucun choix ! Car il n’existe probablement pas de riffs Death plus clichés que ceux-là. Pas de blasts plus rabâchés que ceux-là. Tout semble tellement facile et pourtant, c’est si compliqué… De la bonne foi, il y en a, assurément. Mais ces musiciens apparaissent comme dépassés par la pression provoquée par cette sortie pour le moins intense en enseignements. Le combo a lâché le côté technique pour se concentrer sur les aspects les plus modernes, les plus contemporains du Death. La meilleure preuve reste le choix contestable d’avoir engagé Rafal au micro, ce dernier arborant des vocaux Death / Thrash qui pour ma part, ne collent pas du tout avec le grain spécifique à DECAPITATED. Le départ de Sauron en 2005 reste bel et bien le premier fait marquant d’une carrière en dents de scie. Viennent ensuite des solos contestables appuyé par un jeu de batterie linéaire mais décent tout de même. La complicité qu’il y avait entre Vogg et Vitek manque cruellement. Par contre, certaines nouvelles idées se dégagent assez bien de la masse, comme l’aspect extrêmement progressif d’ « Homo Sun », la claque « 404 » qui bizarrement, nous fait penser à un EKTOMORF qui aurait l’alcool mauvais ou les huit minutes de l’éponyme, qui oppose des acoustiques flippantes à un Death comateux. Mais comme souvent sur cette œuvre, le grotesque succède à l’intéressant et on se retrouve avec un final instrumental tout en toucher sur « Silence » à la limite de l’effronterie pour des auditeurs qui n’ont à mon avis, aucune envie de rester 4 minutes de plus avec un groupe qui n’a été pendant 38 autres, que l’ombre de lui-même.
Plus qu’un présage, les clowneries de DECAPITATED sont d’un bien mauvais goût sur un album qui s’appelle Carnival Is Forever. En tout état de cause, je pense qu’il est grand temps pour le public de tourner la page et de repartir sur des bases assainies. Encore faudrait-il que les polonais ne nous donnent pas d’emblée le bâton pour les battre. Comme je le laissais entendre en début de chronique, il ne manque qu’une seule chose pour faire basculer cet opus du bon côté : 21 grammes.
Ajouté : Vendredi 10 Février 2012 Chroniqueur : Stef. Score :    Lien en relation: Decapitated Website Hits: 12538
|