# 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
}
NIGHTWISH (fi) - Imaginaerum (2011)

Label : Nuclear Blast Records
Sortie du Scud : 2 décembre 2011
Pays : Finlande
Genre : Metal
Type : Album
Playtime : 13 Titres - 74 Mins
Le voilà, enfin, il est là, tout frais, ce concept album ambitieux largement annoncé par une promo plus qu'intelligente. Le 2 Décembre 2011, après de longs mois d'attente pour les fans, NIGHTWISH fait son grand retour avec Imaginaerum, son septième album officiel, et surtout son deuxième avec Anette Olzon, cette brunette suédoise qui avait remplacé la pourtant très adulée Tarja Turunen ... Septième album, avec comme étendard le chiffre "7", celui-là même qui incarne la magie dans tant de croyances et traditions. Sans aucun doute possible, dans Imaginaerum, la magie opère, elle enlace avec tendresse et/ou fureur chaque élément d'un opus qu'il faut écouter à plusieurs reprises afin de mieux le cerner.
Et avant de plonger dans chaque détail d'Imaginaerum – et comme ils sont nombreux !!! – il convient d'assimiler définitivement que NIGHTWISH a complètement dépassé le simple statut de groupe symphonique. A chaque nouvel album, le quintet franchit un palier en termes d'explorations musicales, et Tuomas Holopainen (claviers et principal compositeur) prend tant de plaisir à nous faire voyager que le risque en vaut la chandelle. Le sosie de Jack Sparrow s'aventure sur toutes les terres de ses principales influences (Tim Burton pour l'image, Hans Zimmer et Danny Elfman pour les parties orchestrales, entre autres), et même s'il semble souffrir à chaque instant de la peur du résultat, le bonhomme n'en reste pas moins audacieux et convaincu qu'il mène sa barque dans la bonne direction. NIGHTWISH, ou le pont manquant entre le Metal et la bande-son d'un film magnifique berçant nos rêves enfouis d'enfant ...
C'est qu'il doit avoir un côté Peter Pan, ce Tuomas Holopainen, pour nous plonger au sein même de ses visions, ses obsessions, ses angoisses, ses espoirs d'enfant qui ne veut pas grandir.
Et histoire de rendre à César ce qui lui appartient, ne négligeons pas le rôle essentiel joué par la petite Olzon, sans qui Holopainen n'aurait pu parvenir à ses fins. Une bonne fois pour toutes, Anette Olzon, n'a pas et n'aura jamais la tessiture de voix de Tarja Turunen, et en un sens il faut soupçonner le ténébreux leader de l'avoir choisie pour cette raison. Les fans de Tarja n'accepterons jamais la différence avec celle qui lui a succédé, mais Anette fait ici preuve d'une polyvalence qu'on avait déjà entrevue sur Dark Passion Play, notamment sur "Meadows Of Heaven" où elle survolait un gospel avec une aisance déconcertante.
Avec Imaginaerum, Anette Olzon s'intègre encore un peu plus dans la musique de NIGHTWISH, elle sait se faire théâtrale et agressive sur "Scaretale", se transformer en chanteuse jazz sensuelle sur "Slow, Love, Slow", voire même servir de chœur sonore et puissant pour s'effacer devant le non moins prodigieux Marco Hietala sur "Ghost River". Le bassiste-chanteur n'est pas en reste, et constitue comme d'habitude le deuxième atout vocal de NIGHTWISH. Emppu Vuorinen (guitares) donne plus de mordant aux titres qui doivent sonner "Heavy", le côté trop gentillet de Dark Passion Play est désormais très loin, même si ses rythmiques ne sont pas d'une grande originalité... Néanmoins, le six-cordiste ose un solo presque bluesy sur "Slow, Love, Slow" et une fois encore, on en déduit que le talent de ce musicien est exploité à seulement 20% ... Simplement chaque membre du groupe joue aujourd'hui sa partition comme s'il participait à une musique d'ensemble, au sein d'un orchestre impressionnant. Aux côtés de nos Finlandais et de leur Suédoise, on retrouve le fidèle Troy Donockley aux flûtes irlandaises et autres bouzouki, mais aussi un trompettiste (Guy Barker), deux violonistes (Pekka Kuusisto et Dermot Crehan), sans parler de plus de trente choristes, et de vingt petits chanteurs à la voix d'ange, pour ne citer qu'eux.
Les moyens mis à disposition de NIGHTWISH, et la présence de ces nombreux musiciens, témoignent de la volonté d'Holopainen à ne plus avoir de limites. Le côté épique (les dernières mesures de "Rest Calm", l'instrumental "Arabesque" et ses clins d'œil à Danny Elfman, et la moitié du trop long "Song Of Myself") prend une toute autre ampleur, ce que souhaitait bien sûr le leader au bouc bien taillé.
En dépit de cette ambition grandiloquente, NIGHTWISH ça reste une machine à tubes imparable, qui ne perd en rien de son aura accrocheuse. Le premier vrai titre, "Storytime", avec ses airs de "Bye Bye Beautiful" ou "Wish I Had An Angel", a tout du single en puissance : un refrain génial, des chœurs grandioses, une orchestration efficace, un break outrageusement pompé sur le grand Hans Zimmer, et même une Anette qui s'emballe sans complexe ! Quant à la chanson qui suit, "Ghost River", elle voit défiler un Marco Hietala menaçant, des ponts ensorceleurs, des chœurs d'enfant presque malsains, avant une envolée finale carrément superbe. Dans le style séduisant, "Last Ride Of The Day", à l'ambiance très proche de ce que proposent Eric Levi et son ERA, met dans le mille également.
Par ailleurs, pour les amoureux du genre, NIGHTWISH n'a pas délaissé sa facette la plus celtique entamée avec l'instrumental "Last Of The Wilds" sur Dark Passion Play. De la ballade chantée en duo par Marco et Anette ("Turn Loose The Mermaids") jusqu'à ce mid-tempo composé par Marco lui-même ("The Crow, The Owl And The Dove"), NIGHTWISH frappe un grand coup avec le tonitruant et dansant "I Want My Tears Back", muni de guitares virevoltantes, de flûtes, de cornemuses et d'un refrain forcément magique, où Marco et Anette se partagent la vedette. Cette envie de danser et de festoyer, on la retrouve avec bonheur sur le refrain de "Last Ride Of The Day"...
Que dire de plus sur Imaginaerum ? Qu'en dépit de quelques fautes de goût qui serviraient à dépeindre un peu plus le concept de l'album (exemple : lorsque "Scaretale" vire en musique de cirque ...), NIGHTWISH a atteint ses objectifs : proposer une musique toujours plus riche, sans barrière, osée mais jamais prétentieuse. Pour couronner le tout, un long-métrage portant sur l'histoire d'Imaginaerum, est en cours de réalisation (par Stobe Harju, qui avait réalisé le clip de "The Islander") et sortira courant 2012. Chez NIGHTWISH, on fait les choses en grand, et pas qu'à moitié.
Ajouté : Mardi 31 Janvier 2012 Chroniqueur : NicoTheSpur Score :      Lien en relation: Nightwish Website Hits: 15628
|