# 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
}
ENSLAVED (no) - Axioma Ethica Odini (2010)
Label : Indie Recordings
Sortie du Scud : 27 septembre 2010
Pays : Norvège
Genre : Black / Viking Metal Expérimental
Type : Album
Playtime : 9 Titres - 58 Mins
Aujourd’hui, pic de canicule. Il fait 41°C dehors et pourtant, un vent glacé tempête dans mes oreilles. Et pour cause, j’écoute ENSLAVED. Je rattrape le temps perdu. A l’aube de la sortie de RIITIIR, charmant palindrome et douzième de leurs albums studio, l’heure était peut-être venue de se consacrer à Axioma Ethica Odini, le petit dernier en date avant qu’un heureux évènement ne pointe son nez le 28 septembre de 2012. Sorti en 2010, deux ans après un Vertebrae monumental qui me faisait tardivement entrer dans l’univers singulier de cette formation, cette œuvre majeure (une de plus) de leur discographie révèle un ENSLAVED qui n’a jamais paru aussi en jambes. Mais le plus étonnant dans l’histoire, c’est que quoi que fassent les Norvégiens, leur autorité et leur supériorité artistique n’est jamais remise en cause, et ce malgré les virages résolument Rock et progressifs empruntés depuis maintenant Below The Lights en 2003. Pour la onzième fois consécutive, le quintette, uni sans discontinuer depuis 2004, propose une sortie qui frôle, qui caresse, qui flirte avec la perfection et qui nous offre à nous, auditeurs, ce qu’on recherche le plus dans ce genre de disque, à savoir la transcendance.
Parce qu’ENSLAVED, c’est l’archétype du groupe qui sait évoluer positivement. Et qui le fait un peu plus à chaque sortie. Tout est sujet à éjaculation dans cette sortie. Depuis les premiers riffs explosifs de « Ethica Odini » jusqu’à la fin brutale de « Lightening ». Ce n’est pas pour rien que le public chérit ces artistes. C’est parce qu’ils ont une âme, un caractère et un don. Du haut de ses huit minutes, « Ethica Odini » rivalise déjà avec les meilleures idées de Vertebrae, tant les guitares sonnent justes et nébuleuses. Très en forme, le duo de gratteux Ice / Ivan marche sur l’eau avec une implication absolue et une grande richesse dans les idées. Plus cet album déroule, plus on est surpris par son caractère résolument granuleux et sombre. Là où Vertebrae s’amusait à proposer des passages ventilés et beaucoup d’expérimentations, Axioma Ethica Odini pousse l’auditeur dans ses derniers retranchements avec des ambiances plus lourdes, plus méthodiques et des refrains pittoresques. C’est très opaque, très massif. J’en veux pour preuve un « Waruun » dantesque avec une batterie écrasante et un final ciselé dans le granit. Puis intervient « Giants », un mid-tempo plus que convaincant, pas loin d’un Black / Doom redondant avec un dialogue passionnant entre les vocaux cleans d’Herbrand et les grunts de chien malade de Grutle. Hypnotique, d’une autre dimension, cette création est une douce drogue qui vous embue le regard. Et alors qu’on croit qu’on a trouvé sa chanson préférée de l’album, intervient « Night Sight », une balade vaporeuse sur laquelle aurait pu jouer Steven Wilson. Enfin c’est ce qu’on s’imagine, jusqu’à ce coup de champignon qui emporte votre embarcation vers une descente en rafting mouvementée. Le calme apparent qui revient épisodiquement au rythme des interventions d’Herbrand s’assimile à une paisible traversée de fjord. Avant de sombrer encore et encore dans d’interminables remous orchestrés par un Grutle plus disponible que jamais. La cohésion irréprochable entre les musiciens, la densité de leurs compositions, la verve et la tranquillité avec laquelle ils les jouent, le plaisir pris en les écoutant et la sensation de sérénité qui en résulte. Axioma Ethica Odini ce n’est pas l’effet papillon, c’est une suite d’évènements rationnels. Des artistes et des auditeurs qui prennent un pied monstre, réunis tous les deux ans environ dans une bulle.
Ce vase clos, c’est ENSLAVED. On pourrait en discuter des heures afin de définir à quelle place doit se tenir cette galette dans leur richissime discographie. Mais au fond, ENSLAVED a fait du ENSLAVED. Et du grand. Peut-être sans surprises, peut-être sans retournement de situation improbable. C’est tellement classique et tellement efficace à la fois, qu’on se demande bien si oui ou non un jour, on va commencer à se lasser. Il y a deux ans j’aurais dit qu’après ça, je peux mourir tranquille. Mais à quelques semaines de la sortie de RIITIIR, ce serait quand même sacrément con.
Ajouté : Lundi 03 Septembre 2012 Chroniqueur : Stef. Score : Lien en relation: Enslaved Website Hits: 6824
|