# 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
}
BASARABIAN HILLS (md) - Enveloped In The Velvet Cloak Of Midnight (2015)
Label : Le Crepuscule du Soir
Sortie du Scud : 22 avril 2015
Pays : Moldavie
Genre : Black Metal atmosphérique
Type : Album
Playtime : 4 Titres - 34 Mins
Le Black Metal ne connaît pas de frontières, l'ambient non plus, alors le Black atmosphérique ambient non plus par extension.
Il est vrai qu'on l'attend plutôt du côté de la Norvège, de la Suède, de l'Allemagne, de France ou d'Amérique du sud, mais il peut aussi surgir de pays plus lointains (tout dépend du point de vue où on se place), mais dont la production discographique dans les styles extrêmes est beaucoup moins importante. Ainsi, prenons la Moldavie.
Transformée en Syldavie par Hergé, pays d'Europe centrale coincé entre la Roumanie et l'Ukraine, ses paysages ressemblent selon l'avis populaire à ceux de notre charmante Bourgogne, et on trouve, là bas, du côté de Fălești, un musicien au sobriquet étrange, Spirit Of The Forest.
Spirit Of The Forest et son groupe BASARABIAN HILLS nous "parle" de la nature, spécialement des hauteurs de la Bessarabie, ancienne goubernia Russe qui occupe tout le territoire de Moldavie. Je mets le verbe "parler" entre parenthèses, puisque jamais vous n'entendrez la voix du maître, ses albums étant strictement instrumentaux. Et là encore, une restriction s'impose.
Ne connaissant que très peu le reste de sa production, je me baserai sur mon expérience de Enveloped In The Velvet Cloak Of Midnight et de son album précédent.
Mais aujourd'hui, je ne vous parlerai que de ce dernier. En fait d'instruments, Spirit Of The Forest est surtout fasciné par les claviers, et les arrangements électroniques. Si je l'ai rangé dans la case du Black atmosphérique, c'est uniquement pour le fond de sa démarche, basée sur la misanthropie et le retour à la nature, qu'on retrouve chez bien de ses contemporains évoluant sur la même branche.
Donc attention, ne vous attendez pas à des bronca de rythmiques épuisantes, encore moins à des éclairs vocaux stridents époumonant ou à des empilages de riffs acides et aigus, ici tout n'est qu'harmonie, visions auditives paisibles, et zen attitude un brin hivernale.
Si les albums de BURZUM post incarcération vous indiffèrent, voire vous rebutent, il y a peu de chance que les efforts de notre homme du jour vous passionnent. Constitué de quatre pistes dont trois atteignent ou dépassent les neuf minutes, Enveloped In The Velvet Cloak Of Midnight est basé sur des nappes de synthé créant des ambiances oniriques et bucoliques, et gageons qu'elles doivent prendre une autre dimension dans le décor qui a inspiré leur création. S'il est vrai que certains thèmes évoquent à merveille la solitude d'un homme plongé dans ses racines naturelles, écouté à la maison, le casque sur les oreilles et l'écran LCD comme seul témoin, leur portée est moindre.
Car Spirit Of The Forest à un leitmotiv. Il trouve une mélodie qu'il juge d'importance, et la travaille pendant dix bonnes minutes, sans dévier de ses fondamentaux, tout au plus en s'accordant quelques variations très infimes, que l'on perçoit si l'on fait preuve de la plus grande attention.
Alors une fois ce postulat énoncé, deux solutions. Soit l'harmonie principale vous sied, et vous êtes à même d'en apprécier la richesse sur une durée étirée au delà du raisonnable, soit elle vous irrite, et l'écoute ne durera qu'une ou deux minutes.
De plus, il faut aussi préciser qu'au départ, il vous sera indispensable d'être rodé à ce genre d'expérience, car dans le cas contraire, il est inutile de tenter de poser vos oreilles sur BASARABIAN HILLS. Aucun instrument traditionnel, aucune recherche de variations, certains crieront comme dans le cas de BURZUM à l'imposture évanescente, au pare feu cachant un manque cruel d'inspiration. D'autres au contraire, à l'esprit plus ouvert ou à l'approche plus sensible y verront la mise en couleurs musicales d'un sentiment premier, celui d'attirance naturelle envers ses besoins les plus primaux, la solitude, la communion avec la nature et le respect pour celle-ci.
Il n'empêche que musicalement, c'est un album, comme tant d'autres dans son style qui ne s'écoute pas dans n'importe quelles conditions.
A la lisière d'une forêt, dans un bois, sur un pic, dans les montagnes, écouté au casque dans un esprit de recueillement, son impact doit certainement être beaucoup plus important que glissé dans une platine lors d'une soirée entre amis.
Il faut supporter les nappes de clavier qui tournent en boucle, néanmoins polies par une production claire et ample.
C'est en tout cas un mode d'expression, et c'est indéniable. A vous de savoir si vous devez être concerné ou pas, et si vous serez touché par des titres très longs, sans digression, qui se situent à l'antithèse de toute progression, et qui reposent sur un mantra répété sans cesse, créant un climat d'hypnose sinon désagréable, mais routinier pour les non initiés.
It's up to you now...
Ajouté : Jeudi 10 Septembre 2015 Chroniqueur : Mortne2001 Score : Lien en relation: Basarabian Hills Website Hits: 4828
|