# 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
}
AESIRS (FRA) - Drown In Silence (2009)
Label : Auto-Production
Sortie du Scud : septembre 2009
Pays : France
Genre : Black / Death Metal
Type : EP
Playtime : 6 Titres - 24 Mins
Lyon, ses bouchons, Lisandro Lopez et AESIRS. Le deuxième est un incontournable pour tout épicurien. Le troisième a souvent sauvé des situations bien mal engagées. Et le quatrième, un nouveau venu dans le paysage rhodanien, est encore une énigme, dans le sens le plus embryonnaire du terme. Formé en 2008 sous l’impulsion de Ben (chant et guitare) et d’Alex (guitare), la formation se soude définitivement avec les arrivées consécutives de Benoit (batterie) et de Guillaume (basse). Un an plus tard, AESIRS explose et il ne reste que Ben pour piloter le navire, très vite rejoint par Nico à la guitare, Tom à la basse et Julien à la batterie. Fort de ce nouveau line-up et des conseils précieux prodigués par ses membres formateurs, AESIRS s’enferme dans le Savern Studio de Jean-Christophe Lefèvre (guitariste de NIGHTMARE) pour enregistrer son premier EP, le toujours anonyme Drown In Silence.
Sorti il y a maintenant plus de trois ans, en septembre de l’année 2009, ce disque devait propulser AESIRS au rang de figure de proue du Black / Death Metal underground français. Hélas, sans aucun héritier à se mettre sous la dent depuis tout ce temps, l’underground français a fini par oublier AESIRS. Après une introduction acoustique qui fait très Folk / Pagan, on plonge avec « Silent And Calm » dans un tout autre univers. Pas celui du silence, comme le suggère pourtant le titre de l’œuvre, mais celui du Black / Death Metal aux sonorités old-school. BEHEMOTH, qui est pourtant un groupe très influent pour ce style musical, n’a apporté strictement aucun écot à cet EP, au contraire de Chuck Schuldiner (DEATH) ou de Jon Nödtveidt (DISSECTION) qui revivent sur des riffs comme ceux de « Siberian Steel » ou d’« Auri Sacra Fames ». Le riffing très mélodique de la guitare lead est d’ailleurs une incantation à peine voilée à l’œuvre du groupe Suédois cité ci-dessus. Plutôt harmonieux et musical, Drown In Silence défile dans la cohérence, même si j’ai tendance à penser que les structures sont souvent ressemblantes. Au bout de l’ultime compo, « Path Of Sorrow », il n’y a déjà plus aucun effet de surprise, tant on a rapidement été habitué à la musicalité de cet opus. Le Black à tendances Death d’AESIRS, qui devient un Death à tendances Black selon les morceaux, est ingénieux, efficace mais malheureusement, il ne m’a pas laissé un souvenir impérissable. Il mérite d’être davantage affiné, car si ces quelques créations sont accrocheuses sur l’instant et vous envoient une volée de bois en plein visage, elles auront également toutes les peines du monde pour vous envoyer durablement au tapis. AESIRS est à première vue un groupe généreux et sérieux, mais finit par se révéler comme relativement inoffensif au fil de son album. Je pense que ces Lyonnais auraient tout intérêt à creuser un peu l’esprit d’une instrumentale comme « Embraced Heart », qui sert ici d’ouverture, mais qui ne ferait pas pâle figure au cœur d’un « Lament » par exemple. A l’image de ce qui se fait justement en plein milieu d’« Auri Sacra Fames ». Ce ne sont là que quelques pistes, mais elles sont à mon sens exploitables, car Drown In Silence, qu’on soit honnête, manque d’un vrai tube dans sa tracklist !
Certes, le moment passé en leur compagnie n’est franchement pas désagréable et l’application technique dont ils font preuve ravira le métalleux de base plus que de raison. Mais pour que l’emballement soit légitime, il eut fallu qu’AESIRS travaille ses bonnes dispositions. L’année 2012 arrive doucement à son terme et Drown In Silence reste à ce jour l’unique trace discographique laissée par nos amis Rhodaniens. Vous comprendrez qu’elle est bien trop dérisoire pour qu’on puisse aujourd’hui valider leur statut de grands espoirs du Black / Death tricolore. L’heure va désormais urgemment à la confirmation.
Ajouté : Lundi 22 Octobre 2012 Chroniqueur : Stef. Score : Lien en relation: Aesirs Website Hits: 8220
|