# 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
}
WISENT (de) - Gros Morne (2015)
Label : Auto-Production
Sortie du Scud : 6 mai 2015
Pays : Allemagne
Genre : Experimental Ambient Black Metal
Type : Album
Playtime : 4 Titres - 53 Mins
"Liberation or obliteration?
A great number of the human species believe that the universe and all life within it has been created for their use.
This is not so.
These humans are the forces of their own extinction. We must choose not to be among them.
In the reflection of the great eyes of Earth, we can see:
A reckoning approaches."
WISENT résume ainsi sa démarche. Qu'on adhère ou non au propos, il est impossible d'en contester sa sincérité. Le groupe allemand développe ainsi des thèses chères au végétarisme, au non consumérisme, et à l'égocentrisme de l'homme qui tend à ne voir en sa planète, sa faune et sa flore, que des sources de confort et de plaisir personnels.
Ainsi, notre race court à sa propre destruction, et il parait impossible d'inverser cette tendance, sauf si, par miracle, nous devenions capable de nous contenter de ce dont nous avons besoin. Le pari est il relevable ? J'en doute, et WISENT aussi, même si selon eux, il suffirait de presque rien pour que nous parvenions à sauver notre monde et les espèces qui y vivent, nous y compris.
Pour exprimer sa philosophie et ses points de vue, le groupe à choisi un créneau difficile, celui du Black ambient plus ou moins expérimental. Dès le départ, la tâche est rude, mais elle le devient encore plus lorsqu'on considère le format choisi à l'intérieur même du style hermétique pratiqué. WISENT n'a pas choisi la facilité, et après un premier effort sorti l'année dernière, Total Liberation (qui n'est rien de moins que l'état que pourrait connaître l'homme après s'être affranchi de ses chaînes d'habitudes malsaines), les allemands nous reviennent avec un nouveau longue durée qui pousse le concept encore un peu plus loin.
Quatre morceaux pour plus de cinquante minutes de musique, on pouvait craindre le pire. De longues digressions vaines, des effets sonores destinés à cacher la pauvreté de leur inspiration, des bavardages intempestifs sur un thème étiré à l'envi, des parties rebattues à longueur de segments... La liste risquait d'être longue et rédhibitoire, mais au final, elle n'a pas lieu d'être. Car même si la formule est difficile à appréhender, même si l'effort peut rebuter, ce disque parvient en moins d'une heure à coller à une éthique, à un leitmotiv qui peut se vouloir extrémiste (les propos du groupe tendent à partir dans cette voie, bien qu'ils tentent de prôner une certaine modération), et provoque les réactions souhaitées chez l'auditeur.
Découpé en quatre mouvements, Gros Morne et son titre étrange ne lasse jamais. Bien qu'aucun des morceaux ne passe sous la barre des dix minutes, ils sont tous construits selon une progression logique, travaillent un thème bien précis en le faisant évoluer sans en avoir l'air, et sont fascinants, tant dans la forme que dans le fond.
Exploitant toutes les possibilités bruitistes qui s'offrent à eux, les allemands n'hésitent pas à piocher dans le Black traditionnel, l'Indus martial et sombre, l'Ambient pur et dur, et créent des ambiances parfois cauchemardesques, souvent oppressantes, de temps à autres malsaines, pour au final peindre une symphonie atonale privilégiant le noir et blanc et l'introspection douloureuse.
Il est possible de voir en Gros Morne une dualité Némésis/Catharsis, un chemin de croix avant d'entrevoir la lumière de la vérité, mais il est aussi possible de n'y voir qu'un disque bouillonnant de créativité, qui loin de ressasser les mêmes idées pendant une heure, triture les sons, tord les guitares pour les faire s'exprimer d'une façon nouvelle, sans hésiter à déstabiliser le fan potentiel en le faisant tanguer sur une mer de ténèbres. Ainsi, l'imposant "Ilulissat" n'a de cesse de louvoyer entre plusieurs motifs, monte en puissance le long de riffs pesants et lourds, pour arriver au final à créer un style à part entière, qui doit autant à l'extrémisme bruitiste qu'au Black moderne et robotique.
Comme je le disais, chaque pièce à sa propre raison d'être, tout en restant un morceau d'un énorme puzzle/labyrinthe qui vous perd dans ses dédales. Si le premier morceau se veut sobrement Black Ambient, "Gros Morne" n'hésite pas à emprunter au registre du Raw Black Symphonique, alternant les blasts et les climats délétères de claviers fantomatiques. Le dernier chapitre, "Danau Toba" et ses presque vingt minutes, n'est rien de moins qu'un magma de lave incandescente au développement pour le moins impressionnant, comme une apocalypse musicale illustrant les derniers instants d'une terre que les hommes n'auront pas su préserver.
C'est un morceau absolument inclassable, qui pioche dans le répertoire extrême sans dévoiler ses emprunts, et qui évolue tout du long pour se transformer en longue litanie aussi envoûtante qu'effrayante. Un peu comme si LUSTMORD, NEUROSIS et IN SLAUGHTER NATIVE unissaient leurs forces pour symboliser une libération musicale et naturelle dans un chaos qui ne rechigne pas à se montrer mélodique, toutes proportions gardées. Une rédemption, une ultime prière avant la fin du monde tel que nous le connaissons.
Gros Morne, et c'est un euphémisme, ne s'adresse pas à tout le monde. Mais ses qualités indéniables, et l'adéquation entre son message musical et philosophique sont réellement impressionnants. C'est d'une cohérence rare, une démonstration de puissance, celle dont pourrait faire preuve la nature lorsqu'elle aura décidé de se débarrasser de ses hôtes envahissants et égoïstes. Si telle est la bande son prévue ce jour là, je serai heureux d'en être le témoin.
En attendant ce jour funeste, vous pouvez en avoir un avant goût, mais méfiez vous. Le monde de WISENT est sans empathie, et sans pitié. Une fois à l'intérieur, vous pourrez hurler de peur, vous extasier devant sa beauté rude, mais en aucun cas vous ne pourrez en sortir.
Ajouté : Lundi 14 Septembre 2015 Chroniqueur : Mortne2001 Score : Lien en relation: Wisent Website Hits: 5750
|