# 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
}
TOMBS (usa) - Savage Gold (2014)
Label : Relapse Records
Sortie du Scud : 10 juin 2014
Pays : Etats-unis
Genre : Post Metal Experimental
Type : Album
Playtime : 10 Titres - 57 Mins
En 2009, j'avais été conquis par l'album d'un groupe US quasiment inconnu à l'époque, TOMBS. Le plus ou moins projet unique de Mike Hill m'avait séduit avec les intonations sombres de son superbement déprimant Winter Hours, et c'est avec joie que je le retrouve aujourd'hui, entouré d'un nouveau line-up pour son nouvel effort Savage Gold.
Si j'avais passé sous silence il y a trois ans le superbe Path Of Totality, ça n'était ni par déception, ni par manque d'inspiration, mais par manque de temps. Cet album représentait pourtant un énorme pas en avant pour le groupe, qui affinait sa musique en la débarrassant de ses automatismes de jeunesse. Et si aujourd'hui je prends le clavier pour parler de Savage Gold, c'est que ce processus a pris de l'ampleur et a quasiment atteint une indéniable perfection.
Resituons l'histoire. Si TOMBS aime à se classer lui même dans le créneau flou de l'expérimental, c'est par choix et non par facilité. Qui est d'ailleurs un mot que Mike Hill à depuis longtemps banni de son vocabulaire musical. Car sa musique est d'une approche indéfinissable, piochant ça et là des éléments d'influence pour les assimiler et les régurgiter en une entité personnelle. La démarche est de tenter, d'associer des sonorités contraires ou complémentaires, pour aboutir à quelque chose de neuf. Quoi de plus expérimental en effet, dans le sens le plus littéral du terme ?
On trouve de tout chez TOMBS, mais surtout pas n'importe quoi. De la violence brute, aux relents Black, des dissonances et des répétitions qui tendent autant vers le Post Rock que vers l'industriel, des mélodies tendues qui rappellent noblement le faux Néo des DEFTONES, des pesanteurs en boucle nous ramenant vers le Sludge, en gros, l'abécédaire du Metal extrême nouvelle génération, dont les cartes sont redistribuées dans un ordre savamment étudié.
Si les tics de début de carrière ont disparu au profit d'une composition plus aérée, ça n'est pas pour autant que le caractère compact de la musique à cédé la place à la versatilité. Depuis Path, Carson Daniel James a cédé sa place à Ben Brand, qui associé au survivant Andrew Hernandez II forment une rythmique énorme, s'adaptant sans encombre à chaque nuance adoptée, aussi à l'aise dans les rafales de blast beats que dans les marches martiales massives. L'adjonction d'un second guitariste en renfort permet de varier les attaques, d'épaissir les riffs tout en autorisant les variations mélodiques en appuyant les harmonies de contrepoints discordants.
Pour vous rendre compte de cette évolution, il faudra appréhender l'album dans son ensemble. Prises à la suite, les pistes s'enchaînent en une suite logique et captivante, mais elles se révèlent aussi dans leur unicité, proposant chacune une atmosphère bien particulière sans que l'homogénéité de l'ensemble n'en souffre.
Ainsi, si l'entame "Thanatos" fait la part belle à la vitesse, accentuant la violence de son rythme par une utilisation métronomique d'une crash acide, "Severed Lives" se cantonne pieds fermes dans une boue lancinante autrefois foulée par NEUROSIS et ISIS.
Pile au centre de l'album se détache du lot le monumental cri "Deathripper", qui après cinq minutes de lancinance étouffante explose dans un geyser de fureur, avec un battement cardiaque au bord de l'implosion, personnifié par une double grosse caisse lente et régulière, et une terreur nocturne amplifiée par des accords de guitare répétitifs à outrance jouant sur l'absence maladive d'harmonie. Le chant en adéquation tout du long, passe par de longues incantations scandées d'une voix éteinte à une rage toute en retenue faisant vraiment froid dans le dos.
Si le diptyque "Ashes"/"Legacy" impressionne par sa maîtrise de la brutalité la plus totale, nous replongeant dans les plus grandes lignes du livre du Metal noir, à force d'insister sur la violence la plus pure, le long final oppressant "Spiral" justifie son intitulé par son insistance à ressusciter l'ambiance poisseuse qui baignait les premiers albums de Black nordiques des années 90, avant d'écraser le propos et de s'évanouir dans un long fading d'une seule minute pourtant interminable. Il faut dire que la production du mentor et icône Erik Rutan (HATE ETERNAL, RIPPING CORPSE, MORBID ANGEL) est en parfaite osmose avec la vision musicale proposée, épurant les guitares, asséchant la batterie pour accentuer son côté organique, et maltraitant la basse pour en extraire les sons les plus concis.
Je n'aborderai pas tous les morceaux, qui pourtant mériteraient tous une analyse en profondeur, et me contenterai de ceux déjà cités pour prouver que Savage Gold est une nouvelle étape sur la longue route de TOMBS, le menant de plus en plus loin, et l'amenant toujours plus près de la perfection dans son style. Certes, le discours est extrême, certes les répétitions (voulues) pourront peut être vous rebuter, mais à l'instar des meilleures formations, Mike et TOMBS utilisent la violence sous toutes ses formes non pour en démontrer la puissance sans nuance, mais pour exprimer un point de vue musical personnel qui ne souffre d'aucune critique. Là où d'autres se seraient perdus sur le chemin de l'emprunt multiple, niant leur propre identité, TOMBS forge la sienne à force de pluralité, et serpente constamment entre l'affolement rythmique et la pesanteur extrême, sans négliger des sentiments comme la nostalgie, la tristesse, émotions soulignées par des harmonies décharnées.
Expérimental, TOMBS l'est assurément. Mais par son unicité, non par son inconstance.
Ajouté : Lundi 28 Juillet 2014 Chroniqueur : Mortne2001 Score : Lien en relation: Tombs Website Hits: 11036
|