# 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
}
ELYSIAN BLAZE (au) - Beneath Silent Faces (2008)
Label : Osmose Productions / Socadisc
Sortie du Scud : 2008
Pays : Australie
Genre : Depress Black Metal
Type : Album (Réédition de démo pour la zone Euro - 2004)
Playtime : 7 Titres - 50 Mins
Neurasthéniques, n’approchez pas ! Prostrés, pas un pas de plus ! Je déconseille également une approche trop directe d’ELYSIAN BLAZE aux névrosés, psychopathes, récents éconduits de Cupidon et bien entendu, aux baltringues qui ne peuvent résister au spleen sans un rembourrage de Pampers. Car se farcir un tel groupe, c’est tout sauf une partie de jambes en l’air. D’ailleurs, heureusement que je ne suis pas psychologiquement instable, qualité sans laquelle j’aurais déjà pu trépasser. Découvrant le nom de cette création pour la première fois sur la liste de choix de disques mise à notre disposition par notre webmaster bien aimé, j’ai été (en bon sado-maso, je l’avoue) attiré par la juxtaposition « Depressive Black Metal ». Et avant une bonne immersion dans le pessimisme et la mélancolie, mieux vaut ne pas risquer de mourir idiot. C’est pourquoi je suis en mesure de vous apprendre qu’ELYSIAN BLAZE est un one-man band (à l’image d’ARS DIAVOLI tout récemment) créé et entretenu par celui-dont-on-ne-doit-pas-prononcer-le-nom, le grand Mutatiis (damned !). Egalement que Mutatiis (re-damned !) nous arrive de loin, fort loin, d’un pays où les wallabys se nourrissent d’un farrago dopant et où Darwin, en plus d’être le nom d’un naturaliste controversé, est aussi le substantif d’une grande ville. Les incollables atteints de Julien-Lepersite auront déjà saisi que nous traitons de l’Australie. Pour en revenir à nos ovins, et conclure par la même occasion cet interminable avant-propos, je vous informe que l’origine de Beneath Silent Faces remonte à 2004, en qualité de « sold out démo ». Nous avons donc ici affaire à une réédition concoctée par le label Osmose Productions spécialement pour nous, amis européens !
Première constatation, ELYSIAN BLAZE ne fais pas dans une parodie de Black Metal teintée d’oppressantes (et trop souvent lourdingues) orchestrations. Notre hôte joue le jeu à fond. Les saturations se font discrètes, planantes et pas déchirantes ni subjuguées par les caprices d’un batteur fou. D’ailleurs, l’utilisation des fûts est assez éparse, Mutatiis préférant apparemment les résonnances de la cymbale à la profondeur de la caisse claire. Ce qui nous offre des perspectives beaucoup plus intenses et moins salies d’amateurisme. Comme de coutume, les plages prennent une dimension épique voire parfois emmer…. ennuyantes. Il faut vraiment être féru du style pour apprécier dix minutes durant la monotonie de « The Throned Tongue Of Requiem ». De mon côté, je préfère l’abyssale « Prophecy Of Misery » pour ses nuances de Black vieille école et ses affres planantes. Question de goût. Les usages des voix sont aussi particuliers. On est à même de retrouver des plaintes autrefois propres à quelqu’un comme Varg Vikernes (BURZUM) en passant par Nattramn (SILENCER). Là encore, c’est une question de goût. Mais une singularité certaine est palpable. A prendre en compte. Pour peu que l’ennui vienne nous chatouiller les oreilles et masser nos paupières, Mutatiis fais alors parler le temps. Nous étions en 2004. Année de l’apparition de Beneath Silent Faces, démo six titres à deux cents petites copies. Trois ans se sont écoulés, forgeant en l’esprit du créateur du projet une âme solide. Ce dernier nous gratifie alors sur cette réédition d’une septième piste, bonus, « Despair », logiquement recorder il y’a peu. Esseulée en fin de disque, je n’irais pas jusqu'à dire qu’elle porte bien son nom, mais son contenu est redoutable de professionnalisme. Un tempo groovy, des atmosphères d’évasion et surtout une remarquable lampée de claviers, enfin clairement audibles ! C’est peut être ce qui manquait à ELYSIAN BLAZE, une clairvoyance et une pureté dans un jeu trop souvent étouffé. C’est le genre qui le veut, sans problème, mais c’est tellement plus agréable d’entendre des notes claires résonner sur des fréquences épurées. En définitive, une plage qui nous laisse sur une bonne impression et qui nous fait oublier le reste.
Ce serait hypocrite et irrespectueux vis-à-vis du message transmis par notre ami australien de dire qu’on a passé un bon moment (même si c’est théoriquement vrai). Alors pour en revivre de semblables, je n’hésiterais à qualifier Beneath Silent Faces de profondément désespérant, d’infiniment malsain et torturé tout en me jetant dès à présent sur la suite du programme, l’attirant Levitating The Carnal. On se donne rendez-vous en enfer.
Ajouté : Jeudi 16 Octobre 2008 Chroniqueur : Stef. Score : Lien en relation: Elysian Blaze Website Hits: 8925
|