# 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
}
SIRENIA (no/sp) - The Enigma Of Life (2011)
Label : Nuclear Blast
Sortie du Scud : 21 janvier 2011
Pays : Norvège / Espagne
Genre : Death Metal
Type : Album
Playtime : 12 Titres - 54 Mins
Au départ multi-instrumentiste et fondateur de TRISTANIA, Morten Veland s’en était allé fonder pour lui tout seul SIRENIA. Le premier opus de son nouveau joujou, At Sixies And Sevens, avait des airs de Beyond The Veil (de son précédent groupe) et tout le monde se disait que la tradition serait assurée. Puis SIRENIA a pris un virage plus direct, nouvelle orientation complètement assumée par son leader. Leader qui, pour mener à bien son entreprise, n’a jamais hésité à renouveler son line-up : chanteuses, guitaristes rythmiques, etc … Tout y est passé.
Alors que Nine Destinies And A Downfall (2007) incarnait parfaitement le SIRENIA « new look » voulu par Veland, à base de singles en puissance (« My Mind’s Eye ») et de ballades séduisantes (« The Other Side »), The 13th Floor (2009) affinait le style tout en flirtant avec ce côté épique (« Sirens Of The Seven Seas », « The Seventh Summer ») qu’on croyait déjà jeté aux oubliettes. The 13th Floor pouvait presque prétendre au titre de synthèse ultime de SIRENIA.
Alors, quelques mois plus tard, première surprise et non des moindres : Pilar Gimenez Garcia, dite « Aylin », occupe toujours le poste de chanteuse. Même si les plus sceptiques lui reprochent une voix trop lisse et manquant de profondeur, la petite Espagnole réussit l’exploit d’enregistrer deux disques de suite avec ce diable de Veland. Chapeau bas. Deuxième surprise, moins agréable celle-ci : le guitariste norvégien ne s’est pas trop cassé la tête …
Ce qui semble le plus surprenant, c’est lorsqu’on établit une éphémère comparaison entre ce que Veland a pu proposer par le passé et la faiblesse de ses compositions actuelles. En fait, « faible » ne serait pas approprié. Mais a-t-il définitivement décidé de vouer sa fertile imagination musicale à MORTEMIA ? The Enigma Of Life, le nouvel opus de SIRENIA, n’est-il qu’un enchaînement de titres composés dans l’optique de tenir des singles potentiels ? Que la complexité et la richesse de At Sixies And Sevens paraît loin … Qu’on nous fasse le coup du musicien qui s’assagit et qui veut écrire une musique plus « simple », soit, on l’accepte. Les deux albums précédemment sortis ont démontré que Veland savait le faire avec talent sans dénigrer la qualité d’une chanson. Mais il y a des limites à ne pas dépasser ...
Passé les semblants de titres accrocheurs (« The End Of It All », « Winter Land »), The Enigma Of Life se résume à une accumulation de morceaux sans réelle saveur, quand la simplicité devient trop « simpliste » et quand le savoir-faire trahit un gros manque d’inspiration. Et malheureusement, là où les grand(e)s front(wo)men savent transcender, de par leur charisme et leur talent, une chanson moyenne, on ne peut pas dire que la petite Aylin ait les épaules assez larges. Pour le coup, ses détracteurs auront cette fois bien raison.
Il y a pourtant d’autres chanteurs qu’il faut saluer sur The Enigma Of Life. Ce sont les chœurs et pour leur rendre hommage nous allons tous les nommer : Damien Surian, Mathieu Landry, Emmanuelle Zoldan, Sandrine Gouttebel et Emilie Lesbros. Pourquoi leur rendre hommage ? Parce que chacune de leurs interventions file le frisson, l’exemple parfait étant « A Seaside Serenade ». Quel dommage que Veland n’ait pas plus misé sur ces chœurs majestueux !!! Comme pour le violon de Stéphanie Valentin, d’ailleurs, dont la partition se veut bien trop minimaliste. Tout ce potentiel sous-exploité confirme que notre leader aurait pu faire mieux, bien mieux. On surprend par instants des interventions lumineuses, comme ces petites envolées mélodiques à la guitare, des détails intéressants mais trop rares pour être efficaces. Pire, et c’est là plus inquiétant, certains passages évoquent des titres déjà entendus sur Nine Destinies And A Downfall ou The 13th Floor.
SIRENIA, pour son cinquième album, risque de retomber dans un relatif anonymat, celui des groupes à chanteuses au Metal trop formaté, celui des DELAIN (je vais encore me faire des copains sur Deezer, moi) et bientôt WITHIN TEMPTATION (on en reparlera bientôt). Quelle idée aussi d’aller s’engouffrer dans un Metal où ça bouchonne en permanence … Quand on sait mettre au monde des chefs d’œuvre et qu’on s’abstient à ce point-là, effectivement, on peut parler d’énigme.
Ajouté : Lundi 07 Mars 2011 Chroniqueur : NicoTheSpur Score : Lien en relation: Sirenia Website Hits: 9814
|