# 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
}
GRAVEWORM (de) - Diabolical Figures (2009)
Label : Massacre Records
Sortie du Scud : 26 avril 2009
Pays : Allemagne
Genre : Black Metal Symphonique
Type : Album
Playtime : 10 Titres - 44 Mins
En 2007, avec Collateral Defect, leur sixième livraison, les allemands de GRAVEWORM avaient innové en ajoutant des sons électroniques qui apportaient une petite touche d'originalité (qui n'était pas pour me déplaire) tout en gardant ce côté romantique et mélodique propre à leur son. Suite à cela, on se demandait si GRAVEWORM allait renouveler l'expérience ou nous surprendre en suivant un tout autre courant. Allez ! Tous à l'eau et essayons de ne pas nous noyer.
Démarrage en trombe pour ce nouvel opus : Diabolical Figures. Pas le temps de tester la température de l'eau ni même de se tremper le cou. « Vengeance Is Sworn » nous plonge directement dans le bain sans nous laisser le temps de prendre un peu d'air. Effectivement, j'aime bien les petites intros atmosphériques qui permettent de nous préparer en douceur à ce qui va venir. GRAVEWORM décide de nous jeter dans cette écoute musclée mais encore faudrait-il que nous restions captivés tout au long du disque pour réussir notre traversée. Le chant Black de Stefan Fiori n'arrive pas à me donner cette bouffée d'oxygène dont j'ai besoin pour apprécier l'écoute d'un album. Personnellement, j'adore les parties chantées en voix basse qui apportent vraiment une singularité au groupe.
Le ton est donné, il nous rapproche de TRISTANIA par certains moments, mais ne parvient pas à faire preuve de plus de créativité que Collateral Defect. C'est donc sans s'attendre à trop de surprises que l'album défile. Il offre parfois de petites poses romantiques, comme dans « Circus Of The Damned ». Le morceau qui suit porte le nom de l'album, « Diabolical Figures ». Il nous permet de sortir un peu la tête de l'eau pour reprendre nos esprits troublés par ce manque d'oxygène évident. On étouffe ! De l'air !<br<
Bah c'est pas encore pour tout de suite, il va falloir prendre son mal en patience et surtout ne pas perdre la moindre bulle d'air. C'est seulement arrivé au cinquième titre de cet opus, « Forlorn Hope » que nous pouvons nous agripper à une branche pour reprendre quelques forces.
Les guitares d'Eric Righi et de Thomas Orgler nous offrent peu de temps morts avec leurs riffs toujours très agressifs et saturés au maximum. Normal pour un groupe de Black me direz-vous, oui, mais le problème est que GRAVEWORM fait aussi du mélodique ! Et ça ne s'entend pas trop ou du moins, on s'attend à écouter des petits fonds d'ambiances gothiques avec des voix brumeuses et des claviers.
Nous avons envie d'y croire mais la noyade n'est pas loin. Ce n'est pourtant pas faute de me démener dans cette eau glaciale mais rien n'y fait, je n'arrive pas à me réchauffer. Non loin du but, le groupe nous offre un bon son et une technique instrumentale quasi impeccable ainsi qu'un chant growlé qui reste tout de même très ''propre'' et audible. On finit par croire que les groupes de Black Metal symphoniques finissent tous par nous proposer la même chose et ça devient lassant.
De petits efforts sont à relever, le titre « Forlorn Hope » nous prouve que la voix chantée (même très grave) peut avoir un impact aussi puissant qu'un son guttural. Il est dommage que cette voix ne reste pas sur tout le titre, cela aurait été bénéfique à l'album, qui aurait gagné en oxygène.
Allez ! Encore un effort les gars, on commence à peine à voir se dessiner au loin un rivage !
Je passerais donc sur certains titres qui se ressemblent un peu trop à mon goût et qui n'apportent rien de bon ni de mauvais à l'album. Les parties dites mélodiques ne me transcendent pas plus que ça, sauf cette très belle fin instrumentale ; « The Reckoning » qui suit le même scénario que « Collateral Defect », laquelle nous offrais la même chose avec « Memories ». Cet opus se laisse glisser sur des eaux brumeuses sans pour autant voir où il nous emmène vraiment. La seule surprise de l'album, c'est cette reprise de THE POLICE, « Message In A Bottle », qui est plutôt réussie. Ce morceau a le mérite d'au moins produire un effet léger et mélodique qui nous offre peut-être une ouverture vers de nouveaux horizons ...
Pour résumer, cet album reste très monotone à sa première écoute et ce sentiment ne fait que se confirmer en le réécoutant. Notons aussi que c'est un groupe qui maîtrise parfaitement le genre Black Metal symphonique (basse sombre, batterie pachydermique, claviers omniprésents, guitare à la rythmique efficace ainsi qu’alternance de voix gutturales et caverneuses). Le hic, c'est que je n'arrive pas à les suivre jusqu'au bout et c'est franchement gênant pour un groupe comme GRAVEWORM qui devrait nous offrir bien plus qu'une écoute linéaire.
Un peu de patience, nous verrons si notre équipage pourra ou non nous mener plus loin que la rive d'en face le 24 octobre 2011. Fragments Of Death nous fixera bien vite sur les éventuelles prises de risques dont pourrait nous gratifier ce groupe qui à tout pour plaire.
Espérons que GRAVEWORM se trouve enfin et se démarque avec plus de franchise des autres groupes du même genre. Ne soyons donc pas pessimiste et croisons les doigts pour que ce nouvel opus fasse l'effet d'un raz-de-marée !
Ajouté : Mardi 08 Novembre 2011 Chroniqueur : Mystic Laurëa Score : Lien en relation: Graveworm Website Hits: 7506
|