# 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
}
SIX MAGICS (cl) - Behind The Sorrow (2010)
Label : Coroner Records
Sortie du Scud : 15 février 2010
Pays : Chili
Genre : Power Heavy Metal
Type : Album
Playtime : 10 Titres - 49 Mins
Décembre 2010, le Chili fait l’actualité : FAITH NO MORE doit y faire, à Santiago, son ultime concert de reformation. La Cour d’assise de Paris condamne des anciens responsables de la Dina, police secrète, jugés pour la disparition de Français au Chili. Sans parler des 1000 détenus qui font la grève de la faim dans la prison sud de Santiago, après l’incendie qui a fait huit morts.
Mais le Chili, c’est aussi le berceau de SIX MAGICS, que nous retrouvons aujourd’hui avec Behind The Sorrow. Ceux qui ont découvert le groupe au travers de l’album The Secrets Of An Island vont jeter un nouveau coup d’œil à la pochette pour vérifier qu’il s’agit bien du même combo, et ce, dès, le premier titre « Run ».
SIX MAGICS a connu bien des turbulences depuis 3 ans. Behind The Sorrow est une version de leur album Animals, resté confidentiel. Le label Coroner Records est donc pour eux une nouvelle piste de lancement, assurant une meilleure distribution du combo, et amenant le groupe à réfléchir à son orientation musicale, avec des moyens en plus. De quoi désorienter les fans de la première heure…
Exit, la track list saturée du précédent album, 17 titres, et le recours à la guitare acoustique, aux instruments à cordes et à vent, flûte à pan, qui contribuaient à l’ambiance sud-américaine et à la marque de fabrique de SIX MAGICS.
Deux titres de cet album, étaient toutefois annonciateurs de l’évolution musicale, il suffit d’écouter « Goddess Of The Seas » et surtout « Trauco » avec la voix féminine de Catalina Segouia .
Avec Behind The Sorrow, Sergio Dominguez est remplacé au chant par Elysabeth Vasquez. Ce choix n’est jamais neutre, il est déterminant tant au niveau de l’interprétation que de la composition. Je ferai tout de suite un parallèle avec un groupe qui supporte bien la comparaison dans le cas présent avec DARK MOOR, et la période Elisa C. Martin. L’interprétation au fil des titres confirmera cette parenté, dans le style et l’écriture.
Cela peut paraître paradoxal, mais dès les premiers titres de Behind The Sorrow, avec ce chant féminin, on retrouve une nouvelle virilité dans l’interprétation, vous n’en parlez surtout pas à Sergio Dominguez et merci de ne pas lui refiler mon adresse.
La rythmique est toujours assurée par Mauricio Nader (basse) et Pablo Stagnaro (batterie) et s’inscrit parfaitement dans cette orientation plus Heavy. Erick Avila (guitares), quant à lui, a dû souffler un peu, étant moins sollicité au niveau des arrangements par rapport au skeud précédent, plus conceptuel. On constate que l’écriture s’est voulue plus directe et plus formatée, un choix certainement encouragé par le nouveau label.
Le titre « Run » nous permet de découvrir la front woman, et de familiariser notre ouïe avec une voix grave et chaude s’alliant à merveille avec le Heavy joué par le groupe. Le chant gagne en puissance avec la présence des chœurs sur les refrains. Comme sur le titre « No time To Grieve », nous aurons droit à un break narratif, mais pas du style Christopher Lee avec RHAPSODY OF FIRE, la diction se veut plus rapide, moins lancinante. Nous ne sommes pas dans le même univers.
Avec le titre suivant « Animal », au niveau de l’intro, on devine la patte DREAM THEATER, la production de l’album par David Prater n’y est pas étrangère. C’est bien lui qui officiait pour la production de Images and Words et Change Of Seasons.
Nous sommes emportés, dans « Behind The Sorrow », par la voix d’Elysabeth Vasquez, d’abord mélodieuse, ensuite, portée par les chœurs, les guitares ne se faisant pas oublier pour autant.
Pablo Stagnaro, à la batterie, s’illustre tout particulièrement sur le morceau « Lies And Rules », avec une rythmique tantôt saccadée, tantôt atmosphérique avec l’appui guitare, basse.
« Hands Of Time » est dans la même veine, Elysabeth Vasquez confirme par son chant toute la valeur ajoutée qu’elle apporte au groupe. Avec « All My Dreams » nous avons droit à une belle accroche avec l’intro à la guitare, et un morceau qui est fidèle à l’énergie dégagée dans les titres précédents.
« They » se déroule sur un tempo plus lent avec des nappes de synthé, et un chant plus profond qui se décline par moment à deux voix, le rendant plus original.
« No Time To Grieve », titre avec sa partie narrative, présente une structure différente mais avec une rythmique toujours aussi martelée et émaillée de soli de guitares, celles de Erick Avila, et Gabriel Hidalgo, duo complémentaire.
Du BEATLES en intro de « It’s Not The Way » !!!, un petit air qui m’est bien familier en tous les cas, chant solo, et à deux voix, de toute beauté pour cette ballade qui nous fait sortir le briquet de la poche. Quant au titre « It’s Not The Way », je ne suis pas d’accord avec ce constat car je pense qu’au contraire SIX MAGICS est sur le bon chemin avec cet album.
Pour clore l’enregistrement, nous avons droit à « I Remenber », un gros son, bien Heavy, pour confirmer la nouvelle signature du combo, avec la voix d’Elysabeth Vasquez qui sait se faire plus cristalline, à l’image des soli de guitares qui émaillent la fin du morceau.
Côté Artwork, nous pouvons également reconnaître le bon travail de Nerve Design, qui officie également pour NILE, dans un autre genre…mais force est de constater que SIX MAGICS a su se faire accompagner par de belles pointures pour ce Behind The Sorrow.
Certains trouveront que le groupe a perdu un peu de son originalité, celle développée lors de The Secrets Of An Island, je pense en revanche qu’il va s’ouvrir de nouvelles portes, l’alchimie chant féminin, et le power Heavy Metal du groupe est porteuse de réussite, le potentiel est là. Le Chili, et le Metal ont besoin de groupe comme SIX MAGICS, ça vaut bien mieux qu’un pinochet (je ne mets pas de majuscule à un nom impropre)… oui, mon général.
Ajouté : Vendredi 04 Mars 2011 Chroniqueur : Le Patriarche Score : Lien en relation: Six Magics Website Hits: 10784
|