# 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
}
BLIND HORIZON (it) - The Parallax Theory (2010)

Label : Spider Rock Promotion
Sortie du Scud : 25 octobre 2010
Pays : Italie
Genre : Death Metal Mélodique / Progressif
Type : Album
Playtime : 8 Titres - 53 Mins
Moins d’un an après leur formation, en 2005, les Italiens de BLIND HORIZON s’empresse d’enregistrer et sortir un premier EP du nom de The Shadowman. Leurs premières compositions montrent alors un potentiel bien présent, malgré un chant tirant un peu trop sur le Deathcore, et reçoivent un accueil mérité de la presse. Quelques soucis de line-up, et un façonnement plus poussé du groupe sur sa musique, mènent à un délai de plus de quatre ans avant la sortie d’un premier album, The Parallax Theory, censé développé davantage les prémices du Death Progressif de la formation.
Et si « Sex On The Phone » s’ouvre sur des bruitages érotiques ridicules avant de présenter un son totalement brouillon, étrangement moins propre que sur le disque précédent, et un chant digne du Suédois GÜNTHER, il serait dommage, pour autant, de ne s’arrêter qu’à ces détails. Dans un sens, cette production fait davantage ressortir l’influence de DEATH marquée par des rythmiques sauvages soutenant les vocaux vindicatifs. Les compositions longues permettent, par ailleurs, au combo romain de broder de nombreux breaks torturés, ou bien aériens, créant alors déroutes mélodiques et alternances de tempos.
Désavantagée par un rendu sonore guère adéquat, la section rythmique parvient tout de même à se montrer fort intéressante. Marco s’exécute ainsi derrière une batterie dégourdie, en dépit des sonorités MIDI des percussions sur les premiers titres et d’une grosse caisse masquée par les basses saturées. Les cymbales sont, au contraire, trop en avant et couvrent parfois les impacts des toms dans une cacophonie de tintements. Le jeu du musicien n’en reste pas moins bien claqué dans les titres et laisse pressentir une volonté d’agressivité que l’on retrouve par moments au sein d’accélérations ravageuses (« I Deify You »). La basse joue également un beau rôle, bien qu’elle soit souvent entachée par les riffs gras et la qualité de la production. Federico chaperonne donc les schémas rythmiques fractals s’imposant lors des passages plus calmes par des accords ronronnant, mais jouant aussi avec son collègue aux baguettes au sein de structures davantage complexes dans leurs arrangements, comme sur « Parallax », sans toutefois que les pistes apparaissent rébarbatives. Même si l’on peut lui reprocher quelques maladresses sur ses riffs, « Shadowman », composition de presque dix minutes, montre clairement que le quintette maîtrise son écriture, sectionnant le morceau de diverses partitions acoustiques, dont cette excellente intro un peu flamenco à la guitare sèche, tout en fournissant une instrumentation cohérente et implacable autour.
L’apport mélodique des guitares permet ainsi d’éloigner la fastidiosité qui aurait pu s’installer. Envoyant des leads mélodiques emprunts d’une touche typiquement suédoise sur « I Am Your God » ou des riffs saturés décapants les breaks jonchés d’acoustiques avec l’aide de la batterie, Ambra et Luca se veulent justes et efficaces. S’il est parfois difficile de pleinement profiter de leurs lignes plus violentes qui se font rapidement rattraper par le rendu sonore ou se veulent trop déstructurées (« All Souls’ Song »), les deux guitaristes se ressaisissent aisément en distillant de plaisants arpèges clairs, à l’instar de l’intro de « White Echoes » et du break très agréable, aux relents Prog, de « Parallax », partagé avec les cordes de Federico et des percussions claires dociles. Racines italiennes ou simple coïncidence, l’exécution des solos se pare d’un feeling tout à fait convenable, incorporant sans peine ces démonstrations aux morceaux, sans pour autant que les musiciens se prennent pour des virtuoses (« Sex On The Phone », « A Trip For You »).
Quand bien même le chant offre ce qu’il faut de place à l’instrumentation pour s’exprimer, Alex n’en est pas moins présent, mais pas toujours en bons termes. Alors que la première piste du disque dévoile un chant peu engageant, râpeux, granuleux, et comique selon les références, la déferlante typiquement Death Mélo du second morceau remet tout de suite le frontman dans la course grâce à des vocaux extrêmes maîtrisés. L’on peut même préciser que l’album va en s’améliorant puisque sa voix est bien meilleure par la suite, agressive et grondante pour accompagner la rythmique acerbe, même si quelques faux pas subsistent encore au détour de « White Echoes », où le chant hurlé ne convainc pas. Ce côté brutal des lignes vocales permet de faire quelques contrastes saisissants lors des scissions entre passages violents et breaks mélodiques affublés d’une voix claire. Le même constat s’impose avec cette dernière qui débute geignarde et très amateure, pour gagner en énergie dans son emploi sur « I Deify You » et garnir convenablement les passages calmes de « All Souls’ Song » puis, sur l’ultime piste, s’accorder parfaitement au fond acoustique de par un effet filtré.
The Parallax Theory est, finalement, un album de qualité qui s’améliore à chacune de ses pistes. Malheureusement, la production empêche la rythmique de réellement exploser à la hauteur de ses capacités et nous prive d’un jeu de guitare des plus efficaces. Et bien que le chant demande également à être amélioré, l’on apprécie la constante mélodique qui donne la part belle aux croisades furieuses des Italiens, ainsi que les idées apportées aux morceaux pour les faire évoluer sur différents schémas musicaux.
Ajouté : Mercredi 14 Septembre 2011 Chroniqueur : CyberIF. Score :     Lien en relation: Blind Horizon Website Hits: 12422
|