# 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
}
TARJA (fi) - Colours In The Dark (2013)

Label : earMusic
Sortie du Scud : 28 août 2013
Pays : Finlande
Genre : Metal mélodique
Type : Album
Playtime : 10 Titres - 61 Mins
Bien que démissionnée de force de NIGHTWISH il y a quelques années maintenant, la diva Tarja Turunen n'a jamais vraiment disparu du paysage musical. Et il reste difficile de dissocier la carrière de la chanteuse de son ancien groupe, son nom revenant régulièrement lorsque l'actualité touche ses ex-comparses. Alors quand sa copine Floor Jansen (ex-AFTER FOREVER) intègre définitivement les rangs de NIGHTWISH, le parallèle devient évident, toujours plus qu'avec la petite suédoise Anette Olzon qui n'aura pas fait long feu ... Jamais coupée du Metal symphonique à chanteuse, Tarja s'offre même un duo avec Sharon et WITHIN TEMPTATION le temps d'un "Paradise" qui figurera sur le prochain album des bataves. Mais surtout, la belle cantatrice fait son retour en nous gratifiant d'un troisième album métallique après My Winter Storm (2007) et What Lies Beneath (2010).
Pourquoi un troisième métallique ? Car la belle mène en parallèle une carrière qui lui permet de toucher à toutes ses passions, de l'opéra aux chants de Noel, en passant quelques collaborations comme cette association inattendue avec Mike "Exorcist" Oldfield (le compositeur de Tubular Bells). Et toute la difficulté pour Tarja réside dans cette dualité. Car Madame Turunen a parfaitement conscience que le plus gros de son public provient de la scène Metal, aussi reconnue puisse-t-elle être dans les sphères les plus "classiques". Il n'empêche. Pour continuer à exister, elle sait très bien que Colours In The Dark doit bouger, secouer, avec charme certes, mais avec une grosse dose de guitares. Tant bien que mal, elle persiste à vouloir métisser toutes ses recettes favorites : musiques de films, consonances Pop, rythmiques saturées, et ambiances de rêve.
Et pour mener à bien ses ambitions, elle continue à faire appel à ses songwriters habituels. Le duo suédois Mattias Lindblom / Anders Wollbeck (VACCUM) est de la partie. Ces gars-là ont déjà composé pour Tina Arena et Garou, gardons ça en tête. L'Américain Johnny Lee Andrews ajoute sa pierre à l'édifice. De même que Jesper Strömblad (ex-IN FLAMES), qui a sans aucun doute pondu le riff de "Neverlight", pour un résultat dynamique mais sans jamais vraiment s'emballer. Les membres de POETS OF THE FALL (Marko Saaresto, Olli Tukiainen et Markus Kaarlonen) ont offert à Tarja "Until Silence", une bien jolie ballade mais qui manque cruellement de moments forts. Quand on connaît la capacité de la belle à pouvoir transcender une chanson par une simple envolée lyrique, la frustration n'en est que plus grande.
D'autant que Tarja s'en sort également très bien toute seule. Désormais responsabilisée dans son rôle d'artiste solo, elle compose seule comme une grande cet intéressant "Mystique Voyage", au tempo ralenti et désespéré, où les arrangements et l'atmosphère en général retranscrivent à merveille l'idée initiale. La diva serait-elle plus à l'aise lorsqu'elle mène la barque en solo ? Disons que le duo avec Justin Furstenfeld (chanteur de BLUE OCTOBER) sur "Medusa" en atteste : le seul charme de cette chanson réside dans les sonorités envoutantes du Duduk, ce hautbois arménien qui évoque toujours la bande originale du film "Gladiator", avec Russel Crowe. Et qui dit "Gladiator", dit Hans Zimmer, dont Tarja est une grande admiratrice (au même titre qu'un certain ... Tuomas Holopainen). Et qui dit Hans Zimmer, dit Remote Control Productions, dont fait partie l'Américain James Dooley. Ce compositeur, reconnu pour ses musiques additionnelles, apporte sa pierre à l'édifice sur "Deliverance". Son influence est indéniable, le côté grandiloquent haussant le niveau d'un mid-tempo orchestral assez banal finalement, dont on ne retiendra pas grand-chose, si ce n'est ce refrain où Tarja se lâche enfin.
Si la participation de Dooley reste furtive, on sent Madame Turunen désireuse d'explorer encore l'héritage pesant du NIGHTWISH épique et propice aux rêveries. Outre "Mystique Voyage" déjà cité, "Lucid Dreamer" et sa berceuse malsaine pour enfants (sur laquelle intervient sa propre fille, Naomi Cabuli Turunen) trahit maladroitement un dévouement aveugle envers ses fans de la première heure. On y verrait presque une réponse au "Ghost River" de qui vous savez ... Sans la même saveur.
Contre toute attente, on retiendra plutôt ces morceaux à l'accroche évidente, ceux qu'on qualifierait de "singles". Non pas cette insipide reprise du "Darkness" de Peter Gabriel (mais Tarja qu'est-ce que tu nous fais ? Au moins, les reprises du "Still Of The Night" de WHITESNAKE ou du "Poison" d'Alice Cooper témoignaient d'une prise de risque osée). Mais prenons cet entrainant "Never Enough", avec ce riff à la PAIN, ses petites touches de piano, et la voix de la Miss qui s'accorde assez bien au style de Johnny Lee Andrews. On retrouve la même équipe et donc la même formule lors de "500 Letters", agrémenté d'un des seuls soli de guitare de Colours In The Dark. Et on ne négligera pas ce titre d'ouverture, "Victim Of Ritual", seule véritable alchimie réussie des goûts de Tarja, qui allie technique, chants de sirène, orchestrations et mélodie imparable. Si seulement elle pouvait éviter de rouler les "r" comme le ferait Mireille Mathieu ...
Alors voilà, à vouloir toucher à tout, à vouloir séduire tout le monde, Colours In The Dark laisse une impression mitigée. La seule ligne directrice de cet album à la pochette immonde reste la voix de la soprano finlandaise, et c'est bien peu. Les prestations scéniques de Tarja et l'enthousiasme dont elle fait toujours preuve méritent d'être salués, mais sur support discographique, le doute demeure.
Ajouté : Vendredi 09 Mai 2014 Chroniqueur : NicoTheSpur Score :    Lien en relation: Tarja Website Hits: 7800
|