# 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
}
FORSAKEN WORLD (FRA) - As Time Reflects Our End (2012)

Label : Auto-Production
Sortie du Scud : 30 mars 2012
Pays : France
Genre : Death Metal Mélodique / Deathcore
Type : Album
Playtime : 8 Titres - 29 Mins
D’un côté, Dyp, avec déjà quelques albums à son actif dans des projets locaux. De l’autre, Flyshredd, membre de FENRIR et DESPAIRHATE, entre autres. Les deux énergumènes se rencontrent à la MAI, et décident, en août 2010, de se bâtir un nouveau projet : FORSAKEN WORLD. À peine deux ans s’écoulent et les voilà qu’ils accouchent de leur premier disque : As Time Reflects Our End.
Un opus centré sur l’optique destructrice de l’Homme envers sa planète. Sans non plus parler d’album concept, quelques expérimentations sonores ont été glissées de-ci de-là, telle celle de l’ouverture, « 010010110 ». Une plage que l’on pourrait assimiler à « The Attic », du dernier album d’IN FLAMES, du fait des bruitages lugubres (porte, pas, briquet,…), de ses samples oppressants, et du monologue en voix claire delayée qui prend place. L’ambiance y est assez Black, et l’on peut retrouver l’influence de ce genre sur certains passages vocaux de l’album, tirant sur le shriek, avec un dédoublement chuchoté reflétant la folie. C’est la manière de faire de Dyp : seconder un chant hurlé, aux racines Death Mélo oldschool, avec ce côté brut et râpeux, d’une piste vocale ombrée qui permet d’apporter un effet à la fois dense et diffus. Par ailleurs, ses vocaux affichent ici également quelques influences issues de la scène Metalcore/Deathcore, Olivier Sykes en tête. Optant pour un growl monstrueux lors des sections à cadence moindre, et conservant ses égosillements hurlés pour les envolées de riffs incisifs, le Langrois s’adapte parfaitement à la mécanique des pistes, si ce n’est sur « Forsaken World », où l’allure aléatoire de la rythmique ne semble pas très synchrone. Grâce aux riffs accrocheurs les introduisant, les refrains profitent d’une dynamique entraînante et la prestation de Dyp s’ancre alors dans la tête de l’auditeur. Même si cette mise en avant se répète souvent de manière similaire d’une piste à l’autre. Par moment, ce sont les overdubs qui se multiplient et confèrent une intensité nouvelle, à l’image de « As Time Reflects Our End » où le duo est derrière le micro, en plus de deux guests (Naps et Samantha) pour scander les ultimes paroles de l’opus. L’on peut aussi reprocher la trop grande présence de Dyp qui donne l’impression de ne pas laisser toute sa place à l’instrumentation. Dans cette optique, il aurait été judicieux de ne pas intervenir sur les accalmies instrumentales, pour aérer les titres. Et ce n’est pas l’emploi, comme sur « My Shelter », d’une voix claire médiocre qui change la donne.
Un des principaux reproches qui peut être fait à As Time Reflects Our End est sa trop courte durée, s’arrêtant avant la demi-heure. C’est dommage, car son côté compact, de par l’allure enragée des morceaux, n’octroie que très peu de répit, excepté l’intro de « Artificial Tears » qui se laisse emporter sur une brume opaque mélancolique, ponctuée d’arpèges harmonisés puis d’un solo lancinant au feeling introspectif. D’ailleurs, les lignes de guitare ont été orchestrées par le maître à penser du combo, Flyshredd. Son jeu est acéré et déchaîne les titres. Les riffs ronflants se révèlent irrésistibles, relançant vigoureusement les compositions en sortie de breaks et se posent comme un soutien indéniable dans l’accroche du chant, comme sur « Crucified Truth ». De pair avec les percussions, les guitares se lancent sur des cinétiques cycliques énergiques. Côté démonstrations, il n’est pas non plus manchot et sert des solos qui, s’ils manquent parfois d’ambition pour vraiment sublimer, n’en restent pas moins de qualité, à l’exemple de celui de « Parallel Universes ». Un titre un peu frustrant d’ailleurs, car avec l’interférence téléphonique en guise d’intro, il était logique d’attendre un morceau plus porté sur l’électronique, comme la très bonne ambiance synthétique sur l’outro de la plage finale.
Autrement, l’aspect incisif et direct de l’album est dû en partie au jeu de batterie agressif. Malheureusement, pour des raisons pratiques, le duo a dû se contenter de l’instrument en version programmée. L’on note donc des cymbales en berne, et un manque de relief quand l’attention est pleinement portée sur les décharges d’une double loin d’être ménagée. Les blasts sont également de rigueur, se profilant au sein des rythmiques guerrières qui n’en démordent pas (« Near Future »), et galopent sans cesse, effectuant quelques virages pour pallier la monotonie. Ainsi les breakdowns fusent, où la batterie devient massive, et des râles de la part du chanteur viennent accentuer la lourdeur ambiante. Des cassures dans les titres que la basse se fait une joie d’emplir de ses accords grommelant. S’il faut un peu forcer l’oreille pour bien discerner ses quelques remous sur les structures chargées, servant principalement de renfort aux guitares, elle jouit de ces instants au ralenti pour se ranger du côté de la batterie et peser sur ses heurts.
Pour un jeune groupe autoproduit, FORSAKEN WORLD affiche une forte maîtrise à l’élaboration de ses compositions, mais également un son de qualité qui permet d’accroître leur impact. Bien que l’on puisse lui reprocher sa durée, digne d’un EP, cela n’empêche pas d’apprécier les rythmiques expressives d’As Time Reflects Our End, ainsi que ses refrains savamment amenés par des riffs efficaces. Quelques aspérités persistent, mais rien d’extrêmement préjudiciable pour un premier album présageant un potentiel futur certain.
Ajouté : Mardi 28 Février 2012 Chroniqueur : CyberIF. Score :     Lien en relation: Forsaken World Website Hits: 12115
|