# 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
}
BLAME (FRA) - Résilience (2013)

Label : Auto-Production
Sortie du Scud : octobre 2013
Pays : France
Genre : Death Metal
Type : Album
Playtime : 11 Titres - 49 Mins
Petit, j'entendais souvent mon père dire que dans les Vosges, les oiseaux volent en marche arrière. Ce n'est qu'en grandissant que j'ai compris qu'entre alsaciens et vosgiens, l'entente est toujours cordiale quoiqu'un peu moqueuse. Et finalement, quoi de mieux que le retour des beaux mecs de BLAME pour vérifier la véracité des médisances locales ? Allait-on avoir droit à un album qui a une fin pour début et inversement ? Un dictionnaire dans lequel les mots "zygomatiques", "zigoteaux" et "zinzinulé" trusteraient les premières pages ? Je ne le savais pas encore au moment d'être absorbé par cette superbe pochette, camaïeu d'âmes brisées, de silences et de faïence sordide, mais Résilience, le premier véritable full-lenght du combo vosgien, six ans après leur EP éponyme de 2007, est un concentré de logique, de stabilité, de réflexion, d'engagement, loin de toutes prérogatives. A titre personnel, je ne savais vraiment pas à quoi m'attendre et mis à part un goût douteux pour les jeux de mots révélé à la lecture des titres des chansons ("Ode Hissée", "L'Adulte Erre", "L'Os Ment"), aucune info valable ne fuitait de ce coffret hermétique.
Résilience sera très vite d'une incroyable sollicitude. Il faudra précisément 16 secondes à l'opus pour démarrer, le temps d'un dernier suspens et à partir de cet instant précis, plus rien ne viendra nous sauver du tourbillon qui nous entraîne par le fond. BLAME joue vite, joue bien, joue fort. Avec son "Double Face", le groupe dépeint immédiatement un univers macabre et violent, une salle des tortures dans laquelle il ne fait pas bon s'attarder. Pourtant mélodique à l'entame, le morceau bascule rapidement vers quelque chose de vivace, emmené par un vocaliste édifiant de capacités. Jean ne se contente pas de vociférer. Au contraire, son chant guttural (limite Brutal Death) est d'une précision chirurgicale, tant dans le placement que dans le débit et l'intensité. Et à l'image de son chanteur, c'est tout le groupe qui bénéficie de cet effet de surprise : le professionnalisme. Dans l'anonymat d'une scène française en perpétuel mouvement, BLAME a patiemment écrit un premier acte d'une tragédie pétrifiante. On ne va pas se voiler la face, ce Death Metal (pas assez Thrash pour mériter ce qualificatif, pas assez mélodique pour ressembler à du HYPOCRISY) n'est pas né de la dernière pluie. Si on distingue assez facilement des affinités avec la scène Death old-school des années 90, il y a surtout chez ces Vosgiens la volonté de ne pas sombrer dans le cliché. En effet, par le biais de compositions étouffantes ("Hétaïres", "Ex Inhibitions" qui navigue intelligemment entre Grind et Heavy), BLAME modernise son Death Metal, le rend dynamique, presque novateur. Les leads de guitare apportent tantôt des sonorités Mélodeath, tantôt des vapeurs de Heavy auguste et c'est toute l'œuvre qui bénéficie de cette diversité technique. Il n'y a pas un moment de répit, pas une seconde de flottement. On en viendrait presque à deviner la touche Kohlekeller Studio (mixage, mastering, prises de batterie) / Marc de RECUEIL MORBIDE (prises guitares, basse et chant), tant l'opacité qui se dégage de Résilience est typique de ces deux paramètres techniques. Encore un peu et ce sont les portes du Hertz Studio qui se rouvriront à eux. Pour finir, deux détails qui me semblent importantissimes. Premièrement, BLAME s'est payé le luxe d'une piste instrumentale en bout de course (l'éponyme) et croyez-moi, c'est du caviar à la louche. Deuxièmement, toutes les paroles de ce disque sont en français, ce qui accouche sur deux nouveaux faits essentiels et instructifs. Premièrement, Jean, en plus d'être un chanteur talentueux, est une fine plume. Deuxièmement, on peut faire du Metal et écrire ses textes en français. L'excuse de l'anglais qui passe mieux à l'oral et tutti quanti, tu peux la raconter à ta grand-mère.
Bien au-delà de toute cette chronique, s'il fallait retenir une chose, une seule de ce premier effort, j'espère que nos pensées convergeraient vers la même conclusion. BLAME, formation vosgienne discrète de son état vient de rompre un silence de six ans pour un résultat à la hauteur de ce qui se fait de mieux au cœur de la sphère française. Résilience est un vrai bon moment de Metal, composé et joué avec les tripes, avec une pointe de poésie macabre en surbrillance. C'est un fantôme, une présence qui se manifeste avec fracas et du haut de leur petite expérience, ces messieurs ont déjà su se forger une identité ectoplasmique. Leurs semblables auront au moins une bonne raison d'être envieux.
Ajouté : Mardi 11 Mars 2014 Chroniqueur : Stef. Score :     Lien en relation: Blame Website Hits: 9700
|