# 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
}
ZAPRUDER (FRA) - Fall In Line (2014)
Label : Hipsterminator Records
Sortie du Scud : 20 octobre 2014
Pays : France
Genre : Post Hardcore
Type : Album
Playtime : 9 Titres - 42 Mins
Deux ans pile après la sortie de leur premier EP, Straight From The Horse's Mouth, qui m'avait séduit, les frenchies de ZAPRUDER reviennent avec cette fois-ci un longue durée, qui concrétise enfin ces premières années de gestation. De salles de concerts en salles de répète, le quintette poitevin à eu le temps de roder son style, qui, s'il emprunte pas mal d'intonations Post Hardcore, n'en reste pas moins diablement personnel.
Et comme pour mieux enfoncer le clou et se démarquer un peu plus, Fall In Line va plus loin, déconstruit la base pour mieux la rebâtir avec forces dédales et longs couloirs qu'on emprunte une faible lumière à la main.
Et si justement, la lumière et les ténèbres étaient les clés pour comprendre leur démarche ?
Si comme moi, vous avez connu les ZAP via leur premier effort, un conseil, oubliez tout, ou presque. Puisque c'est ce qu'ils ont fait eux mêmes. Car si leurs cinq premiers titres offraient nuances et paysages délicatement vallonnés, Fall In Line se complait la plupart du temps dans la violence la plus crue, la plus directe, sans empathie aucune. Une violence très sèche, à l'aridité Hardcore, qui frappe durement, rapidement, et sans s'embarrasser d'effets de manche. Et les rares bouffées d'oxygène que le groupe daigne nous offrir sont moites, étouffantes, et pernicieuses. Tout du moins sur les trois quarts de l'album. avant que tout ne change, en un revirement spectaculaire, qui donne soudain une nouvelle dimension à l'oeuvre. Je parlais de lumière, de ténèbres, voyez Fall In Line comme un sentier escarpé, qui s'enfonce dans les tréfonds d'une forêt inquiétante, avant que les rais du soleil ne viennent enfin vous libérer de vos craintes. Et vous faire comprendre pourquoi vous êtes là, même si vous le saviez déjà.
La volonté de ZAPRUDER était claire dès le départ. Déstabiliser, surprendre. Et de ce point de vue, l'opération est une réussite totale. Assemblage improbable de pistes très courtes et de dilutions temporelles, Fall In Line est une preuve directe de l'incroyable créativité des cinq musiciens, mais surtout de leur envie de proposer quelque chose de différent. A l'instar d'HYPNO5E, le quintette refuse les conventions, s'en amuse, pour n'en extraire que la subtile essence qui leur permettra d'exposer leur point de vue sans entraves. Si leur entame est franche et sans ambiguïté ("We Are Orphans", sa rage suintante et ses blasts surprenants), dès "Cyclops", l'affaire se corse. Car même avec une transition assurée par une rythmique affolée, l'atmosphère se fait plus malsaine, le tempo écrasant et asphyxiant, les arrangements plus compacts et menaçant, et le tout se tend d'une toile d'araignée à la FETISH 69 dans laquelle l'auditeur se retrouve piégé sans mouvement possible. Guitares fendant l'espace, chant suffocant, tout le spectre sonore est rempli, et aucune lumière ne filtre.
Moins opaque mais tout aussi déchirant, "Modern Idiot" débute comme une dérivation Core sous haute tension, presque digne du NYHC des années 80, avant de s'oublier dans un break funk malsain inopiné, s'échappant lui même dans une variation finale menant au terrible "Moloch", monstre de puissance de six minutes, se lâchant complètement dans un segment instrumental que les légendaires NEUROSIS n'auraient certainement pas renié.
Et tandis que le court instrumental "Delusion Junction" laisse son sax apaisant illuminer le panorama, le lapidaire "Doppelgänger" se vautre dans une sorte d'hybridation Deathcore sinistre, alterne les cassures, laisse les vocaux âpres déchirer le ciel de leurs cris sauvages, alors que les guitares en roue libre strient l'horizon de lacérations rappelant autant UNSANE que BREACH. Cette dernière influence est aussi palpable sur le concis "Monkey On My Back", qu'on aurait pu retrouver sur le séminal Venom des Suédois. Même instinct naturel les guidant vers le chaos maîtrisé, mêmes larsens contrôlés, même tendance à casser une ligne droite pour la changer en hyperbole diabolique s'échappant vers des sommets de bruit blanc assourdissant...Avec son final en forme de coda dissonante, ce titre est un des moments les plus forts (dans tous les sens du terme) de l'album, et - en quelque sorte - le moment T où les ténèbres laissent place à la lumière la plus pure.
Et comme une aube se levant après une nuit de cauchemar, le soleil acoustique de "Loquèle", aux rayons purs et délicats vient soudain plaquer le silence sur ce chemin qui semblait traumatique et sans fin. Ses arpèges doucereux et sa mélodie subtile, porté par le chant serein de Quentin résonnent comme une voix rassurante dans le noir, et donnent une aura particulière à toute la première partie de l'album, dont la violence et l'agression se trouvent soudain validées d'un autre regard.
Et le long final épique "Je Ferai de ma Peau une Terre où Creuser" de jouer le rappel avec le jeune passé du groupe, tant il rappelle les grandes heures de Straight From The Horse's Mouth en les synthétisant avec brio. Huit minutes de totale liberté musicale, durant lesquelles les cinq musiciens partent dans toutes les directions tout en gardant une cohésion incroyable, soufflant le chaud et le froid, et réussissant à canaliser leur puissance pour en émettre une énergie positive, même dans les passages les plus instables. Sans pour autant oublier les harmonies en route, puisque ce sont elles qui clôturent ce disque, comme un ultime clin d'oeil d'une entité qui désire laisser le positif en tête après avoir étalé le négatif pendant plus d'une demie heure.
Les intentions de ZAPRUDER ont toujours été honnêtes et claires. Vous faire voyager, vous surprendre, vous embarquer dans un voyage personnel qu'ils vous laissent traverser comme bon vous semble. Leur musique n'impose rien, si ce n'est sa qualité, mais vous donne des indices, des étapes, que vous avez le droit de prendre en compte, de suivre, ou pas.
Sans jamais s'enfermer dans un carcan musical, ils puisent de ça et là des éléments qu'ils incorporent à un tout qui n'appartient qu'à eux, un tout qui résonne d'échos métalliques bien sur, mais qu'il serait dérisoire de limiter à ça. Tout comme leurs homologues d'HYPNO5E, ils pensent musique, sans chercher à savoir d'où elle vient, et tracent un chemin aux circonvolutions parfois déroutantes, mais qui se révèle au final logique, avec un point de départ et d'arrivée déterminés bien à l'avance.
Et si Straight From The Horse's Mouth était une carte de visite plus que convaincante, Fall In Line n'est rien d'autre qu'une solide carte d'identité à la photo un peu floue, qui affirme sans imposer, qui laisse deviner sans être catégorique. ZAPRUDER, groupe aux visages multiples reste encore aujourd'hui difficile à cerner. Mais il est d'un autre côté facile de comprendre qu'il est d'ors et déjà un grand sur lequel il faudra compter. Un très grand même.
Ajouté : Samedi 13 Septembre 2014 Chroniqueur : Mortne2001 Score : Lien en relation: Zapruder Website Hits: 46042
|