# 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
}
STONE SOUR (usa) - House Of Gold & Bones Part 2 (2013)

Label : Roadrunner Records
Sortie du Scud : 9 avril 2013
Pays : Etats-Unis
Genre : Metal alternatif
Type : Album
Playtime : 12 Titres - 51 Mins
C’est l’heure les enfants. L’heure de savoir si STONE SOUR va entrer dans la postérité. Il faut quand même dire qu’avec la première partie du projet House Of Gold & Bones, parue en octobre de l’année 2012, les choses étaient positivement engagées. L’inévitable Corey Taylor et ses petits copains avaient fait le choix de s’impliquer dans une création moderne, subtile, pas forcément très méchante, mais suffisamment brossée et sincère pour que la ménagère s’émeuve. Six mois après, la conclusion de ce concept-album est finalement publiée, entrainant avec elle son lot de révélations, enseignements, hypothèses, déductions, déceptions parfois. D’ailleurs, la proximité entre ces deux sorties trahit une première supputation. Ce second acte est une machine savamment dessinée alors même que la sortie du premier était encore dans les cartons. Vous ne serez donc pas surpris d’apprendre que les 23 morceaux qui composent ce diptyque ont été enregistrés simultanément, entre le 27 mars et le 19 juin 2012 à une cinquantaine de bornes de Des Moines, là où tout à commencé il y a 21 ans.
En dépit de la numérotation officielle des compositions de cet album, qui va de 12 à 23 pour prendre la suite de la tracklist d’House Of Gold & Bones, Part 1 (qui s’était arrêtée à 11) il n’y a pas de continuité évidente entre les deux œuvres. Plus surprenant encore ; si vous considérez la deuxième partie comme un full-lenght totalement indépendant, sans connexion avec la première, c’est tout à fait normal. STONE SOUR s’est échiné à écrire un disque plus technique, plus thématique, plus profond et un peu moins consensuel. Pourtant, à l’instar du premier chapitre (les périphrases commencent à faire défaut…), on retrouve sans déplaisir un panel d’émotions qui va au-delà de la simple appréciation. Tour à tour, ce volet suscite du désir, de la crainte, de l’engouement, de la nostalgie, de la peur et bien sûr, pas mal d’admiration. Parce que Corey Taylor est toujours ce diable de chanteur, capable de briser son timbre comme de le fluidifier. « Peckinpah » est surement la chanson la plus représentative de ce talent, puisqu’elle offre d’incroyables variations vocales au cœur des couplets et un refrain prenant. Alors oui, cet album est long au démarrage, notamment à cause d’une « Red City » franchement amorphe qui heureusement, se fait bousculer par la dynamique « Black John », ses accents Hard Rock, sa cadence militaire, puis par une « Sadist » assez fine, flirtant avec un lugubre masochisme. Néanmoins, plus cet opus déroule, plus j’ai l’impression que les individualités ont moins de caractère que celles du chapitre précédent. A l’endroit où House Of Gold & Bones, Part 1 faisait la différence avec des « Absolute Zero », « Tired », « Taciturn », « My Name Is Allen », la part 2 s’affiche sous l’égide de l’homogénéité. C’est un bloc, avec certes des passages plus furieux (« ‘82 ») et d’autres plus sereins (« Blue Smoke »), mais à part « Do Me A Favor » qui humilie ses concurrents parce que c’est the single (et qui au passage affiche une étrange ressemblance dans certaines tournures vocales avec « A Rumor Of Skin »), toutes les compositions tirent dans le même sens, sans se dédouaner du côté ouvertement easy-listening du projet.
Plus Heavy, plus sombre, moins en relief, moins mémorable aussi, House Of Gold & Bones, Part 2 est une suite que je trouve relativement inspirée mais qui a besoin d’être appréciée sur la durée, contrairement au précédent dont on pouvait savourer les moments forts à répétition sans qu’on perde pour autant le fil du CD. Il n’empêche, avec ce double album teinté de bravoure et nuancé de génie, STONE SOUR vient d’écrire une page importante pour le Metal moderne en termes de création, de concept. Ce dessein est la preuve que la musique, quand elle est composée sous la forme d’une œuvre complète, avec un début, une fin, peut aussi symboliser une vie humaine, qui a au final pour seule vocation d’être dignement vécue.
Ajouté : Mercredi 28 Août 2013 Chroniqueur : Stef. Score :     Lien en relation: Stone Sour Website Hits: 6638
|