# 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
}
UNDERLING (usa) - Bloodworship (2015)

Label : Auto-Production
Sortie du Scud : 5 octobre 2015
Pays : Etats-Unis
Genre : Heavy Atmospheric Black Metal
Type : Album
Playtime : 8 Titres - 42 Mins
Je parlais il y a peu des possibilités d'élargissement et de mutation du BM, et j'en trouvais des exemples dans l'actualité récente.
Je me déclarais satisfait du glissement progressif et des ouvertures multiples du genre, et une nouvelle pierre vient de s'ajouter à l'édifice de ma confiance en la sortie du premier longue durée du projet Californien UNDERLING.
Formé en 2011 par la section rythmique croisée de FALLUJAH (Robert Morey, basse), et BATTLECROSS/ARKAIK (Alex Bent, batterie), épaulés par Antoni Palermo (chant), Jacob Zacharia/Luke Farmilio (guitares), ce side pas si project que ça n'avait jusqu'à présent propagé ses idées que par l'intermédiaire de compilations et de deux EP (Crows et Breathe Deeply), et avait éveillé l'intérêt de l'underground par ses prises de position libertaires et à la croisée des chemins.
Bloodworship vient entériner ce constat de fort belle manière, et si le quintette use toujours des bases du BM pour appuyer ses idées, ses inclinaisons clairement Post et Sludge l'agrémentent d'une couche opaque augmentant de fait sa puissance de frappe.
On aurait pu légitimement penser que la musique serait influencée par le passé/background des deux illustres fondateurs, mais il n'en est rien. UNDERLING est une entité globale et non une simple digression pour amuser la galerie, et Bloodworship est là pour le prouver, puissamment d'ailleurs.
Sous une pochette une fois de plus superbe, vous découvrirez huit morceaux assez développés pour vous intriguer, et desquels émane un parfum étrange et indéfinissable.
Car si "Blackout" garde encore les stigmates d'un BM très abrasif et corrosif, ne vous laissez pas leurrer et basez vous plutôt sur ses interceptions Heavy qui le découpent en longueur, elles sont plus révélatrices de la marche à suivre.
On est même souvent très loin du courant nordique des 90's, et le groupe cite régulièrement toutes ses influences, du Heavy au Sludge en passant par le Darkcore malsain, et le Doom lointain.
Aussi surprenant que ça puisse paraître, même le Metalcore décapant est abordé, via l'intermède "Adore" qui le noie dans une boue BM épaisse et compacte, sans ménager une intro mélodique du plus bel effet. Mais après deux ou trois écoutes, l'éveil est brutal sur une composition déjà lâchée à la presse il y a quelques temps, le monolithe énorme "Downpour", qui pendant six longues minutes ne lâche pas des dents un Sludge/Doom écrasant et menaçant. La violence tapie s'écoule par vagues successives, qui refluent et confluent dans un ballet hypnotique, orchestré par une section rythmique au mimétisme des réflexes impressionnant. Cordes graves qui poussent les vagues, guitare stridente qui les reçoit en plein manche, et chant hurlé, avant que la tempête n'emballe la côté dans un déferlement de blasts digne d'un tsunami apocalyptique.
Dans un exact négatif climatique, "The Seventh Wall" distille des accords Post qui s'étirent le long d'un paysage très lumineux, même si de gros amas de nuages noirs viennent interrompre la quiétude en forme de concassages Death/Sludge. La contradiction entre des mélodies éthérées et d'un chant apaisé et ces fulgurances de haine provoque un électrochoc auditif qui a mi parcours est le signe indéniable d'un refus des conventions, et des restrictions créatives.
Et ça n'est certainement pas un hasard si ce morceau est immédiatement suivi par le très hermétique "Clawing At The Rot", au monochrome Post Black qui ondule au gré de contretemps très appuyés, avant de laisser une gigantesque grosse caisse prendre le relais. Quelques blasts soulignés de rais de guitare entièrement BM, histoire de citer l'héritage rythmique de Hellhammer de MAYHEM, et il devient alors très difficile de cerner les contours précis d'UNDERLING...
Et la tâche s'avère de plus en plus ardue au fur et à mesure que l'album progresse, même si les instants les plus courts et concis sont cachés près de son terme. "Stay" s'amuse par exemple d'un up tempo presque joyeux, tout en le lacérant régulièrement d'accélérations brutes et sans transition.
La basse tient une fois de plus un rôle majeur, et circule en bas de manche pour quelques boucles dynamisantes, rôle qu'elle conserve sur le long final "Becoming The Faintest Light" qui cette fois ci rompt complètement les ponts déjà construits.
Douceur harmonique, Post Rock évaporé et évanescent, notes distillées avec parcimonie pour une humeur nostalgique, c'est un virage en forme de demi tour qui s'achève dans un torrent de haine, histoire de laisser l'auditeur sur une sensation étrange de perdition musicale manifeste. Là où commencent les choses, elles ne s'achèvent et c'est un postulat qui sied à merveille aux californiens.
Oui, le BM a encore énormément de choses à dire, mais peut on encore au moins l'appeler comme ça ? Dans le cas précis de UNDERLING et Bloodworship, la réponse est claire et négative, puisqu'il n'est qu'une composante parmi tant d'autres.
Mais on ne peut nier l'envie de s'affranchir de codes trop figés, et ce premier album est un témoignage flagrant des velléités de liberté qui animent l'esprit de certains musiciens, fatigués de tourner en rond.
Mais ça n'est pas pour autant que leur démarche est limpide et linéaire, bien au contraire. Elle est juste instinctive, et espère provoquer en vous des réactions entières.
Ajouté : Samedi 22 Octobre 2016 Chroniqueur : Mortne2001 Score :     Lien en relation: Underling Website Hits: 8050
|