# 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
}
AMARANTHE (dk/se) - Amaranthe (2011)
Label : Spinefarm Records
Sortie du Scud : 13 Avril 2011
Pays : Danemark / Suède
Genre : Death Power Metal Mélodique Moderne
Type : Album
Playtime : 12 Titres - 43 Mins
Au programme, rien de vraiment révolutionnaire, juste une formation oscillant entre Death et Power Mélodique ultra lissé. En fait, cet album est un peu au Metal moderne ce qu’un blockbuster hollywoodien est au cinéma actuel. C'est-à-dire qu’il remplit exactement le même rôle, soit celui d’un divertissement qui s’apprécie sur le moment, si l’on cherche de la facilité pour se reposer le cerveau, et se réécoutera de temps en temps, mais souffre clairement de défauts dès que l’on commence à regarder plus loin que l’image superficielle qui nous est présentée.
Force est de constater que le groupe a, pour lui, la qualité de savoir parfaitement écrire des titres tubesques. Dans cette optique, c’est donc à une superproduction peaufinée que l’on a affaire, axée sur un rendu mélodique épurée, tout en laissant les basses grondantes apporter la petite touche agressive qui va bien. Sans étonnement, on retrouve ainsi un apport conséquent de claviers, qui contribuent à appuyer l’aspect moderne de l’album, sous la forme de quelques nappes prononcées et, essentiellement, de samples typés Electro, dont « Call Out My Name » s’érige en parfait exemple, au regard de ses nombreuses boucles et beats dansants, damant la cadence à un refrain plaisant.
Et c’est en ce point que réside l’intérêt majeur du sextette : trois membres se partagent le temps de parole, mais pas des plus équitablement, puisque les vocaux hurlés d’Andreas Solveström sont clairement minoritaires, aseptisés lors de leurs utilisations, en vue de ne pas trop perturber l’enrobage pailleté, plutôt qu’être pleinement exploités, de façon similaire aux invectives soutenues d’une instrumentation plus brute de « Act Of Desperation ». D’ailleurs, ses lignes sont rarement mariées avec celles de ses compagnons, excepté pour de légers soutiens criés en overdub. En fait, le seul titre qui parvient à utiliser au mieux les trois voix est « Leave Everything Behind », où l’alternance est bien gérée et apporte sa dynamique au titre. C’est donc le couple mixte Jake E. Lundberg/Elize Ryd qui s’accapare le reste des pistes. Si le premier sert une prestation plus mélodique que chez DREAMLAND, il ne part jamais dans des envolées Power magistrales. Quoi qu’il en soit, ses apparitions auront essentiellement lieu de concert avec la belle du groupe, résultant en un entrelacement vocal indissociable, où les deux tessitures s’harmonisent en gardant un semblant de dominance masculin, et créent de belles harmonies lissées entraînantes (« 1.000.000 Lightyears », « Serendipity »). Elize, quant à elle, pose une voix maîtrisée et élégante, avec quelques variations de timbres justes et des réminiscences de Sabine de DEADLOCK, ou même d’une superstar Pop canadienne sur « Amaranthine ».
Un titre ballade qui laisse dubitatif devant l’énorme accumulation de clichés, du chant féminin porté par le piano, au masculin et guitares saturées monopolisant les refrains, dans des tournures à la EVANESCENCE. Pourtant, le morceau dispose quand même de bonnes mélodies, dont un solo vraiment convaincant du sieur Mörck. La formation n’ayant pas assez tiré parti de son avantage vocal, c’est donc sur les partitions de guitares que l’intérêt finit par converger. Olof met en place de grondants riffs rythmiques, principalement influencés par les derniers SOILWORK et IN FLAMES (flagrant sur « It’s All About Me (Rain) »). Ses démonstrations mélodiques s’avèrent de très bonne qualité, et permettent à certains titres de regagner l’attention, à l’instar de « Director’s Cut » ; en dépit du fait que chaque composition arbore un solo, et toujours au même endroit.
C’est d’ailleurs dommage de constater une telle absence de prise de risques, puisque leur aptitude à écrire des lignes accrocheuses aurait dû leur servir de base pour développer les compositions autour, au lieu d’apparaître comme une contrainte qui formate finalement le groupe sur des structures similaires. En effet, quelques airs restent en tête après écoute, mais difficile de les restituer étant donné la forte linéarité existante entre les pistes qui s’expédient quasiment toutes en moins de quatre minutes, avec certaines restant sporadiques (« Automatic », « My Transition », « Enter The Maze »).
La batterie semble également assez retenue et convenue, Morten ne dévoilant pas toute la force de frappe qu’on lui connaît, hormis lors de quelques breaks massifs, comme sur le premier titre, où lorsque les beats et boucles de claviers se mêlent aux rythmes pour accroître leur accroche et efficacité, ce qui fonctionne pour une bonne partie des morceaux, comme le single « Hunger ». Quant à la basse, aucun écart n’est permis, elle reste sagement calquée sur les cordes voisines, dans l’optique de faire davantage ressortir leurs riffs.
Alors, que retenir de ce premier effort ? AMARANTHE n’est-il un simple produit marketing formaté à l’extrême ? Seul un second album pourra contredire cela, en espérant alors fortement qu’ils prennent la peine de laisser la spontanéité intervenir dans leurs compositions qui, pour le moment, suivent toutes la même formule convenue de facilité, usant des mêmes artifices électroniques, harmonies vocales et structures. Cet Amaranthe reste toutefois bien supérieur au dernier SONIC SYNDICATE, mockbuster du genre, mais est encore loin de prendre la relève d’un MERCENARY, ou même d’un RAUNCHY.
Ajouté : Mercredi 20 Avril 2011 Chroniqueur : CyberIF. Score : Lien en relation: Amaranthe Website Hits: 14284
|