# 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
}
FAIRYLAND (FRA) - Score To A New Beginning (2009)

Label : Napalm Records / Season of Mist
Sortie du Scud : 30 avril 2009
Pays : France
Genre : Metal symphonique
Type : Album
Playtime : 10 Titres - 50 Mins
A ceux qui auraient oublié que le Metal peut aussi faire dans la finesse, le grandiose, le virtuose, le magique, FAIRYLAND est le professeur le plus qualifié pour leur rappeler que c’est davantage le talent du musicien qui fait l’essentiel du travail que le taux de sang par litre d’alcool (et pas l’inverse !). Sûr qu’être bien torché, ça aide forcément à faire un bon morceau de Grind mais quand il s’agit de sortir les mêmes solos et les mêmes ambiances hollywoodiennes que celles qui peuplent Score To A New Beginning, dernier petit bijou du niçois Philippe Giordana, mieux vaut être d’une sobriété irréprochable et armé d’un carnet d’adresses bien rempli. Sur ce point, le sudiste à tout bon et à constitué pour l’enregistrement de ce troisième effort une véritable armada d’artistes pour l’aider dans sa tâche. Pas moins de seize collaborateurs ont participé au projet de cet album, imaginez plutôt la facture des petits fours dans les coulisses des studios… A titre indicatif, ils sont autant chez HAGGARD…
Mais ce qui nous intéresse vraiment, c’est le son qui découle de cette toute nouvelle palette qui, au vu de la pochette, pourrait bien être la bande-originale d’une adaptation cinématographique d’un jeu vidéo esprit médiéval et fantastique (c’est aussi une onomatopée qui indique l’exclamation si vous voyez de quoi je parle). En tout cas, j’ai comme envie de dire « WoW ! On s’en prend une bonne avec ce jet ». Comme prévu, « Opening Credits » est très typée dans sa manière d’ouvrir un combat épique. Ce dernier commence en trombe avec « Across The Endless Sea (Part II) » où intervient déjà le guest d’entre les guest : Georg Neuhauser de SERENITY qui apporte sa voix aux côté de Philippe juste avant un solo de guitare signé Alessio Velliscig de PATHOSRAY. Pour reprendre l’esprit de l’artwork, cette piste symbolise le départ des troupes sur le navire avec un beau passage de piano qui évoque les familles brisées restées à quai. L’affrontement se précise avec « Assault On The Shore » sur laquelle réapparaît Georg ainsi que Alex Corona de REVOLTONS à la guitare. S’ensuit « Master Of The Waves » qui marque l’arrivée des deux guitaristes d’ANTHROPIA, mon ami Hugo Lefebvre et Yann Mouhad doublé au micro par la très intéressante Klaaire de SYRAYDE qu’on retrouvera plus loin. Globalement, et histoire de faire un premier point, Philippe et sa troupe nous embarque vraiment dans un voyage féérique sur un bâtiment majestueux. Je suis très peu adepte du Metal symphonique mais j’avoue avoir été charmé par l’harmonie générale qui se dégage de Score To A New Beginning. Par la suite on retrouvera avec joie les beaux vocaux de Georg et Klaaire, notamment sur la poétique « A Soldier’s Letter » ou sur la composition éponyme. Si globalement, la deuxième partie de l’opus est moins inquisitrice que la première, on ne s’ennuie pas une seule seconde quand des gens comme Geraldine Gadaut, Jean-Gabriel Bocciarelli (BENIGHTED SOUL - « At The Gates Of Morken ») ou Olivier Lapauze (HEAVENLY – « Score To A New Beginning ») viennent apporter leur griffe. Tout ça sans oublier la tâche monumentale effectuée par le principal protagoniste, Philippe Giordana à l’écriture, au chant ou aux claviers, épaulé sur tout le CD par Marco Sandron (PATHOSRAY) au micro, Chris Menta (RAZORDOG) aux guitares et Willdric Lievin (HAMKA) à la batterie. C’est une vraie épopée fantastique sur laquelle nous a fait naviguer cet orchestre.
Car il n’y a pas d’autre mot. Score To A New Beginning n’est pas l’œuvre d’untel ou d’untel. C’est un ensemble rayonnant de cohésion et de grandeur qui a su composer un album à la hauteur du génie de Philippe Giordana. Et à l’insu d’une grande compagnie aérienne allemande qui nous promet de l’évasion avec son slogan, je le détourne au profit de FAIRYLAND en affirmant haut et fort : there is no better disc to escape !
Ajouté : Mercredi 10 Juin 2009 Chroniqueur : Stef. Score :     Lien en relation: Fairyland Website Hits: 10463
|