# 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
}
DELAIN (nl) - We Are The Others (2012)

Label : Roadrunner Records
Sortie du Scud : 1er juin 2012
Pays : Pays-Bas
Genre : Metal Symphonique
Type : Album
Playtime : 12 Titres - 47 Mins
April Rain, sorti en 2009, nous avait fortement déçu avec ses mélodies trop légères et ''cuculs'' rendant l'album vite ennuyeux. Seul deux morceaux méritaient d'être écoutés, ''Control The Storm'' et ''Stay Forever'' qui ne manque pas de refrain entêtant. On aurait pu penser que ce petit échec de parcours aurait du leur mettre la pression afin de mieux corriger le tir sur leur prochain opus. Oui mais en fait non. Je vous explique : Des efforts sont en effet bien présent dans We Are The Others mais cependant, DELAIN répète le même schéma que April Rain. Certains titres marchent mieux que d'autres mais peinnent tout de même à s'imposer comme des supers tubs du genre Metal Symphonique comme le sublime ''Nemo'' de NIGHTWISH ou le superbe ''Sensorium'' d' EPICA. La différence vient aussi des chanteuses qui, pour les groupes que j'ai cité plus haut, ont de vraies voix de divas. Des voix qui ont fait rêver beaucoup de jeunes filles essayant avec plus ou moins de succès de reprendre leur morceaux les plus haut perchés !
DELAIN compte parmi son line-up actuel Timo Samers (guitare), Sander Zoer (batterie), Otto Schimmelpenninck (basse), Charlotte Wessels (chant) et celui qu'on ne présente plus, Martijn Westerholt (claviers). Qu'allons nous donc découvrir dans ce nouvel opus ? Tout d'abord une pochette moins aguicheuse et commerciale que celle d' April Rain, proposant un artwork plus soigné et rétro. We Are The Others s'ouvre sur le morceau ''Mother Machine'' avec sa belle intro mécanique et ses riffs musclés qui annonce un album plus rude que son prédécesseur ... Et bah non ! C'est pas encore pour cette fois-ci. L'album s'enchaine sans vraiment accrocher mais reste néanmoins plus rapide et captivant que l'ancien opus. Les compos sont bonnes et le ton se durcit. Les guitares se font plus agressives et la batterie retrouve un semblant de place avant de s’effacer assez vite derrière le clavier de Martijn qui raffle toute les attentions. Cependant tout n'est pas à jeter (et heureusement pour eux !). Des morceaux comme ''We Are The Others'', ''Babylon'' ou encore ''Are You Done With Me'' méritent d'être écoutés même si ces titres sonnent plus Pop que Metal. Ils apportent néanmoins une fraîcheur propre à DELAIN et de belles mélodies entêtantes. Tandis que d'autres morceaux s'effacent totalement comme le seul duo de l'album, ''Where Is The Blood'' avec Burton C. Bell (FEAR FACTORY) qui n'arrive même pas au petit orteille du très réussi ''Control The Storm'' en duo avec le grand Marco Hietala (TAROT / NIGHTWISH) à écouter sur April Rain ! Sinon, que dire de plus mis à part que la formule est quasi-identique. La balade ''I Want You'' est très décevante et mollassone alors que le titre de cloture ''Not Enough'' passe à la trappe tellement le morceau s'essoufle et nous endort. Un titre de la trempe de ''Babylon'' aurait pu faire l'affaire pour une fin qui nous aurait laisser rêveurs... La voix de Charlotte est un poil plus affirmée sur cet album que sur les précédents. Néanmoins, il manque la petite étincelle qui fait qu'on pourrait encore plus accrocher aux morceaux de We Are The Others. Comme je le disait plus haut, elles ne peuvent pas toutes avoir la voix de Sharon Den Adel (WITHIN TEMPTATION) et le charisme de Tarja Turunen (ex-chanteuse de NIGHTWISH). ''Are you Done With Me'' réussit cependant à nous gratifier d'un chant plus aérien. Mais l'effort reste moindre ... Avec une voix aux accents Pop (un peu comme celui d'Annette Olzon qui succède à Tarja), il est difficile de s'imposer dans l'univers impitoyable du genre dit "Metal à chanteuse''. Il manque seulement un peu plus de conviction et de tonus à mademoiselle Wessels pour nous emmener là où elle voudrait qu'on la suive.
Simple et accessible, We Are The Others saura tout de même ravir les amateurs du genre. Même si l'album reste assez répétitif, on ne peut reprocher à DELAIN d'être égal à lui-même et de rester sincère dans ses compos. Après avoir atteint les sommets avec son frère dans WITHIN TEMPTATION, Martijn (rappelons-le atteint du très rare Syndrome de Pfeiffer) a continué à vivre sa passion grâce à la création de ce groupe. DELAIN n'aura probablement pas la même notoriété que ses homonymes que sont EPICA, XANDRIA ou bien LACUNA COIL mais DELAIN peut se féliciter de nous faire partager des albums sans fioritures et allant droit au but.
Ajouté : Lundi 13 Août 2012 Chroniqueur : Mystic Laurëa Score :    Lien en relation: Delain Website Hits: 10232
|