# 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
}
ARKANAN (FRA) - From Disaster Plays (2011)

Label : Auto-Production
Sortie du Scud : 10 octobre 2011
Pays : France
Genre : Metalcore
Type : Album
Playtime : 11 Titres - 49 Mins
Au Nord, c’était les corons. La terre, c’était le charbon. Le ciel, c’était l’horizon. Il faut avoir vécu l’enfer sang et or de Bollaert pour comprendre à quel point les gens du Nord, comme dirait Enrico, sont chaleureux. On ne va certainement pas s’arrêter à une provenance, mais ça ne m’étonnerait même pas de retrouver dans le Metalcore des Nordistes d’ARKANAN un peu de cette générosité. Avec ce premier album intitulé From Disaster Plays, nos cinq amis lensois vont probablement se heurter à un mur d’auditeurs, puisqu’ils officient avec aplomb dans un Metalcore aux traits tirés et aux contours encore mal définis. Cette musique qui nous arrive terne et brute mériterait surement un petit coup de polish histoire qu’on puisse lire clairement entre les lignes. Car ARKANAN nous dit des choses. Parfois directement, parfois en filigrane. Et leur discours bégayant n’en demeure pas moins instructif.
Sorti à peine un an après Circle, leur premier EP et deux après une démo éponyme, From Disaster Plays est un album qui, musicalement, affiche déjà une certaine maturité. Ces mecs ne sont pas dans le milieu depuis une plombe (formation du groupe en 2008) mais font preuve de belles dispositions malgré un C.V relativement peu garni. Je vais le dire plus clairement. Après une introduction vite oubliée, on reçoit « When It Comes » en pleine tronche. Son jeu carré, ses cadences galopantes, ses breaks poussifs et sa lead entêtante. ARKANAN propose d’entrée une création originale et forcément, on se dit que s’ils arrivent à maintenir le rythme sur les sept autres morceaux (sans compter l’intro, l’interlude et l’outro), on sera confronté à un exploit retentissant. Encore faut-il croire aux miracles. Le titre éponyme ainsi que « Trouble Inside » voir « Listen To Hear » et « Failing Down » entretiendront le suspens du haut de leur panache. Mais on ne parle déjà plus trop d’ingéniosité. Parce qu’on a comme l’impression qu’avec l’enchaînement « When It Comes » et « From Disaster Plays », les Nordistes ont mis le paquet pour créer un effet grippant sur l’auditorat et qu’au final, il n’est pas vraiment représentatif d’un album qui va lever le pied par la suite. L’interlude au piano « Way Of Doubt » était censée donner un nouveau départ à la rondelle, mais elle marque surtout la scission entre sa partie la plus lumineuse et l’autre, plus obscure et fade. Que ce soit sur « Infection » ou « Like A Passenger », ARKANAN perd clairement de l’altitude et s’engouffre dans un Metalcore très classique et sans grand relief. La production qui n’était déjà pas exceptionnelle mais qui était sauvée in extremis par la qualité des premières compos donne soudain un coup de bambou inattendu à From Disaster Plays qui sombre dans une drôle de facilité et dans des longueurs pas franchement espérées. Le Metalcore est un genre nerveux qui demande à être précis et expéditif. Les compos de cinq minutes, ça va une fois. Mais ici, ARKANAN en pond sept. Et je peux dire que même si j’aime beaucoup le style musical pratiqué, le trop plein de mélodies et les discours interminables, très peu pour moi. Pour finir, il faudra également vous adapter à un fait de jeu sujet à controverses ; le chant Screamo de Thomas Miazek, totalement suraigu et presque castrat. Il y a comme un air de fusion entre Alex Koehler (CHELSEA GRIN) et Thibault Sibella (TESS) et c’est pas franchement toujours très agréable, surtout quand du chant clair vient se greffer dessus (« Absent »).
Je ne suis pourtant pas complètement déçu de ma rencontre avec ARKANAN. Les Lensois ont proposé avec From Disaster Plays un album généreux en efforts mais foutrement inégal. Il démarre trop vite et trop bien pour que cette cadence puisse être assumée jusqu’au bout. A l’inverse, il ne sombre jamais dans le granuleux ou l’indigeste, proposant toujours son lot de mélodies qui décoifferont les plus chevelus d’entre nous. Et pour une toute jeune formation qui se lance en ces temps difficiles dans le Metalcore, faire ce type de constat à l’issue d’un premier disque est déjà une belle réussite.
Ajouté : Mercredi 03 Octobre 2012 Chroniqueur : Stef. Score :    Lien en relation: Arkanan Website Hits: 6312
|