# 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
}
SPAWN OF POSSESSION (se) - Cabinet (2003)
Label : Unique Leader Records
Sortie du Scud : 14 janvier 2003
Pays : Suède
Genre : Death Metal technique
Type : Album
Playtime : 11 Titres - 39 Mins
Je dis tout sur le présent, rien sur le futur. Je suis le passé. Qu'il est gratifiant de comprendre en quoi SPAWN OF POSSESSION est devenu un trublion dans sa catégorie en dévorant Cabinet. Seuls le polyvalent Dennis Röndum (d'abord batteur-chanteur, unique vocaliste depuis 2010) et le roi du songwriting Jonas Bryssling (guitare depuis 1997) sont encore aujourd'hui concernés par les sorties orgiaques du combo suédois, faisant du récent Incurso (2012) la pièce-maitresse qu'elle est devenue pour le Death technique. Il serait pourtant tout à fait scandaleux d'omettre l'importance du Noctambulant de 2006 et de ce Cabinet, paru en 2003 chez Unique Leader Records. Car qu'on se le dise, avec ce premier effort, le quatuor a posé les jalons de sa notoriété, effectuant des débuts fracassant, dans l'antichambre du révolutionnaire.
On avait déjà entendu pareille vitesse à l'époque, et évidement que le Death technique n'est pas né le jour où SPAWN OF POSSESSION s'est décidé à sévir. Il n'empêche, avec Cabinet, les suédois ont injecté une quantité incroyable de sang frais à cette scène qui ne tolère aucune approximation technique, d'où son nom. Suintant rapidité d'exécution, viscosité du riff et culte du guttural, cet opus un peu morbide est si loin de l'humeur jazzy d'Incurso que c'en devient presque troublant. Oui, il y a une part d'inconnu avant la lumière, et SPAWN OF POSSESSION, avant de rayonner de son Death technique et alchimique, était du genre marteau-piqueur. Lancé comme une locomotive, Cabinet explose tout sur son passage avec une vivacité encore remarquable dix ans après. Les plans sont aussi rapides que changeants. Les solos ne durent pas bien longtemps, idem concernant le débit très "haché" des paroles. De cette déconstruction assez extrême, on retiendrait presque l'idée d'un Grind fini au Death de SUFFOCATION période Breeding The Spawn (pour rester dans le thème). L'expéditive "Inner Conflict" en atteste et c'est presque le même constat sur "Swarm Of The Formless". Ceci étant, et c'est une chose assez exceptionnelle pour un debut-album, SPAWN OF POSSESSION n'est pas tant dans la réminiscence des anciens que dans la proposition de nouveau. Eux avaient déjà ce supplément d'âme qui distingue les futurs grands, sans être dans l'outrance ni dans la surenchère rythmico-technique. Cabinet est même plutôt sobre dans son genre, pour peu qu'on adhère à la doctrine du "vite fait (mais) bien fait". Adjugeons néanmoins quelques bons points, en commençant par Dennis Röndum et son jeu de batterie idéalement synchronisé. Le bonhomme, grâce à sa prestation tentaculaire, nous fait parfaitement comprendre pourquoi SPAWN OF POSSESSION nous vient de la ville de Kalmar et pas d'ailleurs. Pas moins rapide derrière le micro, il est assurément l'attraction première de ce disque. Derrière lui, la production old-school de Magnus Sedenberg (qui s'est aussi occupé du In Distortion We Trust des CRUCIFIED BARBARA en 2005) ouvre une voie royale aux deux guitaristes, Bryssling et Karlsson, qui se répondent constamment même si je ne suis pas addict' aux solos de ce dernier. Individuellement, collectivement, ce groupe est une force de la nature, et on parviendra même à repérer ça et là quelques pistes de réflexion ("Uncle Damfee" en tête, "Cabinet" en suite) qui ont peut-être pesé dans la balance au moment où les SPAWN ont voulu ouvrir leur jeu.
On ne contestera pas le fait que si SPAWN OF POSSESSION est devenu si influent pour toute une génération de guitaristes, c'est parce qu'en 2003, Cabinet a fait office de petite bombe dans le microcosme du Death technique. Relativement fantomatique par rapport à leur nouvelle orientation, il convient de replacer ce premier jet dans un contexte vieux d'une décennie et d'apprécier une éclosion aussi précoce que spectaculaire.
Overdose de technicité, de brutalité, de structures protéinées, d'une musicalité huileuse et huilée, Cabinet est bien malgré lui ce cocktail qui donne envie d'aller au toilettes avant d'en reprendre.
Ajouté : Vendredi 20 Mars 2015 Chroniqueur : Stef. Score : Lien en relation: Spawn Of Possession Website Hits: 6136
|