# 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
}
NEBUNAM (FRA) - Nebunam (2008)
Label : Karge Welten Kunstverlag
Sortie du Scud : juin 2008
Pays : Allemagne
Genre : Black Metal
Type : EP
Playtime : 2 Titres - 25 Mins
Vous non plus, vous n’avez aucune idée de la façon dont vous allez nommer votre groupe ? Faites donc comme NEBUNAM ! Prenez les diminutifs des prénoms des membres et accolez-les à l’envers. Le duo Manu-Ben forme donc… NEBUNAM ! Si c’est pas du top niveau ça, j’y comprends plus rien. Et puis franchement, pour un groupe de Black Metal allemand, c’est quand même moins difficile à prononcer que VERNICHTUNG, VERGÄNGLICHKEIT, GRABFINSTERNIS, WALDGEFLÜSTER, WELTENSCHWAERZER ou GRABNEBELFÜRSTEN (à noter que tous ces groupes de Black Metal existent et qu’ils ont été classés par ordre de difficulté). Mais pour en revenir à notre duo, puisque le coup de Manu-Ben, c’était pas des blagues, la liaison entre les deux a été établie en 2002 et très vite, un premier titre a vu le jour et a été publié sous forme de démo (A Winter’s Tale en 2003), avant d’être remasterisé pour les besoins de cet EP et accompagné d’un nouveau titre exclusif, le bien nommé « Sturm ».
Deux titres, deux très longs titres. Voilà ce qui compose l’ossature de Nebunam et qui va me contraindre, bien malgré moi, à faire du track-by-track. « A Winter’s Tale » est introduit par un vent froid qui ouvre peu à peu la voie à des plaintes de guitares saturées. Au bout d’une minute trente, la voix éraillée de Manuel fait son apparition et commence sa longue litanie, ode à la mort, au ciel sans lune, à la reine des neiges et aux vents sombres, le tout dans un anglais très approximatif. Le tempo de ce morceau est lourd, plutôt mélodique et subit une accélération foudroyante a quatre minutes trente qui le fait basculer dans un Black beaucoup plus traditionnel. Jusqu’alors, la musicalité des guitares faisait tomber « A Winter’s Tale » dans un Metal noir à tendances Pagan, inspiré par la pureté de la nature. De manière plus générale, je ne sais pas si ce titre est vraiment représentatif de l’état d’esprit de NEBUNAM, mais s’il l’est, on peut considérer ce groupe comme une entité qui prend les choses très à cœur. En dépit d’hésitations dues à la jeunesse du projet, le duo est appliqué. Il nous propose un véritable break très angoissant en plein milieu du morceau qui permet à leur compo de prendre une grosse bouffée d’air frais, avant d’embrayer sur un final épique. Plus de quatorze minutes, à titre indicatif, le « Seven Tears Are Flowing To The River » de NARGAROTH fait la même durée. Place maintenant à « Sturm », cette nouvelle compo qui aura quand même mis cinq années à voir le jour. Ce qu’on peut remarquer d’entrée, ce que la production est un cran en-dessous. Les guitares et la batterie sont vraiment étouffées, comme si elles avaient été enregistrées dans un répondeur. Au niveau des atmosphères, ça sonne plutôt comme du True Black Metal de cave (ou de caniveau). Une brutalité exagérée qui tranche trop avec la musicalité appréciable d’« A Winter’s Tale ». Alors je veux bien que cette piste évoque l’orage, mais là c’est carrément l’ouragan. Bruitiste au possible, cette « chanson » aura besoin d’attendre la sixième minute pour que son break bienvenu lui confère un peu de jugeote. La fin est un peu plus travaillée mais ça ne change rien au problème. On s’emmerde ferme pendant onze minutes. Seule la voix de Manu qui hurle cette fois en allemand résonne plutôt bien au cœur de cette bouillie brulée.
Un bon morceau, un autre très moyen, NEBUNAM est un groupe dont on n’est pas très bien sûr de comprendre la logique. Quelques mois après la formation du groupe sort « A Winter’s Tale », composition fougueuse et pleine de promesses. Et alors qu’on pensait que le temps qui passe servirait à affiner ce Black Metal talentueux, le duo ne trouve rien de mieux à proposer sur son premier EP, grand moment dans la vie d’un groupe s’il en est, que « Sturm » ? Allô les mecs, elle est cachée où la caméra ?
Ajouté : Mercredi 24 Octobre 2012 Chroniqueur : Stef. Score : Lien en relation: Nebunam Website Hits: 10420
|