# 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
}
TRIBE (uk) - Pray For Calm... Need The Chaos (2009)

Label : SAOL (Service for Artist Owned Labels) / H'Art
Sortie du Scud : 15 mai 2009
Pays : Angleterre
Genre : Heavy Metal
Type : Album
Playtime : 13 Titres - 54 Mins
Dans le genre je me tire une balle dans le pied sans faire exprès, TRIBE est un spécialiste. Leur musique n’étant déjà pas suffisamment percutante pour passionner la foule, il fallait en plus qu’ils s’attirent l’aversion des lépidophobes, grâce à une pochette qui m’inspire un sérieux dégout de la bestiole. Formé aux alentours de l’année 2006 de l’autre côté de la Manche, une terre qui a vu naître les plus grands prodiges du Heavy Metal (JUDAS PRIEST, BLACK SABBATH, IRON MAIDEN, SAXON, MOTÖRHEAD), le quatuor a fait le choix de rendre un hommage étincelant à l’héritage laissé par ses ancêtres, quitte à passer qualitativement pour la formation de seconde zone qu’elle est. Pray For Calm… Need The Chaos est donc ce premier jet qui ne nous fera pas attendre avec beaucoup d’impatience le deuxième, la faute à un Heavy Metal terriblement banal et totalement dépourvu d’accroche.
Je crois qu’il vaut mieux que je sois franc avec vous. Si vous voulez une bonne dose de Heavy Metal, repassez-vous vos classiques en boucle mais surtout, oubliez TRIBE qui est arrivé après la guerre et qui n’a plus rien d’intéressant à écrire dans un livre d’or saturé de signatures. Ce que je veux dire, c’est que voilà, tout le monde sur cette planète sait à peu près à quoi ressemble le Heavy Metal et si jamais un ignare traine dans les parages, il ne faut surtout pas lui diffuser cet album pour lui présenter ce style musical. Pas parce que ces Anglais s’y prennent comme des pieds ou qu’ils sont techniquement limités, mais parce le côté grippant et rugueux d’un bon Heavy traditionnel est juste passé aux oubliettes. Hésitant dans ses structures, trop tendre dans le riff, Pray For Calm… Need The Chaos diffuse dans les oreilles de ses auditeurs un Metal banal et qui devient même cliché quand la voix de Paul Kettley perd ce qui lui reste de virilité ou que les solos de Nick Dunne tombent dans la parodie. Le punch qu’on adore retrouver dans le Heavy de la vieille école est purement mis de côté au profit d’une démonstration de technicité malvenue et d’une musicalité très théâtrale, comme le démontre la surjouée « Ghost Ballet ». Pourtant, TRIBE est un groupe qui dispose de beaucoup de talent dans son pantalon et qui l’utilise parfois. Je ne comprends pas très bien pourquoi, quand on est capable de sortir une compo tout bonnement énorme comme « Absolution » qui brille par sa simplicité, on a besoin d’aller écrire des balades au piano qui mettent la larme à l’œil comme « Bad Dreams » ou d’aller chercher la complexité d’un Heavy qui tente à varier ses rythmes, mais qui le fait affreusement mal (« Havels Hurricane »). Voilà donc la cruelle fatalité et le triste enseignement que nous délivre ce premier album. TRIBE, une formation pleine de bonne volonté, parfois disposée à sortir de son chapeau un coup de génie, mais globalement davantage intéressée par son Heavy pépère, loin, très loin des prises de risque inconsidérées à la Felix Baumgartner. Ce ne sont surement pas ces mecs qui vont franchir le mur du son avec leur Metal pantouflard et confortable. D’ailleurs, quelques litres de la marque ambassadrice de l’évènement Stratos pourraient finalement être la solution à ce problème de dynamisme et d’articulations rouillées.
Emballé c’est pesé. TRIBE n’aura été que de passage au cœur d’une soirée qui m’aura surtout permis de me refaire un petit marathon Heavy en me repassant les classiques. C'est-à-dire que la musique de nos amis anglais est peut-être sympathique, mais généralement, on dit d’une personne qu’elle est sympathique uniquement pour ne pas avoir à dire qu’elle est déficiente. Et déficient, Pray For Calm… Need The Chaos l’est. Ou peut-être est-ce simplement de la fainéantise. Va savoir…
Ajouté : Mercredi 24 Octobre 2012 Chroniqueur : Stef. Score :    Lien en relation: Tribe Website Hits: 9364
|