# 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
}
RHAPSODY OF FIRE (it) - Dawn Of Victory (2000)
Label : Limb Music
Sortie du Scud : 28 novembre 2000
Pays : Italie
Genre : Fantasy Metal
Type : Album
Playtime : 10 Titres - 49 Mins
A l’image de sa pochette, plus agressive et plus tranchante, RHAPSODY décide, à l’aube de la victoire, de durcir le ton. La colère du Guerrier de Glace illustrée par l’Allemand Marc Klinnert, clairement opposée aux artworks un peu naïfs d’Eric Philippe, reflète idéalement le virage plus Heavy entrepris par la paire Turilli / Staropoli. La faute à un Luca Turilli qui souhaite redonner à RHAPSODY des attributs « Metal » que le groupe semble négliger depuis trop d’années, au profit d’orchestrations soudainement devenues envahissantes. Jusqu’ici, le guitariste italien accompagnait les parties de clavier de son compère Staropoli. Dorénavant, il mène la danse.
Jamais, depuis les débuts de RHAPSODY, on n’avait entendu rythmiques aussi pêchues et incisives. Et comme Danielle Carbonera a quitté RHAPSODY, c’est le monstrueux batteur allemand Alex Holzwarth (SIEGES EVEN et intérimaire de luxe sur le Angels Cry d’ANGRA) qui récupère les baguettes, d’où un son beaucoup plus lourd qu’à l’accoutumée. Oubliés les intervenants extérieurs, oubliés les intermittents de la musique de chambre, RHAPSODY ne conserve que ses choristes prodigieux, une violoniste soliste (Maggie Ardorf), rappelle sa chanteuse soprano Constanze Backes (présente sur Legendary Tales), et va droit à l’essentiel.
Si jusqu’à Symphony Of Enchanted Lands, RHAPSODY cultivait un son très « Happy Metal » symphonique, difficile de parler de Dawn Of Victory en termes identiques. « Holy Thunderforce » ou « Dargor, Shadowlord Of The Black Mountain » sont de vrais morceaux de Power Metal, à base de riffs insoupçonnés de la part de RHAPSODY. D’un point de vue conceptuel, même la Saga de l’Epée d’Emeraude prend une tournure plus violente. Sur ordre d’Akron le Seigneur Noir, le prince Arwald est torturé puis exécuté, la princesse Airin violée puis tuée, et tous les chevaliers prisonniers de la bataille d’Ancelot sont mis à mort. Quant au Guerrier de Glace, il se fait subtiliser l’Epée d’Emeraude par le même Seigneur Noir …
Si Dawn Of Victory peut paraître moins varié que Symphony Of Enchanted Lands du fait de cette brutalité nouvelle et assumée, il n’en est rien. RHAPSODY reste un groupe de Metal à tendance symphonique, certes, mais il se plaît aussi à s’essayer aux ballades celtiques presque dansantes avec « The Village Of Dwarves ». Il faut croire que le folklore médiéval inspire encore et toujours le duo Turilli / Staropoli, dans la mesure où « The Mighty Ride Of The Firelord », bouquet final dans tous les sens du terme, en est pourvu dans ses mesures mid-tempo. Un morceau comme « The Bloody Rage Of The Titans » présente aussi un RHAPSODY nouveau, sur un rythme modéré, le genre de chanson qui a du donner des idées à Joey DeMaio (MANOWAR) …
Mais qu’en est-il de ces titres spécialement écrits pour aller combattre le Seigneur Noir ? Voilà qui reste la marque de fabrique de RHAPSODY, et les « Dawn Of Victory », « Triumph For My Magic Steel », « Holy Thunderforce » et « The Last Winged Unicorn » perpétuent la tradition, à grands coups de refrains mémorables et de mélodies imparables. On comprend pourquoi RHAPSODY tient à conserver les chœurs qui ont fait son succès quand on entend sur le résultat, et notamment sur le titre éponyme. La seule faute de goût se nomme « Trolls In The Dark », instrumental dispensable débuté par une voix d’enfant juste ridicule …
Dommage, car sans cet écart, RHAPSODY touchait la perfection.
De tous ses albums chevaleresques, Dawn Of Victory symbolise sûrement son œuvre la plus réussie.
Discographie Complète de RHAPSODY OF FIRE :
Legendary Tales (Album - 1997),
Symphony Of Enchanted Lands (Album - 1998),
Dawn Of Victory (Album - 2000),
Rain Of A Thousand Flames (Album - 2001),
Power Of The Dragonflame (Album - 2002),
Symphony Of Enchanted Lands Part II : The Dark Secret (Album - 2004),
Triumph Or Agony (Album - 2006),
Live In Canada 2005 (The Dark Secret) (Album - 2006),
The Frozen Tears Of Angels (Album - 2010),
The Cold Embrace Of Fear (Album - 2010),
From Chaos To Eternity (Album - 2011),
Into The Legend (Album - 2016)
MI Bonus :
RHAPSODY (it) - Fabio Lione (Juil-2004),
RHAPSODY OF FIRE (it) - Luca Turilli (Mars-2010),
LUCA TURILLI'S RHAPSODY (it) - Luca Turilli (Mai-2012),
RHAPSODY OF FIRE (it) - Alex Staropoli (Oct-2013),
Ajouté : Lundi 09 Juillet 2012 Chroniqueur : NicoTheSpur Score : Lien en relation: Rhapsody Of Fire Website Hits: 7960
|