# 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 Metal Opera part II (2002)

Label : AFM Records
Sortie du Scud : 2 septembre 2002
Pays : Allemagne
Genre : Power Metal symphonique
Type : Album
Playtime : 10 Titres - 58 Mins
Un an après le premier volume d’AVANTASIA, Tobias Sammet et sa troupe nous reviennent pour un second album naturellement intitulé The Metal Opera Part II. L’année précédente, AVANTASIA a fait sensation et EDGUY a atteint des sommets avec Mandrake. Alors le moins que l’on puisse dire, c’est que son charismatique et énergique leader, Tobias, a la bougeotte et se veut très prolifique. Et à tous ceux qui pourraient supposer une baisse de régime de la part de Tobi, The Metal Opera Part II est là pour démontrer le contraire …
Alors que des voix religieuses résonnent pendant une introduction évangélique, bientôt le recueillement fait place à une rythmique puissante, sept personnages à la voix d’or (mention spéciale encore à Oliver Hartmann et Michael Kiske, énormes, grandioses, magistraux), et enfin, c’est presque une habitude, un refrain inoubliable. Vous cherchiez l’hymne du Power Metal symphonique ? Ne cherchez plus, avec « The Seven Angels », vous y êtes. Puis, après un bref temps mort, le tempo évolue et l’hymne continue à n’en plus finir … « The Seven Angels » s’inscrit dans la pure tradition des titres épiques d’EDGUY (« Theater Of Salvation ») et du précédent album d’AVANTASIA (« The Sign Of The Cross »).
Pourtant, The Metal Opera Part II se veut moins symphonique, moins grandiloquent que son grand frère. Et pour cause, Sammet a souhaité se débarrasser des interludes qu’il jugeait encombrants pour être plus concis, estimant que les chansons se suffisaient à elles-mêmes. C’est son point de vue, quelque part AVANTASIA perd un peu de son charme médiéval. Même s’il est vrai que certaines chansons cartonnent (le mélodique « The Looking Glass », le Power « The Final Sacrifice », le fidèle « Chalice Of Agony »), quand d’autres, un ton en dessous, trahissent certaines influences trop évidentes et s’en remettent aux performances des acteurs (Michael Kiske arrache tout sur « No Return » et son break à la QUEEN).
Quel dommage aussi que Bob Catley (MAGNUM), nouveau venu dans l’aventure, ne soit identifiable que sur la ballade « In Quest For », morceau qui conviendrait à n’importe quelle comédie musicale française ou à un MEAT LOAF en sérieuse méforme… On pourrait regretter la même chose pour Rob Rock sur le rapide mais prévisible « Neverland », heureusement sauvé par un refrain dont Tobias a le secret. Et puis on a beau attendre la belle Sharon Den Adel, la ravissante hollandaise ne pointe le bout de son nez que sur le dernier morceau, l’enchanteur « Into The Unknown ». A noter qu’Eric Singer (ex-KISS) tient les baguettes en lieu et place d’Alex Holzwarth sur cette chanson seulement. Basé sur des chœurs majestueux et des passages plus calmes, « Into The Unknown » reprend les choses là où « The Seven Angels » les avait laissées …
Une belle façon de conclure la saga « Metal Opera », avec un disque plus direct, plus agressif que celui paru en 2001, mais tout à fait respectable, voire très bon. Si Sammet jure alors de ne plus refaire de disque avec AVANTASIA, le futur va nous vite nous prouver le contraire avec une toute nouvelle équipe, quelques années plus tard …
Tracklisting : 1 – The Seven Angels 2 – No Return 3 – The Looking Glass 4 – In Quest For 5 – The Final Sacrifice 6 – Neverland 7 – Anywhere 8 – Chalice Of Agony 9 – Memory 10 – Into The Unknown
Distribution :
Tobias Sammet (EDGUY), dans le rôle de Gabriel Laymann
Michael Kiske (ex-HELLOWEEN), dans le rôle de Lugaid Vandroiy
Kai Hansen (GAMMA RAY), dans le rôle de Regrin le Lutin
David DeFeis (VIRGIN STEELE), dans le rôle de Jakob le moine dominicain
Andre Matos (ex-ANGRA, SHAAMAN), dans le rôle de l’Elfe Elderane
Bob Catley (MAGNUM), l’Arbre du Savoir
Oliver Hartmann (AT VANCE), dans le rôle du Pape Clément IIX
Sharon Den Adel (WITHIN TEMPTATION), dans le rôle d’Anna Held
Rob Rock (ex-IMPELLITTERI), dans le rôle de l’Evêque Johann Adam von Bicken
Ralf Zdiarstek, dans le rôle du Gouverneur Falk von Kronberg
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é : Lundi 09 Septembre 2002 Chroniqueur : NicoTheSpur Score :     Lien en relation: Avantasia Website Hits: 18548
|