# 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
}
BLACK LABEL SOCIETY (usa) - Catacombs of the Black Vatican (2014)
Label : E1 Entertainment
Sortie du Scud : 8 avril 2014
Pays : Etats-Unis
Genre : Heavy Metal
Type : Album
Playtime : 11 Titres - 44 Mins
"Tu as produit et mixé Catacombs of the Black Vatican dans ton propre studio, que tu as d'ailleurs nommé The Black Vatican. Oui, avant j'avais pour habitude de l'appeler The Bunker, mais Ozzy a fait construire son propre studio sous sa maison et de ce fait, l'a lui aussi appelé le Bunker. Du coup j'ai décidé de changer de nom" (Extrait de l'interview de Zakk Wilde dans Rock Hard de mars 2014).
Cet extrait de l'interview de Zakk Wilde dans le numéro de Rock Hard de mars 2014 en révèle autant sur la manière de travailler du leader de BLACK LABEL SOCIETY que sur ses rapports, aussi divers d'enrichissants, avec son mentor et ancien employeur, Ozzy Osbourne.
L'album a été composé, produit et masterisé par Zakk Wilde lui-même. Comme sur tous les méfaits studio, c'est également Zakk qui interprète toutes les parties de guitare. Le guitariste Nick Catanese qui accompagnait le groupe en live depuis sa fondation était persona non grata en studio. Il a d'ailleurs quitté le gang la même année, remplacé par Dario Lorina. Côté batterie également, il y a du neuf puisque trois musiciens se sont succédés derrière les fûts entre Order Of The Black et Catacombs Of The Black Vatican. C'est finalement Chad Szeliga qui bat la mesure sur cet opus. Enfin, à la basse, on retrouve John De Servio qui oeuvre avec le combo depuis 2006.
Comme toujours avec BLACK LABEL SOCIETY, le titre de l'album n'a pas grand chose à voir avec son contenu, c'est juste un titre cool. Pour le reste, c'est un dique de BLS très classique dans sa construction. Il s'ouvre sur une attaque franche et virile avec deux titres mastodonte, "Fiedls Of Unforgiveness" et "My Dying Time". Riff mastoc, rythmique punchy, chant inspiré, pinch harmonique et soli de psychopathe. Avec sa rythmique ronronnante comme un moteur de Harley Davidson, "Fields of Unforgivness" pourrait être la version Heavy Metal du "Born to Be Wild" de STEPPENWOLF. On se verrait bien l'écouter en pilotant sa grosse cylindrée dans le soleil couchant, cheveux au vent. Changement de braquet avec "My Dying Time", la grosse claque dans la tête qui remet les idées en place et rappelle dans quelle genre de saloon on vient de mettre les pieds. Le riff qui gratte, la rythmique super grasse et la voix de stentor de Mister Zakk. C'est du lourd et du parfaitement maîtrisé, jusqu'au beau petit solo pour faire le pont à la fin. La suite ressemble à tous les disques de BLS. Une alternance de ballades et de morceaux Heavy dans le style habituel de BLS. Zakk Wilde a le chic pour construire des chansons bien gaulées avec ce qu'il faut de miel et ce qu'il faut de baffes. Ainsi la ballade "Angel Of Mercy" qui porte en son sein l'un des plus beaux solo de la galette (qui en compte pourtant un nombre honorable). Puisqu'on est au rayon ballades, le sujet qui fâche un peu, c'est que l'album en compte tout de même trois. Sur 11 pistes, ça fait beaucoup. Certes le gars sait y faire dans ce genre et chacune apporte quelque chose, "Scars" et son petit côté Southern Rock 70's, "Shades of Grey" interprétée au piano... Mais quelles que soient les qualités de ces morceaux, c'est quand même sur les parties les plus Heavy qu'on juge la bête. Et même si l'album réserve son lot de bon moment, les deux meilleurs morceaux sont sans conteste ceux qui ouvrent Catacombs Of The Black Vatican. Pour le reste Zakk fait le job mais ça sent un peu le remplissage.
Quatorze ans après Stronger Than Death, BLACK LABEL SOCIETY est toujours debout, les albums se suivent, se ressemblent, mais proposent toujours ce cocktail dynamique à base de gros morceaux Heavy et de belles ballades. Catacombs of the Black Vatican n'est pas un disque de rupture. On est en terrain connu. C'est comme les rediffusions des western de Sergio Leone. On sait comment ça va se passer mais on les regarde quand même parce qu'on sait que ça sera bien.
Ajouté : Mercredi 11 Novembre 2015 Chroniqueur : Rivax Score : Lien en relation: Black Label Society Website Hits: 5982
|