# 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
}
AVANTASIA (de) - The Scarecrow (2008)
Label : Nuclear Blast Records
Sortie du Scud : 25 janvier 2008
Pays : Allemagne
Genre : Heavy Metal
Type : Album
Playtime : 11 Titres - 63 Mins
Si l’on voulait vraiment être de mauvaise foi, on maudirait ce petit salopiaud de Tobias Sammet et sa foutue maison de disque, qui nous ont pondu le même refrain sur chaque chanson de ce nouvel album d’AVANTASIA : « you’re listening the new AVANTASIA album, The Scarecrow » ! Tout ça pour vous dire qu’il est très difficile de chroniquer un album avec ces « voices over » de merde, mais puisqu’on l’aime bien, notre Tobi, on va le faire quand même.
The Scarecrow, donc, est la nouvelle offrande d’AVANTASIA, projet solo mené par le leader d’EDGUY. Ne cherchez pas un quelconque rapport avec les deux épisodes précédents, il n’y en a pas. D’ailleurs, les éléments qui avaient fait la particularité – et le succès – du Metal Opera sont complètement absents : pas d’interludes orchestraux, pas de réelle trame scénaristique (il y aurait un concept … faudra m’expliquer), peu d’ambiances médiévales (à l’exception peut-être du titre éponyme). En fait Tobias a sûrement considéré que les chansons se suffisaient à elles-mêmes.
En ce sens, AVANTASIA semble constituer un bon prétexte pour s’évader d’EDGUY et s’acoquiner avec la crème du Metal, car la liste des invités s’apparente à une prestigieuse distribution hollywoodienne : les chanteurs Alice Cooper (Tobi en rêvait, Alice l’a fait !!!), Jorn Lande (ex-MASTERPLAN), Oliver Hartmann (ex-AT VANCE), Michael Kiske (ex-HELLOWEEN), Bob Catley (MAGNUM), Roy Khantalat (KAMELOT), ainsi qu’Amanda Somerville (qui participe aux albums de KAMELOT), le batteur Eric Singer (KISS), les guitaristes Rudolf Schenker (SCORPIONS), Kai Hansen et Henjo Richter (GAMMA RAY), Sascha Paeth (qui produit l’album) et le claviériste Miro. Ouf ! On imagine la taille du carnet d’adresse de Sammet, ça fait peur … (ou envie).
N’y allons pas par quatre chemins, quand on s’entoure de guests aussi remarquables, c’est qu’on a un but bien précis. Au hasard, Tobias, pour décrocher le Jackpot ? Dur dur de dissimuler que certains titres sont spécialement formatés radio : « The Toy Master » (incontestablement écrit pour Alice, le titre qu’on espérait depuis Trash et Hey Stoopid … Alice en rêvait, Tobi l’a fait !!!!), « Carry Me Over » (FM hyper accrocheur), et « Lost In Space » (rythmique très pop/rock genre « La Ballade de Jim » d’Alain Souchon … n’ayez pas peur, ce titre est quand même excellent et on retrouve lors du refrain le Tobi qu’on aime !).
Ces morceaux « étonnamment » accessibles traduisent de toutes façons une intention déjà soupçonnée sur le dernier EDGUY, Rocket Ride, fortement orienté Hard US / FM. Comment blâmer l’ami Sammet ? Après déjà six albums avec ses compères habituels, peut-être le garçon a-t-il le sentiment d’avoir tout dit, et préfère-t-il s’essayer à autre chose. Si la qualité est là, tant mieux, et ses nouvelles compos sont écrites avec le cœur, et pensées avec talent. « The Scarecrow », titre ultra-puissant aux sonorités celtiques, permet de mettre en valeur le grand Jorn Lande, admirateur de David Coverdale, et ô combien talentueux. « Shelter From The Rain », dans le plus pur esprit EDGUY, où Michael Kiske démontre une fois encore que non, il n’a pas complètement oublié le Heavy Metal. La belle ballade « What Kind Of Love », avec la voix douce d’Amanda Somerville (l’autre ballade, « Cry Just A Little », est plus pompeuse). Ou encore le VAN HALENesque « I Don’t Believe In Your Love », pas extraordinaire mais sublimé par les interventions d’Oliver Hartmann, qui s’affirme lui aussi en digne héritier du seigneur Coverdale !
The Scarecrow propose aussi du moins bon, à l’image des communs « Another Angel Down » ou « Devil In The Belfry ». Pas grave, le plaisir de retrouver Tobias et ses copains efface vite ces petites déceptions. Le reste de l’album est, comme d’habitude, excellent et marqué de la patte Sammet (y compris sur les « tubes »). Car, pour ceux qui en doutaient encore, ce compositeur affirmé est devenu en l’espace de 10 ans l’une des figures incontournables du Metal. Pour éviter de passer à côté du phénomène Sammet, il y a The Scarecrow. Et vivement le prochain EDGUY.
Discographie complète de AVANTASIA :
The Metal Opera (Album - 2001),
The Metal Ppera part II (Album - 2002),
The Scarecrow (Album - 2008),
The Wicked Symphony (Album - 2010),
Angel Of Babylon (Album - 2010),
Angel Of Babylon (Album - 2013),
Angel Of Babylon (Album - 2016)
Ajouté : Mardi 08 Janvier 2008 Chroniqueur : NicoTheSpur Score : Lien en relation: Avantasia Website Hits: 14789
|