# 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
}
CROWN (FRA) - Natron (2015)
Label : Candlelight Records
Sortie du Scud : 14 août 2015
Pays : France
Genre : Industrial Sludge
Type : Album
Playtime : 7 Titres - 49 Mins
La France a toujours eu une relation particulière avec l'électronique. Evidemment, le monde vénère AIR, les DAFT, CASSIUS, mais l'underground regorge de musiciens talentueux que le grand public ignore, faute de promotion suffisante, ou d'un style un poil trop pointu et/ou excentré. Lorsqu'il s'agit de combiner l'atmosphère Rock, New Wave, Disco avec des arrangements synthétiques, nous sommes en droit de revendiquer un certain flair, une aisance naturelle qui se confirme aujourd'hui avec brio. En effet, le deuxième longue durée du trio alsacien de CROWN, Natron, apporte sa pierre à l'édifice, et de fort belle et froide manière...
Formé en 2011, le duo/trio (aujourd'hui constitué de Stephane Azam - guitare, voix, machines; Pascal Guth - guitare et Frederyk Rotter - guitare, voix) poursuit sur cette nouvelle livraison les travaux entamés sur The One il y a quatre ans, mais surtout ceux dont Psychurgy définissait les contours en 2013.
En clair, CROWN se revendique d'influences notables. KILLING JOKE bien sûr, pour cette approche froide de l'Industriel déshumanisé, NINE INCH NAILS, pour ces rythmes en boucles hypnotiques, mais aussi ISIS ou SUN O))) pour l'épaisseur du son et ce rythme empesé. Certains aiment à décrire leur musique comme du Sludge Indus, et j'avoue que si la juxtaposition est osée, le parallèle n'est pas inintéressant. Mais si les guitares du Doom restent toujours profondément organiques, celles du trio alsacien sont glacées, viscéralement désincarnées et répètent le même motif dans une régularité métronomique. L'univers de CROWN est sombre, mécanique, rempli d'itérations, de récurrences et d'oppositions symétriques qui excluent de fait toute intervention humaine. Mais loin de stériliser l'émotion, cette absence de ressenti épidermique renforce la fascination qu'exercent leurs morceaux, et à ce niveau, Natron atteint un paroxysme.
Découpé en sept chapitres de durées variées, Natron est une description de ce que pourrait être notre avenir si l'homme laissait la machine prendre le dessus. Certains segments laissent se développer des motifs sur près de dix minutes, mais loin de se montrer roboratifs, ces parties mettent l'accent sur le chaos brut et le bruit blanc immaculé ("Wings Beating Over Heaven", qui se permet le luxe d'enchaîner une intro Black à la MAYHEM avec une suite qui se confond dans les méandres de l'esprit torturé de Reznor et Coleman). D'autres au contraire, font la part belle au Post Wave des années 80, en citant cette fois ci le JOKE de Brighter Than a Thousand Suns ou même pourquoi pas, le CURE de fin de décennie. Rythmique dansante, chant clair et plaintif, basses subtiles et choeurs en arrière plan, "Fossils" apporte un peu d'air frais, placé pile à mi parcours.
Mais la pièce vers laquelle convergent toutes les attentions est sans conteste "Tension of Duality", et son long monologue monochrome qui superpose grondements sonores profond et itératifs, portés par des guitares extrêmement graves, et instants de silence à peine interrompu par quelques arrangements rythmiques espacés. le chant se fait plus rare, laisse parler la musique, et on pourrait penser à un rêve commun, partagé en une nuit totalement opaque par le jeune Michael GIRA, encore obsédé par le fracas inconnu, et les membres de SUN O))), terrifiés par l'obscurité. Lourd, lent, martial, c'est un traitement stable qui s'installe et prend son temps, pour finalement vous emporter dans de violentes décharges inopinées.
De son côté, "The Words You Speak Are Not Your Own" calque plus ou moins ce schéma, en l'aérant de quelques mélodies lointaines à peine perceptibles.
Et si le parrainage de Trent le maître devait trouver son incarnation la plus absolue, il se pencherait sur le cas du désaxé et initial "Serpents", qui se joue des boucles analogiques de son mentor pour les insuffler dans une saillie presque sexuelle que n'aurait pas boudé le grand Peter Steele.
Certes, j'en conviens, il faut être rompu à l'exercice de style pour accepter de pousser les portes du monde de CROWN, et accepter de les voir se refermer. Cette patine d'acier et de rouages sans fin est difficile d'accès, mais le trio frenchy en manie les codes avec une aisance rare, et surtout, chercher constamment une façon de faire évoluer les choses, loin de se contenter de laisser le rythme et les grosses guitare faire tout le travail. Le chant est particulièrement soigné, rauque et abrasif sur les accolades les plus franches, délicat et caressant dans les rapprochements intimes, mais toujours juste.
Riffs accrocheurs et graissés, comme de l'huile coulant dans les rouages, assemblage de pattern inspiré, Natron confirme tout le talent de CROWN pour distiller des ambiances sourdes et froides.
Comme le dit très justement leur bio, leur musique est lourde et oppressante, menant à un abîme de vide. Mais Natron, comme le reste de leur discographie est loin d'être vide. Il est au contraire rempli de sensations contraires qui provoquent, dérangent, et laissent une trace indélébile dans les coeurs piégés dans les tours d'acier.
Ajouté : Jeudi 24 Septembre 2015 Chroniqueur : Mortne2001 Score : Lien en relation: Crown Website Hits: 5726
|