# 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
}
KEHLVIN (ch) - The Orchard of Forking Paths (2012)

Label : Division Records
Sortie du Scud : 20 avril 2012
Pays : Suisse
Genre : Post Hardcore
Type : Album
Playtime : 8 Titres - 51 Mins
En ce moment, je nage, non, je me noie dans le Post Hardcore… Une question de circonstances… Il est vrai que lorsque la vie vous fait la gueule, c’est certainement la musique la plus appropriée… Mieux, une bande son idéale.
Alors, ce soir, je m’y remets…
Et pour l’occasion, je repars en Suisse. Qui après nous avoir offert COILGUNS devient peut être le nouvel Eldorado du genre.
Mais nous allons parler d’un quintette pour la circonstance.
Un quintette qui comme beaucoup de formations du même acabit, nous livre ses albums au compte goutte… Car après un LP, deux EP, et six ans de formation, The Orchard of Forking Paths n’est que leur second véritable LP.<br<
Hébergés par l’écurie Division (ASIDEFROMADAY, DIRGE, IMPURE WILHELMINA, UNFOLD, YOG et autres créatures hybrides et inquiétantes…) qui s’est bien sur spécialisée dans le Post Hardcore brutal et sombre, KEHLVIN a évolué d’un Postcore somme toute assez timoré et révérencieux vers un Post Hardcore bien plus hermétique et dangereux.
Et dès le départ, ils ont la gentillesse de nous prévenir. « This Is Mere Noise ».
Et c’est un euphémisme.
On retrouve bien sûr sur The Orchard of Forking Paths tous les ingrédients qui ont fait de cette musique un exutoire à notre violence intérieure, et le haut parleur de notre dégoût généralisé de la « normalité ». Un tempo écrasant, des riffs plombés, un chant qui vrille les tympans, et une ambiance générale torturée et propice à la claustrophobie la plus intenable.
La plupart des titres respectent les codes en vigueur, et alignent les longues variations sur un même thème, en alternant les parties toutes plus embrumées les unes que les autres. Les influences majeures étant bien sur les inévitables ISIS, NEUROSIS, mais aussi CONVERGE, et autres TRAP THEM, noms que l’on ne peut s’empêcher de citer, mais il y a décidemment autre chose derrière leur musique… Un arrière goût moins classique, un sentiment de méfiance, de paranoïa aussi dérangeant que fascinant.
Il faut admettre que leur album est très bien agencé. Il suit une progression constante, nous enfonçant toujours un peu plus dans la noirceur de l’âme, les pieds dans la boue de l’humanité, et le chaos de la désorganisation de la société dans les oreilles.
Et du coup, on est envoûté. L’ensemble est d’une cohérence effrayante, et certains morceaux arrivent même à impressionner encore plus.
Ne le cachons pas, le titre phare, avec un P majuscule, reste « Melon Fucker ». Je vous l’accorde, l’intitulé est assez stupide. Mais ne vous laissez pas abuser par une private joke malheureuse.
Sans tomber dans un enthousiasme peu objectif, je pense qu’à part « Strength Of Fates » ou « Takeahnase » de NEUROSIS, je n’ai jamais entendu un morceau aussi pesant, aussi paroxystique, avec une progression interne bluffante et une violence palpable aussi menaçante. C’est à la limite du bruit blanc insupportable, les guitares vont au delà de la dissonance, et c’est parfait… Et ce titre permet à lui seul de jauger tout le potentiel de KEHLVIN, qui parait avoir encore une marge de progression flagrante.
Mais vous pouvez aussi prendre en sérieuse considération les deux ultimes morceaux du LP, « Why Am I Not » et ses riffs sortis de nulle part mais addictifs, et le morceau éponyme, véritable gravure sur sépulture en guise de conclusion. Longue procession funèbre qu’aurait pu jouer le BLACK SABBATH originel, sans les sons de tocsin, mais avec des cordes lugubres qui les remplacent à merveille…Et le tout, en restant instrumental. Bel épilogue.
The Orchard of Forking Paths est une veritable réussite. Car KEHLVIN a réussi à transcender ses influences pour sortir des sentiers battus, et accomplit la gageure de rester fidèle à un style, tout en le transformant à leur manière.
S’il n’est pas exempt de défauts qu’on pourrait finalement aussi reprocher à pas mal d’autres groupes, il propose une recette sinon nouvelle, mais améliorée, qui au final, rend son travail captivant, et nous laisse en attente d’une prochaine livraison.
Et c’est déjà plus que suffisant.
Ajouté : Jeudi 25 Octobre 2012 Chroniqueur : Mortne2001 Score :     Lien en relation: Kehlvin Website Hits: 10582
|