# 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
}
NORTHER (fi) - Circle Regenerated (2011)
Label : Century Media Records
Sortie du Scud : 18 avril 2011
Pays : France
Genre : Death Metal Mélodique
Type : Album
Playtime : 10 Titres - 44 Mins
Offrande des terres suédoises au reste du monde, le Death Metal Mélodique, en plus d’avoir assis la reconnaissance de ses piliers, est aussi devenu le cheval de bataille de leurs voisins finlandais qui l’ont réinterprété à leur sauce, avec une virtuosité des guitares davantage poussée et des claviers proéminents, à l’image de CHILDREN OF BODOM. Si ces derniers sont rapidement devenus un des groupes emblématiques de leur pays, ce n’est pas le cas de NORTHER qui, malgré ses efforts pour se personnaliser, souffre sans cesse de la comparaison avec ces premiers.
Et, quand bien même le dernier album s’éloignait de la lignée des Bodomiens, il souffrait nettement de son manque d’originalité. D’office, les compositions de ce nouveau disque, Circle Regenerated, ne semblent pas décidées à enterrer la banalité du précédent. Pourtant toujours enregistré au Astia Studios, le son pèche cruellement par son faible relief et ne favorise guère les morceaux, plutôt longs, mais à la structure similaire. Et, malgré sa forte présence dans l’habillage des titres, la participation des claviers se révèle très aléatoire. Tuomas construit de légers fonds atmosphériques, tout en tentant de jouer la carte de l’émotion en y incorporant des notes pianotées, mais y parvient rarement. Alors qu’il peut en faire une utilisation pertinente sur un titre comme « Believe », où il se glisse entre les riffs incisifs et alimente convenablement le break, le claviériste reste trop souvent en décalage avec les pistes, les garnissant d’effets électroniques inutiles, d’intros Electro kitsch (« Break Myself Away »), ou bien se montrant simplement envahissant. Par ailleurs, à quelques exceptions près, les breaks et autres compléments de titres s’avèrent souvent ratés ; par exemple celui de « Truth », partagé entre riffs basiques et solo technique pauvrement harmonisé, accompagnés d’une basse trop métallique.
Les cordes ne sont clairement pas à l’honneur au sein de ces nouvelles pistes. Jukka s’exécute donc sur un instrument sans profondeur, qui ne se distingue que sur les sections placides mais ne propose pas, pour autant, d’apport mémorable aux titres, faute à cette nouvelle sonorité plus brute. Ce qui est plutôt décevant puisque sa mise en exergue sur le pont atmosphérique de « Closing In » dévoile un potentiel réfréné. Aux guitares, Kristian et Daniel ne sont pas desservis par la production mais plutôt par leur performance. En effet, à l’instar des derniers albums de leurs collègues finlandais, nombreux sont les solos inintéressants se greffant sans aisance dans les pistes. Le duo préfère alors présenter ses capacités techniques (« The Last Time ») plutôt que de proposer, comme sur « Falling », une démonstration cohérente menant à un intelligent interlude pianoté. Par ailleurs, les guitares n’étant pas assez mises en avant dans le mix, les riffs peinent à se montrer aussi efficaces que sur N (à défaut d’être révolutionnaires), hormis sur quelques morceaux tels que « Truth », profitant d’un jeu décent qui lui apporte un dynamisme appréciable. « Some Day » se voit également relevé par un aspect SCAR SYMMETRY et son break instrumental où le tempo vif permet d’obtenir des percussions pêchues.
Ce qui n’est, bien entendu, pas le cas sur la majorité de l’opus. La batterie manque indéniablement de punch, et ce ne sont pas les quelques accélérations de double pédale, dans l’unique but de donner un faux-semblant de puissance à un rythme constamment mid-tempo (« Through It All »), qui réussissent à convaincre. Les toms, stagnant dans la platitude, privent alors les titres axés sur la rythmique (« We Do Not Care ») d’un rendu énergique en compagnie des vocaux déchaînés. Toutefois, Heikki est un batteur compétent qui sait se montrer vif et précis à d’autres occasions, relançant ainsi les compositions traînant la patte.
Des morceaux faibles qui auraient pu être rattrapés par le nouveau chanteur, et ancien frontman d’IMPERANON, Aleksi Sihvonen, reprenant le micro suite au départ du fondateur Petri. Pourtant, ce dernier est difficilement égalable et son remplaçant va s’efforcer de nous convaincre pendant quarante-cinq minutes. Ses vocaux hurlés, dénués d’intensité, sont des plus classiques et laissent souvent à désirer, tout comme ses tentatives de variation de timbre. En fait, c’est la voix éreintée insupportable avec laquelle il interprète les paroles qui rend sa performance particulièrement pénible, malgré un « Break Myself Away » où la rythmique véhémente renforce les vocaux, et offre un refrain convenable qui, comme les autres, est encore trop poussif, même si entraînant. Tâche difficile au sein de cet album puisque Kristian apporte un chant clair bien plus niais que sur N, anéantissant ainsi une bonne partie des morceaux par sa mollesse, à l’image de « The Hate I Bear », ou des lignes presque Prog’ de « Some Day ».
Malheureusement, NORTHER délivre de nouveau un album banal et peu inspiré. Alors que N marquait déjà une régression pour le groupe, il semble que le départ de Petri ait laissé la porte ouverte à la créativité des Finlandais. Circle Regenerated dispose tout de même de quelques passages plaisants, mais trop peu nombreux pour compenser la pauvreté de composition, ainsi que la performance décevante du nouveau porte-parole. Il ne reste plus qu’à espérer que la formation se sorte au plus vite de cette mauvaise passe.
Ajouté : Mercredi 14 Septembre 2011 Chroniqueur : CyberIF. Score : Lien en relation: Norther Website Hits: 9576
|