# 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
}
NEIGE ET NOIRCEUR (ca) - Gouffre Onirique Et Abîmes Cosmiques (2014)

Label : Sepulchral Productions
Sortie du Scud : 28 mars 2014
Pays : Canada
Genre : Black Metal atmosphérique
Type : Album
Playtime : 8 Titres - 54 Mins
Sepulchral Productions a révélé au monde quelques entités intéressantes au travers des années, et les groupes produits par ce label sont toujours dignes d'attention. Que ce soit GRIS, SOMBRES FORETS ou MONARQUE et FORTERESSE, leurs oeuvres sont toujours emplies d'une beauté certaine dans le désespoir, même si leur approche est parfois déroutante pour le néophyte. Ils partagent tous ce goût pour les longues ambiances glaciales, les digressions semblant parfois interminables néanmoins toujours animées d'une passion indéniable, et un certain minimalisme qui peut rebuter.
A cette liste non exhaustive s'est rajouté depuis quelques temps NEIGE ET NOIRCEUR, du self made canadien et homme orchestre Zifond Spiritus Malabus. La première démo de ce one piece band, Pour Te Dire La Fin, date en effet de 2005, et a été suivie d'une kyrielle de productions, principalement des split et des compilations. Spiritus a quand même trouvé le temps d'enregistrer trois LPs, aux titres aussi évocateurs que possible.
Car l'univers de l'homme est à l'image de sa musique. Sombre, étouffant, suintant la claustrophobie et la misanthropie par tous les pores. Certes, la combinaison est connue, la formule est éprouvée, mais je n'ai pu m'empêcher d'être fasciné par les pistes proposées sur ce Gouffre Onirique Et Abîmes Cosmiques, de par leur unicité, mais aussi pour la progression transgressive qu'elle étalent au fur et à mesure des minutes qui passent.
Si Spiritus en tant que compositeur unique fait preuve d'une belle cohérence et reste fidèle à une ligne de conduite précise, il n'hésite pas à disperser le long de son chemin quelques éléments surprenants, des arrangements inattendus, qui sans perturber la logique de sa narration musicale, dynamisent l'ensemble et apportent un caractère presque "romanesque" à son travail. Si le terme de Black Atmosphérique n'est pas forcément incongru pour décrire son univers, il convient d'y apporter une nuance de taille. Point de morceaux monotones dénués de toute variation sur ces sillons, mais bien un Black de tradition, très cru, très malsain, qui évolue en circonvolutions hypnotisantes, et développe un tracé progressif qui lie chaque morceau à son ensemble.
Si la première piste de Gouffre Onirique privilégie une atonalité linéaire, et suit la même construction mélodique tout du long, avec un chant très lointain et une tempo écrasant, ça n'est que pour planter un décor dessiné à l'avance qui va progressivement muter lors des changements de tableaux. Car Spiritus utilise toutes les composantes d'un style qu'il connaît par coeur et maîtrise à la perfection, et varie les riffs, les rythmiques, insuffle des choeurs fantomatiques et synthétiques, en gros, offre tout ce qu'il peut pour arriver à ses fins.
L'homme arrive même à faire de ses faiblesses une force. Ainsi, même si sa solitude l'oblige à employer une boite à rythmes, il l'utilise de façon si personnelle qu'elle s'intègre parfaitement aux instruments plus traditionnels, et accentue l'aspect étrange et unique de ses morceaux.
Même si aucun d'entre eux n'est isolable sans handicaper l'ensemble, j'admets que "La Marche des Astres Noirs" est celui qui m'a le plus interpellé.
Tension maladive, crescendo subtil, fausse linéarité trompeuse, c'est un titre très fort, s'étalant sur près de neuf minutes (comme presque toute la première moitié de l'album), qui ressemble à croisement cauchemardesque entre un NEUROSIS particulièrement retord et un BURZUM très nocif.
Mais le triptyque final "La Caverne de Glace" est aussi une façon superbe de conclure cette épopée chatouillant l'heure d'écoute, tant ses trois parties synthétisent la démarche de leur auteur à la perfection. Après une entrée instrumentale et caverneuse (c'est le cas de le dire) digne de LUSTMORD ou des JOYAUX DE LA PRINCESSE de cinq minutes, qui éclabousse le second segment, très court et très malsain, Spiritus se lance dans un long monologue sentencieux, à peine souligné par un clavier discordant, avant de laisser exploser sa haine dans un long final aussi puissant que majestueux, dans la droite lignée des albums les plus épiques du BATHORY période viking. Cette longue progression de presque quinze minutes vous laisse le souffle coupé, happé par une aventure qui vous fascine autant qu'elle vous englobe.
Beaucoup d'entre vous ne comprendrez pas mon enthousiasme lorsque vous aurez découvert Gouffre Onirique Et Abîmes Cosmiques. Vous trouverez sans doute ce disque très répétitif, pas très innovant, et vous vous demanderez pourquoi j'ai été si dithyrambique à son égard.
Je pense tout simplement que cette musique en appelle à la sensibilité de chacun, et que NEIGE ET NOIRCEUR a touché la mienne. Vraiment.
Et que Spiritus fait partie de cette caste de musiciens dont on adore ou déteste l'univers. Mais que l'on aime ou pas, il convient de souligner le travail accompli, qui lui, mérite le respect quoiqu'il arrive.
Ajouté : Dimanche 27 Juillet 2014 Chroniqueur : Mortne2001 Score :      Lien en relation: Neige Et Noirceur Website Hits: 12362
|