# 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
}
EDGUY (de) - Tinnitus Sanctus (2008)
Label : Nuclear Blast / Pias
Sortie du Scud : 14 novembre 2008
Pays : Allemagne
Genre : Hard Rock mélodique
Type : Album
Playtime : 11 Titres - 54 Mins
Qu’on se le dise, une bonne fois pour toutes, le EDGUY de Vain Glory Opera, Theater Of Salvation et Mandrake est mort. Mort et enterré.
Cela dit, pour ceux qui posent une oreille sur l’excellent « Dragonfly », le doute est permis. Cet excellent titre, en dépit de sonorités très surprenantes sur les couplets, fait office de magnifique mid-tempo avec des chœurs grandioses, à l’instar d’un « Out Of Control ».
Au milieu des 11 autres titres de Tinnitus Sanctus, « Dragonfly » sera une bien mince consolation. Pour le reste, et c’est flagrant au niveau guitares et arrangements, EDGUY s’apparente de moins en moins à un groupe de Heavy Metal. Hard Rock, Big Rock, appelez ça comme vous voulez, mais une chose est sure : Tobias Sammet a définitivement tourné le dos au style qui l’a révélé, et donc au public qui va avec.
Voilà un garçon qui compose 95 % des titres d’EDGUY, sans parler des trois volets d’AVANTASIA, et qui finit certainement par perdre un peu de lucidité à force de vouloir tout contrôler. Je serais prêt à parier que Bat Out Of Hell II, Slave To The Grind, Appetite For Destruction, Trash et Van Halen I constituent la short-list de ses disques de chevet. De là à dire que Sammet donne dans le Rock accessible un poil commercial, il n’y a qu’un pas … mais je vous laisserai juger par vous-même.
A la défense de nos cinq teutons, il faut admettre qu’EDGUY assume totalement ce nouveau costume, sur la dynamique (Tobi aurait dit bombastic !!) « Dead Or Rock », à mi-chemin entre VAN HALEN et les GUNS. Mais sur ce titre là seulement.
Ce qui choque sur Tinnitus Sanctus, c’est cette incapacité à surprendre, cette désagréable impression que Sammet a activé le pilotage automatique. Oui, qu’on se le dise, EDGUY a sorti ses titres du congélateur et nous sert du réchauffé. Du déjà entendu, et pas forcément le meilleur en plus.
Non seulement cet album trahit un groupe qui mise tout sur le côté paillettes et gonzesses, mais qui en plus se fout de notre gueule du point de vue de la qualité. A l’inverse de ses disques précédents, aucun refrain n’est marquant, tout est prévisible, répétitif et peu inspiré. Ce qui représentait une marque de fabrique jusqu’à Hellfire Club devient aujourd’hui un véritable point faible … faible, et lourdingue.
Il ne suffit pas de nous sortir l’orgue Hammond à la DEEP PURPLE (« Ministry Of Saints », « Speedhoven »), des voix à la Alice Cooper (« Wake Up Dreaming Black »), un mid-tempo groovy à la SKID ROW (« Sex Fire Religion ») ou des rythmiques à la WHITESNAKE période 1987 (« Thorn Without A Rose ») pour épater la galerie. Ça pourra peut-être attirer de la pétasse ou du fan américain, mais avec nous ça ne prend pas cher Tobi … Et à bien y réfléchir, ce changement de cap peu inspiré était déjà perceptible sur Rocket Ride.
Je vous épargne en plus des explications interminables sur LE titre fourre-tout d’EDGUY, à savoir « The Pride Of Creation », qui mélange du Happy Metal, du Speed, du MEAT LOAF (les voix qui font « ouh ouh ouuuuh »), du QUEEN, le tout en 5 minutes chrono … Sur le coup, ce surgelé là a eu du mal à passer et votre serviteur a bien failli y laisser son quatre-heures. De même, évitons de nous étendre sur la re-pompe de « The Matrix » (« Nine Lives » et ses claviers très 80’s), ou sur l’éternel titre bonus qui casse plus les couilles qu’autre chose (« Aren’t You A Little Pervert, Too ? »).
La démarche d’EDGUY pouvait paraître « fun » au départ. Au final, Tinnitus Sanctus sonne comme le pet foireux d’un groupe prétentieux. Mais comme on le disait plus haut, peut-être manque-t-il à Tobias Sammet un peu de recul par rapport à l’orientation qu’emprunte le quintet germanique. Besoin d’un vrai producteur ? D’espacer un peu plus les réalisations ?
Je n’ai pas la solution et ce n’est pas mon problème.
Je suis déçu et je pense que je ne serai pas le seul !
Ajouté : Mercredi 05 Novembre 2008 Chroniqueur : NicoTheSpur Score : Lien en relation: Edguy Website Hits: 9887
|