# 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
}
THE FORESHADOWING (it) - Oionos (2010)
Label : Cyclone Empire
Sortie du Scud : 2 avril 2010
Pays : France
Genre : Doom / Gothic Metal
Type : Album
Playtime : 11 Titres - 60 Mins
Il y a trois ans, les Italiens de THE FORESHADOWING écrivaient un verset musical de la fin du monde, dans la pure tradition biblique, au travers des compositions immédiates et prenantes du concept album Days Of Nothing. Ils nous reviennent aujourd’hui, avec Oionos, et loin d’avoir épuisé leur inspiration, puisqu’ils présentent, sur ce nouvel opus, une apocalypse bien plus ciblée, mettant clairement en évidence les agissements néfastes et destructeurs de l’homme, en couvrant les séquelles d’une guerre nucléaire, de ses survivants, mais aussi des corps froids et inanimés jalonnant le sol. Ce concept sombre et désolé se pare d’une illustration plutôt austère, et sûrement symbolique, mais à la beauté discutable. Rien d’étonnant sur ce point, puisqu’elle est encore élaborée par le talentueux Seth Siro Anton, connu pour ses traits relativement ésotériques.
Prenant son inspiration d’ANATHEMA, ou MY DYING BRIDE, le groupe perdure donc dans son élaboration d’un Metal à la fois Doom et Gothique, tout en y incorporant d’autres influences (SWANS, NEUROSIS) et, cette fois-ci, se focalisant moins sur l’aspect direct des compositions. En effet, celles-ci se montrent, de nouveau, plutôt longues, mais se concentrent davantage sur le développement d’ambiances pour concorder avec l’atmosphère post-apocalyptique mise en place dans les écrits. Du coup, le clavier, qui autrefois enrobait pleinement les titres et contribuait à renforcer les parties émotionnelles poignantes, se retrouve un peu plus en retrait. Et un concept reposant sur la guerre et la bombe atomique ne serait rien sans quelques explosions judicieusement placées lors de samples opaques aux extrémités de quelques pistes, dont la reprise du titre « Russians » de STING, qui s’avère être une véritable réussite. Reprenant l’air du morceau originel à l’orgue, le groupe parvient à complètement se le réapproprier, lui octroyant des teintes de Funeral Doom, dont le tempo lourd concorde avec le rythme instauré par le musicien britannique. Si THE FORESHADOWING a choisi ce titre, c’est surtout pour les paroles qui complètent celles de leur album, au même titre que les différents samples vocaux ajoutés aux compositions, à l’instar d’une réplique féminine sur le bombardement d’Hiroshima, précédée de la célèbre déclaration de Franklin D. Roosevelt le lendemain de l’attaque de Pearl Harbor, sur « Hope. She’s In The Water », où ces extraits densifient le climat fort et dramatique, déjà partagé entre un tambour militaire et les détonations d’obus. Ajoutons, à ce diptyque, « Revelation 3:11 », superbe clôture instrumentale, tout d’abord introduite par la citation atmosphérique de la Bhagavad Gita par J. Robert Oppeinheimer, au sujet de l’arme nucléaire, puis conservant une tension solennelle et aérienne, parcourue de toms légers et cymbales tintantes, ainsi que d’une ligne de basse tout juste sonore, avant d’exploser soudainement en un riff typé Death Mélodique, intensifiant la mélodie, à la fois belle et triste, ornée de quelques notes de claviers cristallines.
Si seulement le sextette s’était basé sur une structure similaire pour l’ensemble de l’album, cela aurait, d’une part, été davantage en adéquation avec l’état d’esprit qu’ils souhaitaient concevoir et, d’autre part, renforcé la cohésion entre les pistes et évité les inégalités qui s’imposent à l’auditeur. Alors, quand on entame Oionos avec « The Dawning », qui se veut très lent, possédant une rythmique passive, et ne captivant que peu, son seul intérêt résidant dans ses riffs mélodiques à la DRACONIAN, il y a de quoi bâiller par avance. Il faut dire que Marco Benevento se contente simplement de poser un chant clair grave, rappelant par moment le timbre de Mikael Stanne, mais en une ligne vraiment monotone, sans réelles émotions, ni de sens du désespoir. Heureusement que d’autres vocaux viennent, trop rarement, s’ajouter aux compositions, tel que le chant harmonique avec bourdon, traditionnel d’Asie, sur le titre éponyme, qui comporte également un passage en grec laissé aux soins de Sotiris (guitariste de SEPTICFLESH). Étonnamment, sur « Survivors Sleep », un effort considérable a été effet, puisque le frontman laisse échapper une voix fragile, et émotionnelle, soutenue d’un piano sombre et mélancolique, faisant de ce titre un des plus réussis, surtout de par son ambiance simpliste différente de celle de l’album, mais aussi par la spontanéité des sentiments distillés, sans doute due à son écriture en un unique essai. On relève également quelques overdubs, apportant consistance aux vocaux d’origine, ainsi que l’emploi répété de chœurs, plus ou moins mis en avant dans les compositions, et appuyant le côté tragique des morceaux. C’est, d’ailleurs, dans un style grégorien qu’ils s’illustrent lors de « Soliloquium », interlude peuplée de riffs lancinants atmosphériques, tandis que les chants s’accordent avec leur complainte. Une autre de ces pistes simples qui parvient à bâtir une atmosphère envoûtante alors que la plupart des compositions pèchent.
L’ennui, avec cet album, est que les morceaux semblent se reposer principalement sur le clavier et les guitares. Ainsi, celles-ci, plus puissantes que sur l’opus précédent, masquent la basse la majeure partie du temps ; difficile donc de l’entendre, même si l’on suppose qu’elle doit épaissir quelque peu les riffs. Le travail des six cordes n’est pas non plus brillant, mais reste suffisamment accrocheur pour ne pas perdre complètement l’auditeur, à l’exemple de « Fallen Reign » sur lequel la tonalité transpire davantage la désolation, ou encore « Outsiders », dont la mélodie, croissante en intensité, rappelle étrangement le thème « Welcome To Lunar Industries » du compositeur CLINT MANSELL, dans le film Moon, et disposant, en outre, d’un très bon solo mélancolique en outro. Un titre sur lequel le clavier reste tout de même présent, également accompagné d’orgue, que l’on retrouve sur « Chant Of Widows », où le chant se fait plus enjouée qu’à l’accoutumé, et qui se révèle assez organique, alternant différentes sections musicales, tout en restant cohérent ; de son air Folk en intro, repris par la guitare électrique et les toms puissants, avant d’être balayé de riffs saturés, à son break d’arpèges de piano et de cymbales, pour finir sur une section rythmique solide. Il est vrai qu’il est rare, sur les onze titre d’être témoin d’une batterie aussi cadencée et présente. On pourrait citer, par surcroît, « Lost Humanity », disposant d’un tempo dynamique et surtout d’un break massif, enrobé d’un clavier funéraire, et finalement « Oionos », qui conserve une rythmique fluctuante, et dont les percussions d’intro s’accompagnent de sonorités Dream Pop en écho.
THE FORESHADOWING voyage, finalement, entre deux genres musicaux qui, s’ils peuvent apparaître voisins, peinent à être convenablement marier par la formation italienne. L’ajout de sonorités originales et la présence d’un concept, restant essentiellement littéraire pour le coup, permettent tout de même au groupe de créer quelques compositions prenantes, développant une atmosphère réussie, sombre et mélancolique. Toutefois, d’autres titres manquent d’intérêt, de par une dynamique pas toujours employée à bon escient, et un chant trop monotone. Oionos marque donc une volonté du groupe à vouloir enrichir et développer leur son, mais la direction prise n’est peut-être pas la plus judicieuse et, après trois années de travail, l’ensemble se révèle plutôt pauvre et guère mémorable.
Ajouté : Jeudi 31 Mars 2011 Chroniqueur : CyberIF. Score : Lien en relation: The Foreshadowing Website Hits: 9190
|