# 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
}
NEAERA (de) - Ours Is The Storm (2013)

Label : Metal Blade
Sortie du Scud : 1er mars 2013
Pays : Allemagne
Genre : Death Metal mélodique / Metalcore
Type : Album
Playtime : 12 Titres - 44 Mins
Vous savez ce qui me pousse à acheter un album plutôt qu'un autre ? La pochette. J'ai comme idée reçue qu'un visuel moche représente une musique banale et je suis donc conscient de passer à côté de bien des jouissances. Si je vous raconte ma vie, c'est parce que pour la première fois, NEAERA arbore un visuel digne d'accrocher l'un ou l'autre regard curieux et représentatif d'un blaze qui fait l'unanimité au sein de la scène Death mélo teutonne. Ce n'est pas une question de goût, ce n'est pas une affaire d'appréciation. Après cinq albums de bonne facture mais dont la matérialisation physique demeure peu engageante, voilà que les Allemands accordent enfin leurs violons. Markus Ruf (guitariste chez FEAR MY THOUGHTS) a remplacé l'indéboulonnable Terje Johnsen à la conception de l'artwork et d'emblée, ce frisson caractéristique qui part du nerf optique, qui longe l'échine et qui dilate le rectum se fait sentir. Forging The Eclipse est désormais vieux de trois ans et de là à dire que 2013 sera l'année NEAERA ou ne sera pas, il n'y a qu'un pas. Subtil, à l'image de cette œuvre riche et finaude.
Le risque de voir les courbes s'inverser existait bel et bien. Après tout, on parle d'un Death mélodique orienté Metalcore et dans ce domaine, les surprises et les désillusions sont monnaie courante. C'est franchement exaltant de voir NEAERA éviter tous les pièges avec grâce et souplesse, de les entendre rechercher, créer, expérimenter tout en consolidant les acquis. Ours Is The Storm n'est certes pas l'album parfait. Il regorge de facilités, de plans convenus, de séquences téléphonées, mais on retiendra surtout de lui son engagement. Après une intro terrifiante d'inventivité (une grosse averse pour bien qu'on fasse le rapprochement avec le titre de l'album), l'éponyme est lâchée. Le phrasé de Benjamin Hilleke est lent, prémâché, sombre, tout l'inverse d'un riffing frénétique et d'une basse qui ronronne, soutenue par la production ultra-méga-giga-explosive d'Alexander Dietz. Il n'y a pas de hasard, le lien avec HEAVEN SHALL BURN étant le premier à m'être venu à l'esprit. Une alternative non. Un outsider oui. Armé de ces effusions de Metalcore granuleuses, NEAERA performe ses premiers titres sans qu'on ne trouve rien à redire sur l'intensité et l'impact. Les Allemands mettent de l'implication, du mouvement dans leur musique et si le tout manque un peu de musicalité pour mériter son étiquette "Death mélodique", ça n'en demeure pas moins décoiffant. Pour avoir chroniqué l'Armamentarium de 2007, je peux vous dire que NEAERA a vraiment changé de dimension. Il n'y a plus rien de classique là-dedans, plus rien de morose. C'est le haut du panier. Certains choix demeurent discutables, comme ces vocaux déstabilisants sur "Slayin The Wolf Within" ou bien encore ces intonations blackened Death qui accompagnent certaines compositions, "Black Tomb" à 0'52'' en particulier. Ou encore cette tracklist qui contient 12 morceaux (14 sur la version bonus), ce qui fait d'Ours Is The Storm un album particulièrement long et dense. Seulement voilà, entre variations rythmiques, breaks touffus, lignes mélodiques éparses mais épurées, l'homogénéité de l'œuvre en elle-même balaie ces petites imperfections d'un revers de la main. Mon seul regret est finalement que NEAERA aurait pu jouer ici une carte vraiment épique et qu'ils s'en privent, au profit de structures plus raisonnables.
J'avais perdu de vue nos amis après un Omnicide – Creation Unleashed tristounet. Mais au fond de moi, je savais que de voir apparaître leur nom avec récurrence sur les flyers des shows les plus bandants, aux côtés des CALIBAN et autres HEAVEN SHALL BURN, n'était pas un signe d'une totale innocence. Avec son sixième opus, NEAERA ne part pas en reconquête. Il y a juste un truc de dingue qui s'est écrit avec Ours Is The Storm et c'est précisément là que je regrette parfois mon snobisme.
Ajouté : Samedi 08 Mars 2014 Chroniqueur : Stef. Score :     Lien en relation: Neaera Website Hits: 8044
|