# 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
}
NECROPHAGIST (de) - Epitaph (2004)
Label : Relapse Records
Sortie du Scud : 3 août 2004
Pays : Allemagne
Genre : Death Metal technique et mélodique
Type : Album
Playtime : 8 Titres - 32 Mins
NECROPHAGIST est un groupe allemand de Technical Death Metal qui s’est fait particulièrement remarqué avec ses deux albums dont le dernier de 2004 : Epitaph. Cette galette est déconcertante. Déconcertante parce que l’identité du groupe y est tellement forte qu’il est difficile de faire une chronique. La chronique est un jugement. Tout jugement est une comparaison. Mais ici, comment comparer ?
D’abord le son. Il est au service de l’œuvre. Ce n’est pas du gros son dévastateur. Le grain est serré, droit et propre. Le son ne doit pas « dépasser » et il doit servir l’idéal. Ceci est donc appréciable puisque l’objectif est plutôt atteint. En effet, quand on remarque la technicité des compositions et même de la première « Stabwound », on apprécie un son droit et impeccable qui permet à l’auditeur d’absolument TOUT cerner. Grandiose. La guitare et la basse ont des lignes très techniques, torturées et qui ne tournent pas rond sur le papier (sur le papier seulement hein). Grande caractéristique qu’il faut relever : les parties sont bien souvent différentes alors que, souvent, dans le Metal extrême, la basse se contente de faire les fréquences basses de la guitare. Écoutez pour vérifier l’intro de « Seven ». La guitare a un jeu très technique et même classique dans la façon d’aborder la musique notamment par la faculté de jouer sur deux lignes très enrichies ; une ligne basse et une ligne aiguë. L’intro d’« Ignominous and Pale » montre comment Muhammed Suicmez arrive à trouver de l’amplitude sur son manche. La batterie maintenant. Comme le reste du son, très propre, sans effet. À la fois technique et endurante. Encore que le mot « technique » soit un euphémisme, « chirurgical » est plus approprié. Les parties sont cassées, inquiétantes et à la fois groovy tout en gardant les secrets du Metal extrême ; les blastbeats énervés et les full-doubles placardés. La voix se porte peut être en vilain petit canard. En effet, elle est assez plate, normale et sans trop d’intérêt. Ceci s’explique facilement. D’abord parce que l’album a une vocation instrumentale, c’est indéniable (tous les titres ne comportent que très peu de lignes de voix). Ensuite parce que la voix est la voix du guitariste. Je vous laisse imaginer la dextérité de l’homme pour aligner des lignes comme celle-ci tout en fanfaronnant. Quoi qu’il en soit et parce que nous devons être objectifs, la voix n’est pas exceptionnelle.
Globalement, les morceaux présentent une certaine homogénéité : très techniques, son précis avec des solos très classiques, rapides et acrobatiques. En effet, le groupe, par son jeu musical, a une posture très classique (l’outro de « Only Ash Remains » est une reprise pure et simple de Prokofiev). Nous entendons par là un jeu qui se veut presque en note par note et qui se répète peu. Tout est torturé, recherché pour le plus grand plaisir de l’auditeur. L’intro de « Seven » en donne l’exemple parfait. Le guitariste utilise toute l’artillerie possible pour envoyer du lourd. Aller-retour, tapping (aussi bien en solo qu’en rythmique dans « Stabwound »), swepping, (« Diminished To Be ») et nous en passons. C’est puissant, c’est beau, ça vole, ça respire, le son est très typé, on pourrait le reconnaître entre mille. Le quatuor arrive aussi à nous faire headbanguer sur des morceaux « lents ». En effet, généralement, le Metal extrême trouve son effet dans la frénésie qu’il provoque. Ici, la composition est telle qu’on arrive à percevoir la science necrophagienne dans des intros qui sont lentes, rythmées et pendulaires comme celle grandiose de « Stillborn One ».
Certains détracteurs de ce groupe avancent que les solos sont trop « tous les mêmes ». Ceci n’est pas faux dans le principe mais l’écoute attentive de ces derniers vous fera apprendre les subtils changements. De même, le style étant très particulier comme nous l’avons montré (d’une particulière densité tout en restant parfaitement clair), il peut déplaire à certains qui sont adeptes de l’image noire qui gravite autour du Metal. C’est vrai.
Malgré tout, ces arguments ne sont que poussière comparés à l’immensité de l’art de NECROPHAGIST. Epitaph est le sceau d’un groupe qui a su réellement innover. Imposant par l’ambition et par le résultat, cet album est incontournable pour ceux qui veulent s’aventurer dans le Metal technique. C’est un chef d’œuvre.
Ajouté : Mardi 15 Mai 2012 Chroniqueur : SergueïOwmorov Score : Lien en relation: Necrophagist Website Hits: 7886
|