# 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
}
CHILDREN OF BODOM (fi) - Relentless Reckless Forever (2011)
Label : Spinefarm Records
Sortie du Scud : 8 mars 2011
Pays : Finlande
Genre : Death / Power Metal Mélodique
Type : Album
Playtime : 9 Titres - 36 Mins
Malgré la sortie de Skeletons In The Closet, histoire de faire patienter les fans les plus ardents, la compilation de reprises, dont la qualité est des plus discutables, n’a eu que peu d’impact sur les inquiétudes des amateurs de CHILDREN OF BODOM. Effectivement, après avoir encaissé le médiocre Blooddrunk, ayant orienté la formation vers un Metal plus Thrash et rapide, mais dénué de musicalité, et faisant suite à un Are You Dead Yet? des plus convenus, le public des Finlandais était en droit de douter des capacités musicales de la formation. C’est donc avec retenu que l’on considère ce nouvel album, Relentless Reckless Forver, qui a tout intérêt à refléter le travail phénoménal que le groupe dit avoir fourni, s’il ne veut pas apparaître définitivement obsolète.
Cette pochette automnale, au photoshopage grotesque, et à l’éternelle faucheuse, cette fois-ci dans une posture agressive, renferme donc neuf compositions, dont la durée, comme à l’accoutumée, dépasse légèrement la demi-heure. C’est également l’occasion pour le groupe de dire au revoir au producteur Mikko Karmila, présent sur les deux derniers disques, et de s’associer avec Matt Hyde, pour un son toujours plus américanisé. On note, par ailleurs, le retour, sur deux pistes, d’introductions parlées appuyées de synthés inquiétants, ainsi que, sur deux autres, de chœurs enchanteurs. Toutefois, ces éléments concordent maladroitement avec l’ensemble de l’opus qui dispose plutôt d’une atmosphère légère et décontractée, que « Was It Worth It? » représente assez bien de par ses mélodies joviales sur les refrains et son ambiance complètement fun. Ainsi, ce nouvel album s’écoute, avant tout, pour s’amuser.
Un esprit de fête que l’on doit, principalement, au retour proéminent des mélodies. Tout d’abord, les claviers se parent à nouveau de leurs sonorités d’antan si appréciables (« Not My Funeral ») et se glissent sans problèmes au sein des titres en tant que nappes atmosphériques discrètes, samples aux aspects symphoniques, et quelques solos maitrisés qui conservent une harmonie plaisante avec les guitares. Ces dernières voient leur accroche mélodique davantage prononcée grâce à cet instrument, ce dont profitent Alexi et Roope pour délivrer des riffs entraînants et solides, qui savent capter l’attention de l’auditeur au moment opportun. Des titres comme « Shovel Knockout » et la piste éponyme sont clairement avantagés par ces jeux de cordes entraînants. De surcroît, chacun des morceaux est affublé d’un solo, soit, bien que ne revenant pas à la maestria des débuts, tout à fait correct et dans la continuité de la structure (« Pussyfoot Miss Suicide »), soit franchement inintéressant et manquant cruellement de feeling, à l’image de celui de « Was It Worth It? », qui ressemble à une improvisation ratée, ou bien celui mécanique de « Northpole Throwdown » ; titre qui, en plus, termine pauvrement l’album, malgré son optique brute et directe.
En ce qui concerne Alexi, on ne peut pas dire qu’il ait fait des progrès. Sa voix apparaît moins râpeuse, extrême, et davantage lissée, formatée. Les couplets ne brillent donc pas par la prestation anecdotique et peu prenante du frontman finlandais, mais plutôt par les jeux mélodiques des guitares. En revanche, grâce au backing de Roope et Henkka, les refrains sont scandés et ressortent pleinement. Ces passages se font ainsi plus mémorables et enjouées, à l’instar de « Ugly », ou « Relentless Reckless Forever » qui, de par sa dynamique chaleureuse et son air entêtant, ainsi qu’un solo finement maîtrisé, s’impose comme le meilleur titre du disque.
Du côté des éléments rythmiques, en dépit d’une basse consistante qu’Henkka se plaît à faire résonner tout au long de l’album, permettant d’apporter quelques sonorités supplémentaires lors de ses exécutions acoustiques (« Shovel Knockout »), ou renforçant les guitares de riffs vibrants, la cadence peine à divertir puisqu’essentiellement monotone et peu puissante ; ce qui nous fait regretter l’époque où Jaska parvenait à prendre l’auditeur de court avec sa fouge et ses tempos de folie. Ici, il reste constant, et sa batterie, bien trop triggée, ne renvoie que des percussions mécaniques, sans vie, et qui ne décollent jamais, un réel dommage. En fait, son jeu varie seulement au travers de « Roundtrip To Hell And Back », se déployant sur un mid-tempo qui offre un impact supplémentaire aux refrains, et « Cry Of The Nihilist », dont la double pédale embraye sur des rythmiques imposantes, mais qui lui fait perdre en efficacité, à croire que la qualité de l’instrument est inversement proportionnelle à l’attrait du morceau.
En somme, Relentless Reckless Forever rattrape quelque peu les escapades de ses prédécesseurs, principalement grâce à sa capacité à raviver les sonorités des premiers disques, mais n’en reste pas moins pourvu de maladresses et reste, donc, bien loin de figurer parmi les meilleurs albums du groupe. Effectivement, malgré des mélodies majoritairement accrocheuses et une ambiance festive qui se dépeint du tableau, les Finlandais auront encore du mal à réconcilier tout leur auditoire, cause à des démonstrations techniques peu sincères et, surtout, une rythmique qui fait pâle figure au sein des morceaux. Quoiqu’il en soit, cet album a quand même tendance à rassurer les indécis sur le fait que CHILDREN OF BODOM sait toujours écrire des compositions efficaces, et laisse alors espérer que cette remontée en qualité se poursuivra à l’avenir.
Ajouté : Lundi 04 Avril 2011 Chroniqueur : CyberIF. Score : Lien en relation: Children Of Bodom Website Hits: 12016
|