# 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 SABBATH (uk) - Mob Rules (1981)
Label : Vertigo
Sortie du Scud : 4 novembre 1981
Pays : Angleterre
Genre : Heavy Metal
Type : Album
Playtime : 9 Titres - 40 Mins
J'ai toujours un sourire intérieur lorsqu'un musicien cite BLACK SABBATH comme source d'inspiration. Car s'il est une formation dont la musique a énormément évolué au fil des périodes c'est bien celle-ci. Il n'y a pas grand chose à voir entre les albums enregistrés avec Ozzy Osbourne et ceux interprétés par Ronnie James Dio. Et la différence n'est pas uniquement due au chant. Les disques que le Sab a enregistré avec Dio proposent une expérience plus mélodique, plus grandiose, moins sombre que les premiers efforts des brummies. Si les premiers albums ont inspiré le Doom Metal, on peut avancer que Heaven and Hell et Mob Rules jettent les bases du Power Metal. Heaven and Hell a été composé et enregistré par un groupe en reconstruction. Le Sab sortait d'une période difficile avec des albums mal accueillis par le public, des tournées laborieuses, une équipe fatiguée, tendue, assaillie par le doute sur l'avenir du groupe. Si le renvoi d'Ozzy n'a pas ébranlé la détermination de Tony Iommi, rasséréné par l'arrivée de Ronnie Dio au chant, la cohésion du groupe était chancelante. Heureusement, le succès rencontré par Heaven and Hell et la tournée promotionnelle éponyme a remis le Sab d'aplomb. A la veille d'enregistrer son dixième album, BLACK SABBATH dispose d'un line-up stabilisé et soudé : Ronnie James Dio au chant, Tony Iommi à la guitare, Geezer Deezer à la basse, Vinnie Appice à la batterie et Geof Nichols aux claviers. Une première version du disque est enregistrée sur du matériel vintage dans la résidence de John Lennon mais ce master ne convient pas à Martin Birch qui fait réenregistrer le groupe au studio Record Plant de Los Angeles durant l'été 1981.
Mob Rules est taillé dans le marbre qui fait les grands disques. On a beau l'écouter encore et encore, difficile de lui trouver un défaut. Ce dixième opus de BLACK SABBATH reprend les recettes développées avec Heaven and Hell et les pousse encore plus loin. Les musiciens offrent une prestation de haut niveau, où la virtuosité du chant de Dio est servie par une section rythmique de haut vol, des riffs parmi les plus inspirés de la discographie du SAB et la densité supplémentaire apportée par les claviers, utilisés pour combler les vides en enrichissant considérablement l'aspect majestueux et étrange des compositions. La construction de la tracklist est cohérente et variée. Tony Iommi a toujours apprécié le mélange des ambiances, utilisant les morceaux plus légers pour souligner la lourdeur de ses pièces maîtresse. Des hymnes imparables et des morceaux épiques alternent avec des pièces plus courte et rentre dedans. C'est la le trait de génie du disque : ne pas chercher à assommer sous les décibels et éviter l'indigestion de gros morceaux. Privilégier l'alternance des genres et des durées. Construits selon le même schéma narratif : une intro acoustique et posée débouchant sur une composition lourde, agressive et grandiose, les deux pièces maîtresses de la tracklist, "Sign of The Southern Cross" et "Falling of the Edge of the World" sont encadrées par des chansons plus faciles d'accès et directes comme le très catchy "Turn Up The Night", l'enragé "Mob Rules", le puissant "Voodoo" et les plus mineurs "Country Girl" et Slipping Away". Le Sab renoue aussi avec la traditionnelle piste instrumentale étrange, "E5150" (la traduction en numérotation arabe du mot EVIL écrit en chiffres romains) et ses sonorités venues d'une autre planète. Enfin, l'album s'achève sur l'une des plus magnifiques power ballades de l'histoire du Metal, "Over and Over" et son final en apothéose.
Mob Rules est un peu la consécration de la collaboration de Dio avec BLACK SABBATH. On sent le chanteur bien plus en confiance que sur Heaven and Hell. Son influence se ressent bien au-delà du chant et des lyrics. Certains morceaux annoncent presque ce que Dio fera bientôt avec son propre groupe ("Sleeping Away", "Country girl"). Malheureusement, le torchon brûle déjà entre les américains (Dio et Vinnie Appice) et les anglais (Tony et Geezer). Divergences d'approches, divergences de caractères, le flegme britannique ne faisant pas toujours bon ménage avec l'expansivité superficielle des américains, luttes de pouvoir entre le chanteur et le guitariste. Ces tensions sont accentuées par le souhait exprimé par Dio de monter un side project solo. Finalement, durant le mastering de l'album Live Evil, les tensions atteignent leur paroxysme et Tony et Geezer finissent par virer les deux américains accusés par l'ingé son de trafiquer les bandes chaque soir. La brouille, qui durera presque dix ans, met un terme brutal au problème. Après deux ans de stabilité, le Sab se retrouve une nouvelle fois plongé dans le chaos.
Ajouté : Samedi 09 Avril 2016 Chroniqueur : Rivax Score : Lien en relation: Black Sabbath Website Hits: 5230
|