# 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
}
WHEN ICARUS FALLS (ch) - Circles (2014)

Label : Auto-Production
Sortie du Scud : 4 février 2014
Pays : Suisse
Genre : Post-Hardcore
Type : EP
Playtime : 4 Titres - 28 Mins
Le Post-Hardcore traditionnel, contrairement à la vague moderne qui a sévit à l'orée des années 2000, n'a jamais été ma tasse de thé. Et pourtant, j'ai toujours eu en moi cette étincelle de curiosité qui ne demandait qu'à s'enflammer. WHEN ICARUS FALLS. Peut-être pas le groupe de référence dans le domaine, mais au moins, c'est sur cette formation que j'ai pu faire mes crocs. Si le groupe demeure à ce jour assez jeune (formé en 2007 tout de même), leur premier album Aegean avait pas mal retenu mon attention avec ses ambiances lancinantes de qualité bien qu'un peu monotones. C'est donc sans prise de tête que je me décide à aborder ce nouvel EP du nom de Circles.
Sans plus attendre, les guitares rebondissent de part en part sur les parois illusoire. C'est donc un "Erechtheion" de toute beauté qui vient nous envoûter de sa douce marche introspective. Cette atmosphère énigmatique imposée dès le début nous incite donc à la réflexion et au voyage. La batterie est discrète mais vigoureuse, les hurlements éraillés se marient très bien avec l'instrumental, et les cordes s'expriment avec une conviction qui m'a laissé sans voix. D'ailleurs, ils ne manqueront pas de clôturer le premier morceau de façon magistral. C'est quand même incroyable, on vient à peine d'entamer la bête que j'en ai déjà des frissons. Tout le long de cet EP, il sera impossible de ne pas sentir la montée en puissance significative dont la formation a fait preuve en l'espace de seulement deux ans. Nous sommes à présent face à de véritables atmosphères qui sortent des tripes. Même si les schémas restent dans l'ensemble très simples, cela n'empêche pas de se sentir transporter dans un univers à la fois torturé et planant. En soi, "The Great North" ne manquera pas de nous assommer avec ses rythmiques écrasantes et ses effets sonores des plus spirituels.
Il semblerait bien que les suisses ont réussis à transformer leur faiblesse en force. Si on pouvait déplorer des constructions un peu trop ennuyantes sur l'opus précédent, Circles gomme ce vilain point noir efficacement. Plus concret, plus percutant, cet EP est une belle preuve de maturité de la part de WHEN ICARUS FALLS. L'ensemble est plus réfléchit, mieux calculé et frappe au bon endroit à chaque seconde. Etant malgré tout débutant dans le genre, j'ignore si les habitués seront aussi réceptifs à cette sortie. Quoi qu'on en dise, l'évolution reste palpable par n'importe quelle oreille un minimum attentive. Peut-être pas aussi significative qu'on pourrait le croire je vous l'accorde, mais contrairement à Aegean, cette galette dépasse largement à mes yeux le stade de "sympathique". Et ça n'est certainement pas cet ultime cri sorti tout droit des abysses sur "NYX" qui viendra ternir mon jugement.
Bon, essayons d'expliquer calmement les choses. Je pourrais dire simplement que cette production est de qualité, mais ce serais trop facile. Elle est bien plus que ça. Tantôt lumineuse, tantôt sombre, elle provoque la confusion chez l'auditeur et le pousse à méditer. Encore une fois, Circles est loin d'être complexe. Toutes ces émotions se déclenchent avec une accessibilité fort bienvenue. J'ignore si on peut parler de talent à ce stade, mais lorsqu'un opus arrive à vous faire ressentir quelque chose de fort sans pour autant en faire des tonnes, on est en droit de s'interroger sur la nature d'une telle aura.
Des questions, toujours des questions. Une fois de plus, la musique ne m'apporte aucune réponse. Elle se contentera d'effacer l'espace d'une petite demi-heure toutes ces futilités que représentent les incertitudes. Je n'en demandais pas plus.
Ajouté : Lundi 11 Janvier 2016 Chroniqueur : Nash Score :     Lien en relation: When Icarus Falls Website Hits: 5280
|