# 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
}
KARMA TO BURN (usa) - Arch Stanton (2014)
Label : Deepdive Records
Sortie du Scud : 15 août 2014
Pays : Etats-Unis
Genre : Stoner
Type : Album
Playtime : 8 Titres - 37 Mins
Il faut avoir la pugnacité d'un chasseur pisteur pour retrouver la trace d'un William Mecum, ours solitaire et renfrogné du combo KARMA TO BURN, ou K2B pour les intimes, initiés au braconnage. Sous un soleil de plomb, soulevant des nuages de poussières, on désespérait de remettre la main sur ce compère passé maître en Stoner.
La dernière fois, le 22 juin 2013, nos valeureux chiens renifleurs l'avaient localisé du côté de "the Valley" sur les terres de Clisson.
Une interview était prévue avec William Mecum dans l'après-midi. On a eu droit à une belle partie de cache-cache malgré la bonne volonté du manager du groupe. William multipliait les obstacles. Vingt minutes avant de monter sur scène, on le retrouve en compagnie du batteur, la set-list non encore arrêtée, et de son aveu même, ennuyé par nos sollicitations. On a compris pourquoi ! Certainement pas envie de s'expliquer sur leur prestation en binôme, l'absence inexpliquée de Rich Mullins. C'est vrai que du côté de K2B, ça sentait un peu le roussi. Fin 2011, et début 2012 de nombreux concerts avaient été annulés. Le batteur Rob Oswald, de son côté, prenait la tangente. Rich Mullins, avec sa forme longiligne, et sa casquette vissée sur la tête nous manque déjà ! Le visuel du combo sur scène s'en trouve altéré... avec du recul, on apprécie d'autant plus le concert à Paris, au Glazart, le 13/09/2012 avec les texans d'HONKY.
Maintenant que le risque d'un split est écarté, on peut s'intéresser au successeur de l'album V sorti en 2011, un album au son assez homogène, manquant de relief, avec un mixage mettant en avant la section rythmique. En 2011, K2B poursuivait l'intrusion du chant dans ses morceaux "The Cynics", "Jimmy D" et "Never Say Die" de SABBATH. Initiative déjà amorcée en 2010 avec l'album Appalachian Incantation et la complicité de John Garcia de KYUSS.
En ce mois d'août 2014, on dresse l'oreille, on entend l'écho des clairons qui sonnent la charge. Nous sommes en pleine guerre de Sécession et K2B nous envoie sa nouvelle salve Arch Stanton. 100% instrumental. Le combo renaît de ses cendres, et s'échappe de la chape de plomb d'un sarcophage. La pochette plante le décor, scène de bataille, combat corps à corps, que pourfend Baphomet en cavalier sanguinaire, décapitant à coups de sabre, telle la Mort fauchant un champ de bataille. Un visuel que j'ai toujours trouvé plus proche d'un SATYRICON que d'un groupe de Stoner.
Le passage au FABA Studio en Suisse a été salutaire. Le relief et l'équilibre guitare/section rythmique qui faisaient défaut sur l'album V sont aujourd'hui de mise pour un confort d'écoute indéniable et une immersion largement facilitée.
K2B s'inscrit toujours dans son côté réac, il suffit de constater le format de l'album, 37 minutes, celui des 2 faces d'un vinyl, quant au son, il est fidèle à l'analogique.
Le 1er titre "Fifty-Seven" est pêchu à souhait avec un jeu de guitare incisif, la charge est sonnée. "Fifty-Six" prend le relais avec une rythmique hachée, K2B taille dans le vif. Avec "Fifty-Three", et "Fifty-Five", on retrouve les morceaux groovy originels de K2B, conventionnels, dans la veine des compos d'antan. "Forty-Four" nous balance son ambiance poisseuse du Bayou, nous assène un bon gros riff, avec parfois, pour William, une cavalcade sur le manche. Evan Devine aux drums se révèle efficace, la succession n'était pas évidente pourtant après ce sieur, parfois déjanté, de Rob Oswald.
Avec "Twenty-Three", K2B se livre à un travail de réhabilitation en réengistrant ce morceau, bien dépoussiéré. Cette démarche avait déjà été faite en 2009 avec les titres "20" et "30" que l'on pouvait découvrir avec l'album Applachian Incantation.
"Fifty-Eight" démontre à nouveau que les arrangements de cet album ont été particulièrement soignés, succession de breaks, morceau à facettes. Cet effort dans les compos et l'écriture est louable quand on sait qu'il a été enfanté dans une période de fortes turbulences pour le combo et de questionnement sur la viabilité de celui-ci.
On finit avec "Fifty-Nine", clin d'œil à Enrio Morricone, et à Sergio Leone avec son film Le Bon, La Brute et le Truand en pleine guerre de Sécession. L'ombre des personnages Tuco, Blondin, et Sentenza plane, regards plissés, menaçants... regard qui tue.
On en bouffe de la poussière ! impression d'avoir des semelles de plomb, d'avoir une crasse tenace au fil des morceaux, mais je peux vous dire qu'avec cet album et dans ce coffre de pièces d'or pris aux Confédérés, on a trouvé à Arch Stanton notre trésor estampillé Stoner au risque de vous brûler les doigts et de vous ensabler les tympans.
Ajouté : Lundi 18 Août 2014 Chroniqueur : Le Patriarche Score : Lien en relation: Karma To Burn Website Hits: 7906
|