# 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
}
WANING (se) - Population Control (2008)
Label : Eerie Art Records
Sortie du Scud : 23 décembre 2008
Pays : Suède
Genre : Black Metal Progressif
Type : Album
Playtime : 8 Titres - 51 Mins
Parler de Black Metal sans le faire rimer avec la Norvège, c’est rare. Et pour cause, c’est le pays qui lui a donné toute son essence maléfique. Alors, qu’à côté, la Suède versait dans le Death Mélodique et la Finlande dans la mélancolie de ses contrées hivernales. Toutefois, plus d’une fois les Suédois ont marché sur les plates-bandes du malin et, toujours en y posant de nouvelles conventions qui n’ont pas manqué de marquer le genre. On pourrait citer les ténors que sont BATHORY, DARK FUNERAL et MARDUK, mais aussi les suicidaires de SHINING ou les occultes WATAIN. Des noms désormais emblématiques du style, qui ont su proposer une musique novatrice. WANING a beau arriver quinze ans plus tard, il ne déroge pas à la règle avec ce premier album, Population Control, qui respire l’inventivité suédoise.
Le son du quintet est froid, industriel, comme l’annonce « (Mensch) » et ses diverses samples. Les compositions, longues, laissent ressortir le penchant Progressif du groupe qui prend le temps de construire ses atmosphères sans avoir le blast facile pendant une heure. Et ce, sur un fond de guitares saturées, grésillantes, qui contribuent à amener cette ambiance implacable. Les suédois arpentent plus les terrains d’ENSLAVED et SECRETS OF THE MOON, avec des morceaux intelligents, imprévisibles, qui passent d’une monotonie hypnotique à la force brute en l’espace d’une seconde (« Left To Hate »), décontenançant l’auditeur. C’est avec pesanteur que les pistes se meuvent, alternant les breaks fatalistes et ambiances lourdes, ponctuées d’une basse incommode. Sans suivre aucun code, ni un timing précis, les sections rageuses, aux percussions brutales, succèdent à celles étouffantes, créant des pièces variées, et toujours maitrisées. La basse n’est pas toujours décelable, tant les accords graves fourmillent, mais l’on ressent sa présence menaçante, damant le pas à des conclusions extrêmes où la combinaison de riffs dissonants et blast beats inhumains, sur des structures parfois techniques, laisse pantois. À savoir que l’instrumentation se voit affubler de longs passages pour s’exprimer seule et tisser ces atmosphères nébuleuses et tragiques.
Le machinisme des percussions renvoie également ce côté très mécanique, orchestré par un déferlement de frappes à la noirceur organique, mais sans toutefois partir dans tous les sens pour l’amour du chaos. L’instrument n’est pas surexposé et laisse la grosse caisse légèrement en retrait, ce qui n’empêche pas la double pédale d’imposer son agressivité, en s’envolant sur des cadences impossibles, tandis que les riffs saturés emplissent le spectre de leurs complaintes grinçantes. Que ce soit sur l’instrumentale captivante « Population Control » où les frappes se font dantesques avec le renfort de basse, ou bien sur le dévastateur « Crowning Apathy », le batteur prouve qu’il n’a pas besoin de taper fort pour descendre l’auditeur plus bas que terre. Sa précision chirurgicale en fait une machine effrayante parmi ces sections viles qui mettent les sens à nu (« Shades Of Grey »). Martial, le boulot est achevé avec un coup de poignet mordant, alors que les riffs se déversent, abrasifs, renvoyant cette image d’insalubrité, d’insécurité. Le chant ne s’accorde également guère d’émotions. Puissante, intransigeante, c’est une voix rocailleuse qui déverse les paroles avec une aversion palpable. Minoritaire sur les pistes, le chant est guttural, éraillé, et posé avec parcimonie pour accompagner cette aura lourde. Pas de questions, pas de fioritures. Les vocaux sont là, à l’instant présent. Ils personnifient la puissance de l’instrumentation, jouant sur les cadences et sonorités pour rendre l’exécution plus sensorielle encore. Peu nuancé, le frontman se place parfaitement dans les compositions, sans trop en faire, et distribue la juste dose de rage, et désolation (« Further Down The Strain »).
Des explosions intenses amplifiées par le travail des guitares. De leurs riffs extrêmes, granuleux, elles densifient l’ambiance obscure, avec quelques accords stridents qui se perdent dans cette masse grouillante, renforçant le malaise du moment. Les cordes saturées parviennent à s’imprégner des sentiments négatifs des paroles, spécialement sur les tempos ralentis lorsqu’elles tournoient sur un ton dévasté, et semblent glaner une dimension dépressive. On pourrait reprocher l’homogénéité globale, et le fait que certains morceaux, tel « Swarm », malgré ses invectives secouantes, n’aient pas la même puissance évocatrice à cause de certaines longueurs. Mais il s’agit tout de même d’une production léchée, pertinente, qui nous propulse dans les coins sombres de la pensée humaine ; une épopée interne rageuse et accablante. Et, suite à trois quarts d’heure inhumains, éprouvants, ce sont les accords acoustiques de « Hollow » qui accrochent l’oreille. Une pommade finale que nous passe le groupe, une mélodie d’adieu où la basse résonne dans les entrailles. Puis les saturations se greffent, avec des riffs phénoménaux, et une voix rauque colossale. Une ultime piste magistrale, neuf minutes desquelles l’on ne peut se détacher, où une pointe d’émotion perce et transcende la musique des Suédois. Une composition à la fois belle et bestiale, à couper le souffle.
Le déclin, c’est ce que propose WANING en huit mesures, la dernière gagnant une telle intensité qu’il vous sera difficile de vous relever après coup. Pourfendeurs de la condition humaine moribonde et désespérée, ils déversent leurs pensées cinglantes dans un Black Metal minutieux et parfaitement ambiancé. S’il est peut-être difficile de complètement rentrer dans leurs univers glacial, très compact, il l’est encore davantage de sortir de cette tourmente. Moderne, méthodique, et racé, cet album n’a que pour unique but de vous abandonner, dépouillés.
Ajouté : Mercredi 10 Octobre 2012 Chroniqueur : CyberIF. Score : Lien en relation: Waning Website Hits: 7816
|